GAS TT 10 anni con voi

Ben arrivato! Fai login o registrati per fruire di tutte le funzionalità del forum e del sito.
Se eri già registrato e non ti ricordi la password usa questo link per recuperare l'accesso.
Sito e forum dedicati al fermodellismo, il nostro hobby viene praticato in molte maniere diverse, tutte ugualmente valide: hai un plastico? oppure sei un collezionista? oppure un semplice appassionato? Non esitare a scrivere nel forum, tutti gli interventi sono benvenuti... Postate foto e video del vostro plastico e chiedete aiuto per ogni problema o curiosità inerente al nostro hobby.

Riconoscimento Locomotive con RFID

Il sistema digitale (DCC) applicato al modellismo ferroviario.

Moderatori: lorelay49, cararci, MrMassy86, adobel55

Messaggio
Autore
Avatar utente
ho_master
Messaggi: 654
Iscritto il: martedì 6 novembre 2012, 6:58
Nome: Antonello
Regione: Abruzzo
Città: Pescara
Stato: Non connesso

Riconoscimento Locomotive con RFID

#1 Messaggio da ho_master »

Sul Plastico di Fossacesia abbiamo bisogno di riconoscere quale convoglio stia entrando in stazione, anche se condotto in manuale per cui ho testato questa soluzione basata su Arduino con ottimi risultati.

