Impariamo ad utilizzare i tags RFID
RFID sta per Radio Frequency IDentification ed è una tecnologia utilizzata per il riconoscimento di oggetti, persone ed animali senza contatto e senza alimentazione. L’oggetto da riconoscere reca con sè un TAG (che nella fattispecie è un transponder). Nel TAG è memorizzato un codice univoco. Non appena il TAG entra nelle vicinanze di un lettore (un RFID Reader), questo viene letto ed il sistema a valle del lettore può riconoscere e/o registrare l’oggetto (la persona, l’animale) appena passato. Il bello dei TAG è che sono piccolissimi e non hanno bisogno di essere alimentati: ricevono l’energia necessaria per poter trasmettere il codice dalle onde radio propagate dal sistema stesso di lettura sfruttando l’induzione elettromagnetica. Questo rende tale sistema per niente invasivo (è un sistema contactless), semplice, leggero ed economico. Le applicazioni dell’RFID oramai sono a milioni: riconoscimento del personale, controllo accessi, marcatura animali (il famoso CHIP che si mette agli animali domestici), tracciabilità oggetti, si usa anche per aprire e mettere in moto le automobili ecc.
Maggiori informazioni possono essere trovate su wikipedia: http://it.wikipedia.org/wiki/Radio_F…IDentification anche se la versione in inglese è sicuramente più esauriente: http://en.wikipedia.org/wiki/Rfid
Come detto è anche un sistema molto economico nonostante la sua potenza e versatilità. Esistono dei chip di lettura dei tag rfid che possono essere interfacciati anche con i picmicro, con Arduino o con qualsiasi MCU preferiate utilizzare.
Indice dei contenuti
L’ innovations ID-20
I Chip Innovations ID-12 e ID-20 sono due moduli integrati RFID reader funzionanti unicamente con TAG a 125KHz,
Quindi: i tag RFID sono caratterizzati da una frequenza ed i lettori sono in grado di leggere tag funzionanti ad una o più determinata frequenze. 125KHz è la frequenza maggiormente diffusa soprattutto nei Badge (che in molte aziende vengono usate per controllo accessi/marcatempo) e i transponder formato bottone/portachiavi.
La differenza tra i due moduli risiede unicamente nella potenza (e quindi anche nel consumo). L’ID-20 riesce a leggere un tag alla distanza massima di 16cm (e consuma circa 65mA), l’ID-12 arriva ad una distanza massima di 12cm (e consuma meno della metà: 30mA):
Ovviamente questi centrimetri sono dati di massima. Entrambi hanno la stessa piedinatura, sono intercambiabili e non necessitano di un’antenna esterna in quanto è già inglobata nel modulo, a differenza di altri RFID reader più economici per i quali siamo costretti a realizzare da noi un’antenna esterna (con tutti i problemi che possono esserci).
Comunque sia è sempre possibile aggiungere un’antenna esterna anche ai due moduli della Innovations in quanto hanno un pin dedicato proprio al collegamento di un’eventuale antenna aggiuntiva (ma ce n’è davvero bisogno? Con l’ID20 sono riuscito a leggere i tag anche interponendo una tavola di legno pieno spessa 5cm!).
Adattare i moduli
Qualora intendiamo sperimentare con questi moduli, ci troveremo di fronte all’unica, apparente, difficoltà: i moduli hanno una piedinatura con un passo da 2mm, più stretta di quella da 2,54mm alla quale siamo abituati anche sulle breadboard o sulle millefori:
Poco male! Se abbiamo intenzione di sperimentare, ci viene in aiuto una comodissima breakout-board prodotta dalla sparkfun:
Altrimenti se vogliamo soltanto collegare il modulo al PC, senza interfacciare il modulo con un microcontrollore, possiamo anche direttamente optare per una scheda di adattamento USB come questa.
Comunque sia io proseguo per la strada dell’adattamento perchè voglio essere libero di sperimentare sia col collegamento diretto verso il pc che con un microcontrollore (più in là!). Usando la breakout-board, la quale ci permetterà di connettere il modulo su una breadboard o su una millefori, possiamo scegliere di saldare prima due strip maschio sui pin da 2,54 e quindi saldare il modulo direttamente sulla basetta.
Oppure, per poter riutilizzare facilmente il modulo in altri esperimenti, procurarsi due strip femmina col passo da 2mm (sono gli stessi che si usano anche per i moduli XBee, ma dovremo accorciarli in quanto hanno qualche pin in più):
Alla fine otterremo una scheda di adattamento ben fatta e che ci consentirà di riutilizzare il modulo tutte le volte che vorremo:
Collegamenti
Potete seguire lo schema di collegamento illustrato qui (è lo stesso sia per l’ID-12 che per l’ID-20):
In ogni caso il datasheet è disponibile in fondo all’articolo. In particolare collegando il PIN 7 a GND impostiamo il modulo per fornire i dati in uscita con un semplice protocollo seriale asincrono a 9600bps, 8 bit di dati, 1 bit di stop, nessuna parità, il che ci consente di collegarlo direttamente all’UART del pc (tramite un’apposito adattatore TTL/UART tipo il 990.004 o una qualsiasi interfaccia basata sul MAX232 se il vostro PC ha la porta seriale classica) o all’UART di un microcontrollore qualsiasi.
Il PIN 9 rappresenta l’uscita dati, andrà collegata al terminale di ricezione dati della vostra scheda di adattamento o al terminale RX del microcontrollore.
Sul pin 10 è possibile collegare un led o un buzzer attivo in maniera tale che il modulo segnalerà quando un tag è stato letto correttamente. Se si vogliono collegare contemporaneamente sia il led che il buzzer è necessario utilizzare un transistor come indicato sul datasheet in quanto il pin non riesce ad erogare la corrente necessaria.
Il formato dei dati inviati dagli ID-12 e ID-20
Una volta eseguiti tutti i collegamenti verso il PC possiamo aprire HyperTerminal (o qualsiasi programma di comunicazione su seriale) impostandolo a 9600bps, 8 bit di dati, 1 bit di stop, nessuna parità, nessun controllo di flusso (o anche controllo di flusso software Xon/Xoff dato che è questo quello utilizzato dal modulo):
Dobbiamo quindi procurarci dei tags a 125KHz:
I tag, come tutto il resto, li ho acquistati da robot-italy, ne esistono in varie forme e dimensioni: a portachiavi (in varie fogge: 1 2 3), a bottone piccolo, bottone grande, disco adesivo, badge formato carta di credito. Avete solo l’imbarazzo della scelta.
Passando il tag vicino alla parte frontale del modulo, su Hyperterminal possiamo osservare la risposta:
Il primo simbolo, che hyperterminal visualizza come uno smile, è in realtà il codice ASCII 02 noto anche come STX (Start Of Text) che viene appunto utilizzato come delimitatore di inizio trasmissione in una comunicazione utilizzante il controllo di flusso Xon/Xoff. Seguono quindi 12 caratteri (sarebbe meglio dire: 12 bytes). I primi 10, seguendo ciò che dice il datasheet, vanno presi a coppie e rappresentano il codice del nostro tag, nel mio esempio:
01 06 93 60 16 |
In pratica ogni coppia è da considerarsi come una rappresentazione in esadecimale di un byte (quindi 01 => 0x01 => 1 in decimale. 93 => 0x93 => 147 in decimale e così via).
Gli ultimi due numeri, anch’essi da considerarsi come un unico byte scritto in hex, rappresentano il checksum eseguito con un XOR dei 5 bytes precedenti.
Nel mio caso, convertendo da esadecimale a decimale i bytes che identificano il mio tag ottengo:
1,6,147,96,22 |
Effettuando un XOR tra questi 5 ‘numeri’ ottengo:
1 XOR 6 XOR 147 XOR 96 XOR 22 = 226 |
che in esadecimale vale E2, che come vedete è proprio l’ultimo byte di dati ricevuto sulla seriale.
Dal momento che il checksum che ho calcolato io e quello inviato su seriale coincidono, posso dire che il tag è stato ricevuto correttamente.
Nella stringa ricevuta seguono altri due bytes: un <CR> e un <LF> (Carriage Return e Line Feed) che mi causano quindi un ritorno a capo e infine l’ultimo byte che Hyperterminal mi visualizza come un cuoricino, e che in realtà rappresenta il codice ascii 03, è noto anche come ETX (End Of Text) che mi delimita appunto la fine della trasmissione per una trasmissione utilizzante il controllo di flusso Xon/Xoff.
RFID Reader
Se non avete Hyperterminal, potete provare i vostri tag con il programma che ho scritto appositamente: RFID Reader
E’ possibile scaricare il programma nella sezione software in questa pagina.
Il programma in questione legge i dati in uscita dai chip della innovations e li riporta tal quale nella textarea inferiore sostituendo ai caratteri “speciali” il corrispettivo acronimo ufficiale:
0x02 = <STX> (Start Of Text)
0x03 = <ETX> (End Of Text)
In aggiunta vengono rappresentati in questa forma anche il “ritorno carrello” (<CR>=0x0D) e il “nuova linea” (<LF>=0x0A).
Nel caso in cui i caratteri di inizio e fine non siano <STX> e <ETX> o che la stringa non abbia la lunghezza aspettata, nella barra di stato viene visualizzato un errore di ricezione con la descrizione dettagliata.
Da tali informazioni viene estratto unicamente il tag, rappresentato da 10 bytes raggruppati a coppie. Il software calcola il checksum, lo mostra in una casella di testo e lo confronta con quello ricevuto su seriale. Se i due checksum combaciano, viene mostrato OK affianco alla casella del checksum.
Le impostazioni di comunicazione sono fisse e sono quelle richieste dai chip innovations: 9600,8,n,1 (riportate a mo’ di promemoria anche nella barra di stato). L’unica impostazione da fornire è la porta seriale su cui è collegato il chip.
RFID Reader richiede il .NET Framework 3.5 o superiore. Sono gradite segnalazioni di malfunzionamento e/o compatibilità con altri moduli lettori RFID.
Approfondimenti
La Microchip ha pubblicato una esauriente Application Note sull’utilizzo degli RFID (ma a 13.56MHz!): http://ww1.microchip.com/downloads/e…doc/21299e.pdf . Questa application note raccoglie in sè varie application note singole, tra le quali è molto interessante la AN710 incentrata sulla autocostruzione di antenne specifiche per l’RFID. Il documento, per il resto, fa riferimento in buona parte ad alcuni chip Microchip (MCRF355/360) che, probabilmente, sono andati fuori produzione (non trovo informazioni al riguardo e sul sito della microchip tali IC sono scomparsi anche se il datasheet c’è ancora ed è comunque incluso nell’AN).
Non volete utilizzare chip esterni per decodificare un segnale a radiofrequenza? Potrebbe interessarvi questo progetto:
http://memweb.newsguy.com/~rhuang/RFID/rfid.html
Edit: il sito è morto. E’ possibile recuperare la pagina dalla wayback machine a questo url.
in cui un ragazzo si è realizzato da sè il proprio ricevitore RFID a 125KHz utilizzando un PIC16F628A e un TL062. E’ presente anche il sorgente in assembler e un’accurata descrizione della costruzione con i calcoli per la realizzazione dell’antenna.