( tratto da https://github.com/rocrail/Arduino )

Il circuito:

Immagine:
Immagine
57,53 KB

lo sketch

Codice: Seleziona tutto

/" Typical pin layout used:
 " ---------------------------------------
 " "             MFRC522      Arduino UNO
 "             Reader/PCD
 " Signal      Pin          Pin
 " ----------------------------------------
 " RST/Reset   RST          9
 " SPI SS      SDA(SS)      10
 " SPI MOSI    MOSI         11
 " SPI MISO    MISO         12
 " SPI SCK     SCK          13
 "/

// rev1.00 07.02.2016
// configure Rocrail with INTER-10 command station, settings see Wiki 
// http://forum.rocrail.net/viewtopic.php?f=47&t=11300&start=15#p111849

// For any reason it does only work with Arduino UNO.
// With my genue Arduino Micro nothing is send to Rocrail, but putput to terminal works fine.

#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN   9
#define SS_PIN    10
#define FBAdr     1     //feedback adress in Rocrail
boolean debug = false;  //false: prepare output for RR, true:huaman readable outputp for terminal window

//"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
// no more user settings after this line 

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

char SerialReceive;
void setup() {
  Serial.begin(19200);
    Serial.flush();
  SPI.begin();
  mfrc522.PCD_Init();   // Init MFRC522
  mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
}

String oldRFID = "";
String RFID = "";
int sendEndCount = 3;
int Intervall = 0;

void loop() {
  
   if (Serial.available() >= 1) {
    SerialReceive = Serial.read();
    if (debug) Serial.println(SerialReceive);
    
    if (SerialReceive == 0x25) {      //80msec Interval
      Serial.flush();
      mfrc522.PCD_Init();   // Init MFRC522
      mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
      Intervall = 80;
    }
    if (SerialReceive == 0x20) {      //2sec interval, onyl for compatibillity, I guess Rocrail does not support this
      Serial.flush();
      mfrc522.PCD_Init();   // Init MFRC522
      mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max);
      Intervall = 2000;
    }
  }

  sendEndCount++;

  if (sendEndCount == 3) {  // tag was removed from reader
    if (debug) {
      Serial.print ("0x80 ");
      Serial.println ("FBAdr ");
               }
    else {
      Serial.write(0x80);
      Serial.write(FBAdr);
         }
    oldRFID = "";
  }


  if (!mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  if (mfrc522.PICC_ReadCardSerial()) {
    RFID = mkString(mfrc522.uid.uidByte, mfrc522.uid.size);
    if (RFID == oldRFID) {
      if (debug) {
      //  Serial.print ("0x70 ");
      //  Serial.println ("FBAdr ");
      }
      else {        // due to bug in RR library this must not be send, otherwise RR get out of sync
        //          Serial.write(0x70);
        //          Serial.write(FBAdr);
      }

    }

    if (RFID != oldRFID)
    // some of my tag has only 4Byte UID, 
      if (mfrc522.uid.size = 4) {
        oldRFID = RFID;
        if (debug) {
          Serial.print ("FBAdr ");
          Serial.println(RFID);
          Serial.write(0x00);
                   }
        else {
          Serial.write(FBAdr);
          Serial.write(mfrc522.uid.uidByte, 4);
          Serial.write(0x00);
          
        }
      }
    // others has 7Byte UID, in this case cut the LSB 
      if (mfrc522.uid.size > 4) {
        oldRFID = RFID;
        if (debug) {
          Serial.print ("FBAdr ");
          Serial.println(RFID);
                   }
        else {
          Serial.write(FBAdr);
          Serial.write(mfrc522.uid.uidByte, 5);
             }
      }
    sendEndCount = 0;
  }
  delay(Intervall);
}

// convert Binary data to huaman readable HEX format
String mkString(byte "buffer, byte bufferSize) {
  String UID = "";
  for (byte i = 0; i < bufferSize; i++) {
    if (buffer[i] == 0) {
      UID = UID + "00";
    }
    else {
      UID = UID + String(buffer[i], HEX);
    }
  }
  return UID;
}

Il collegamento con il PC su cui gira Rocrail avviene tramite porta USB.

Su Rocrail ho configurato un controller di tipo INTER-10 legato alla porta assegnata da sistema alla USB: attenti alla velocita' di trasmissione da settare a 19200 Baud.

Uso dei tag autoadesivi spessore 1 mm e diametro 15-20 mm: ad ogni passaggio del sensore vicino all'antenna del sistema leggo sul server il codice del tag in decimale.

Con un semplice script deduco quale locomotiva sta passando e compio l'azione conseguente ( annuncio di stazione, ad esempio)

Codice: Seleziona tutto

<xmlscript>
  <switch var="%lcid%">
    <case val="252.91.27.219.0">
      <ext  cmd="suona.bat sounds\444.wav" />
    </case>
    <case val="180.170.35.84.0">
      <ext  cmd="suona.bat sounds\646.wav" />
    </case>
    <case val="42.246.35.84.0">
      <ext  cmd="suona.bat sounds\626.wav" />
    </case>
  </switch>
</xmlscript>
E' possibile usare l'accrocco anche in impianti analogici scrivendosi un programmino che legga la seriale e faccia qualcosa a seconda della locomotiva che passa

Antonello



Avatar utente
sal727
Messaggi: 4065
Iscritto il: domenica 26 aprile 2015, 17:22
Nome: Salvatore
Regione: Emilia Romagna
Città: Bologna
Ruolo: Moderatore
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#2 Messaggio da sal727 »

Molto interessante, ho usato quel sistema per apertura porte ed è molto efficace, non avevo ancora pensato a questo utilizzo :cool:
Domanda: dove hai posizionato il sensore e i tag adesivi.

Avatar utente
matteob
Messaggi: 886
Iscritto il: venerdì 12 giugno 2015, 12:06
Nome: matteo
Regione: Veneto
Città: San Bonifacio
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#3 Messaggio da matteob »

Bella idea! Quel sensore sarebbe un lettore badge? L'avete collocato, sotto il plastico ed eseguito un foro?
Matteo

Avatar utente
buddacedcc
Messaggi: 479
Iscritto il: martedì 4 dicembre 2012, 21:37
Nome: Epifanio
Regione: Piemonte
Città: Torino
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#4 Messaggio da buddacedcc »

matteob ha scritto:

Bella idea! Quel sensore sarebbe un lettore badge? L'avete collocato, sotto il plastico ed eseguito un foro?

Perdonatemi.....ma non si fa prima a leggere i dati trasmessi da decoder senza aggiungere altro ?
Nuccio - Visita DCCWorld, il primo ed unico sito italiano dedicato al digitale.

Avatar utente
ho_master
Messaggi: 654
Iscritto il: martedì 6 novembre 2012, 6:58
Nome: Antonello
Regione: Abruzzo
Città: Pescara
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#5 Messaggio da ho_master »

@buddacedcc

Sul nostro plastico possono venire a 'giocare' tutti i Soci e non c'e' uniformita' di decoder e non siamo in grado di leggere i dati trasmessi.

Come dicevo il sistema puo' essere utilizzato anche quando si va in analogico.

Ho privilegiato velocita' di realizzazione e spesa contenuta ( 13-15 Euro in tutto )

Inoltre si possono mettere i 'tag' in carri e carrozze per identificare il convoglio indipendentemente dalla loco.


Antonello

Avatar utente
ho_master
Messaggi: 654
Iscritto il: martedì 6 novembre 2012, 6:58
Nome: Antonello
Regione: Abruzzo
Città: Pescara
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#6 Messaggio da ho_master »

@matteob

Il sensore e' posto in orizzontale sotto il binario (privato delle traversine) all'uscita di una galleria; il 'tag' RFID e' appiccicato al carrello della loco.

Sto testando sull'altra galleria il sensore in verticale e il tag all'interno di un carro o della loco in verticale.

Antonello

Avatar utente
sal727
Messaggi: 4065
Iscritto il: domenica 26 aprile 2015, 17:22
Nome: Salvatore
Regione: Emilia Romagna
Città: Bologna
Ruolo: Moderatore
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#7 Messaggio da sal727 »

@ Antonello
Continuo ad essere sempre più incuriosito da questo sistema, io vado in analogico, dici di poter attivare gli annunci in base al treno che viene rilevato, utilizzi arduino o altro sistema, io ho cercato senza successo su arduino di poter selezionare su una sd il brano che desideravo, ma non sono mai riuscito a realizzarlo, le varie schede che ci sono danno poche possibilità: riproduzione casuale, ripetitiva o in sequenza.

Avatar utente
ho_master
Messaggi: 654
Iscritto il: martedì 6 novembre 2012, 6:58
Nome: Antonello
Regione: Abruzzo
Città: Pescara
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#8 Messaggio da ho_master »

Io ha avuto gli stessi problemi con varie schede e con un riproduttore di mp3 modificato. Attualmente i messaggi li riproduco da PC o da una schedina Raspberry.

Il Raspberry e' in grado di leggere le uscite di Arduino e di far andare un brano a seconda della combinazione che ritrova sul GPIO ( il connettore per i dati ).

Appena ho un attimo presento una versione su Arduino non legata a Rocrail

Antonello

Avatar utente
sal727
Messaggi: 4065
Iscritto il: domenica 26 aprile 2015, 17:22
Nome: Salvatore
Regione: Emilia Romagna
Città: Bologna
Ruolo: Moderatore
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#9 Messaggio da sal727 »

Grazie per la risposta era poi quello che temevo che con arduino ci sono problemi per riprodurre file audio, stavo valutando una schedina di registrazione audio , ne ho vista una con 10 sec di registrazione ed un altra che è più capiente ma necessita un circuito con amplificatore audio e connessioni con arduino.
Volevo anche chiederti se hai testato la lettura anche a varie velocità, cioè se andando a velocità sostenuta il sensore riesce a leggere il tag.

Avatar utente
ho_master
Messaggi: 654
Iscritto il: martedì 6 novembre 2012, 6:58
Nome: Antonello
Regione: Abruzzo
Città: Pescara
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#10 Messaggio da ho_master »

@Salvatore

Conosci o hai provato questa schedina ? clicca qui


Immagine:
Immagine
137,78 KB

Appena mi arriva provo a fare un circuitino autonomo.

Nel frattempo sto lavorando con una Rasberry e un rivelatore RFID:
in questo caso il RasPI farebbe tutto da solo senza schedine aggiuntive oltre all'antennina RFID.

Antonello

Avatar utente
sal727
Messaggi: 4065
Iscritto il: domenica 26 aprile 2015, 17:22
Nome: Salvatore
Regione: Emilia Romagna
Città: Bologna
Ruolo: Moderatore
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#11 Messaggio da sal727 »

Interessante il programma, me lo guardo bene e cerco di capire che cosa fa, io tempo fa ho preso questo WTV020-SD v.1.00
http://www.sgbotic.com/products/datashe ... Module.pdf
non so se è lo stesso chip, perchè sapevo che non leggeva direttamente gli Mp3 ma bisognava convertirli in formato dac, per poter essere letti, con un programmino che si scaricava, avevo trovato sketch che potevano solamente leggere in sequenza e attivarli da pulsanti non che si potevano selezionare via software.

Avatar utente
sal727
Messaggi: 4065
Iscritto il: domenica 26 aprile 2015, 17:22
Nome: Salvatore
Regione: Emilia Romagna
Città: Bologna
Ruolo: Moderatore
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#12 Messaggio da sal727 »

Stuzzicato, e non poco, da questa idea del riconoscimento convogli sul plastico a mezzo Arduino e Rfid, ho acquistato dei modulini NCF adesivi rettangolari 12x19, misura idonea da inserire sotto una loco o un vagone

Immagine

acquistati sulla Baia
http://www.ebay.it/itm/111917374902?_tr ... EBIDX%3AIT
provati con il ricevitore Rfid, sono perfettamente riconoscibili, adesso non mi resta che provare sul campo.

Avatar utente
Glifos
Messaggi: 15
Iscritto il: mercoledì 20 aprile 2016, 18:39
Nome: ULIVIERO
Regione: Liguria
Città: Bolano
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#13 Messaggio da Glifos »

Io ho risolto con le schede registrazione vocale isd 1820 da 10sec. e la 1700 da 60sec, attivate da Arduino,entrabe dotate di microfono.
La prima la uso solo su PL ,10 sec di suono di "lecca lecca",attivata da Arduino.
La seconda, piu' performante, 60 sec di registrazione, sulla quale sono riuscito a salvare 13 annunci selezionati da Arduino Mega nell'ambito della programmazione della stazione principale del mio costruendo plastico a pannelli.
Sul primo l'attivazione è banale ,basta mettere a massa il play, pin 5 P-E.
Per la seconda ,la storia e' piu' complessa.
Studiando il modulo, mi sono accorto che ,all'accensione, lui punta sempre sull'ultimo annuncio, nel mio caso il 13esimo.
Non disponendo di un reset, mi sono creato un enable con un transistor in emitter follower,il quale alimenta il modulo.
Tutti i pulsanti del modulo sono attivi verso massa quindi,Arduino a programma, muovera' i vari pinout di comando in attivo basso tramite un diodo tipo 4148.
La sequenza ,quindi,sara':1) interrompo l'alimentazione per un sec.,lui si posiziona sul 13esimo,2)un ciclo for da 1 a 13 (se voglio il 5°lo fermo a 5) seleziona l'annuncio sul pin FWD,3)attivazione del play e l'annuncio voluto viene eseguito.
Il tempo di attivo basso puo' andare bene da 700millisecondi a un sec.
Il tutto funziona bene,e la spesa è circa 6€.
Uliviero
Uliviero

Avatar utente
sal727
Messaggi: 4065
Iscritto il: domenica 26 aprile 2015, 17:22
Nome: Salvatore
Regione: Emilia Romagna
Città: Bologna
Ruolo: Moderatore
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#14 Messaggio da sal727 »

Con la schedina da 10 sec sono riuscitio a farla funzionare, anche se l'audio è molto debole e penso che necessiti di un piccolo amplificatore, nell'altra da 60 sec non avendo trovato nessuna argomentazione per farle riprodurre il file che desidero, ho tralasciato, e mi sono concentrato si una schedina Mp3 su SD, ho trovato alcuni sketch idonei e li sto valutando, ma ancora senza ritultati.

Avatar utente
sal727
Messaggi: 4065
Iscritto il: domenica 26 aprile 2015, 17:22
Nome: Salvatore
Regione: Emilia Romagna
Città: Bologna
Ruolo: Moderatore
Stato: Non connesso

Re: Riconoscimento Locomotive con RFID

#15 Messaggio da sal727 »

Sono andato avanti con le mie prove, e sono finalmente riuscito a far parlare Arduino :cool: , ho utilizzato la schedina con MicroSD che avevo già preso tempo fa, WTV020-SD

Immagine

questa schedina purtroppo non legge i file Mp3 e bisogna convertirli in formato ad4, c'è un programmino apposta che li converte, inoltre la schedina SD deve essere al max di 2 Gb per essere formattata in Fat16 (questa per fortuna l'avevo in casa, comunque se ne trovano ancora sulla baia), al momento ho verificato uno sketch che legge la schedina e può selezionare il file che si desidera, usando semplicemente i numeri della tastiera, poi cercherò invece di azionarlo attraverso il rilevamento dei sensori Rfid, che riconoscendo il convoglio aziona il file idoneo, l'intenzione è di far sentire gli annunci in stazione in base al convoglio che arriva.
Lo schema di connessione con arduino è il seguente

Immagine

l'altoparlante si collega direttamente alla schedina, ci vorrebbe un 4 Ohm, ma di piccole dimensioni si fatica a trovarli, io ho usato un 8 Ohm, l'audio è più basso, volendo con un piccolo amplificatore si risolve il problema. I file audio li ho realizzati personalmente con un semplice programmino free che da un file di testo produce l'audio con voce femminile o maschile ( DSpeech ), e una volta salvato in Mp3 si converte per essere utilizzato sulla schedina.

Torna a “DIGITALE”