Esperimenti con il lettore Innovations RFID ID-12.

L’identificazione a frequenza (RFID) è un sistema molto interessante che permette, appunto, di identificare gli oggetti a distanza, in modo automatico. Questa tecnologia si basa sull’uso di transponder, definiti tag, che permettono di trasmettere al lettore (nel nostro caso il reader RFID ID-12), tramite onde radio, i dati contenuti al loro interno.

Possiamo pensare a questa tecnologia come un’evoluzione dei codici a barre, ma che presenta notevoli vantaggi come, la lettura simultanea di tag (anche 200 tag al secondo), una maggiore resistenza all’usura e la capacità di memorizzare diverse informazioni nel loro chip integrato.

I tag presenti in commercio sono di diverso tipo e si presentano spesso come smart card, portachiavi e bande adesive. La figura seguente mostra come è strutturato un tag RFID

La frequenza di funzionamento dei tag può essere tipicamente di 125KHz o 13.56MHz, ma esistono modelli che utilizzano frequenze dell’ordine dei GHz (>2.4GHz).
Le parti principali che lo compongono sono l’antenna è il microchip. L’antenna ha il compito di alimentare il microchip sfruttando il campo elettromagnetico generato dal lettore, e di veicolare verso il lettore il segnale del microchip.

ID-12 lettore rfid

In commercio esistono vari dispositivi evoluti che permettono con poca spesa di creare il proprio sistema RFID. Il dispositivo ID-12 con cui ho avuto esperienza è prodotto dalla Innovations, ha un costo di circa 25-30€ è il suo impiego risulta semplice ed intuitivo. Di seguito la pin function del dispositivo:

Nel lettore ID-12 abbiamo un’antenna integrata che genera un segnale capace di fornire l’alimentazione al tag. Quando avviciniamo il tag al lettore, il microchip viene alimentato ed invia il suo identificativo.
Per lavorare con il lettore possiamo collegare l’ID-12 in questo modo

Utilizzo del reader ID-12

L’alimentazione di 5Vdc viene fornita tramite i pin 11 e la massa tramite il pin1. Il pin2 (Reset) viene collegato alla 5Vdc, ponendolo a massa otteniamo il reset dell’ID-12.
Il pin10 (LED/Beeper) viene utilizzato per pilotare un bepper(cicalino); questa funzione è molto interessante poiché il segnale viene generato solo quando il tag è letto correttamente.
Il pin7 (Format Selector) gestisce il formato del dato in uscita al pin10; nel mio caso collegandolo a massa ottengo un uscita ASCII (gli altri formati supportati sono Magnet Emulation, collegando il pin7 al pin10 e Wiegand26 collegando il pin7 alla 5Vdc)
Sul pin9 (data pin D0) è disponibile il segnale TTL contenente il dato memorizzato nel tag. Il pin8 (data pin D1) fornisce lo stesso dato ma il segnale è RS232 compatibile, ed quindi possibile collegare questo pin direttamente alla porta seriale del pc.

La portata dell’antenna integrata dell’ID-12 è di qualche centimetro, sufficiente per il nostro esperimento (ma è possibile portare il range di lettura a circa 10-12 cm collegando un’antenna esterna sui pin 3 e 4).
Lo schema successivo mostra i collegamenti da effettuare con il Netduino:

Netduino ID12 Reader

Il circuito è identico allo schema base visto precedentemente, l’uscita dell’ID-12 (pin9) è collegata al pin0 (UART RX) del Netduino.

Alimentiamo il Netduino e proviamo ad avvicinare un tag al dispositivo per verificare che il led sul pin10 si accenda, dandoci conferma della corretta lettura del tag.
Il formato ASCII del dato restituito dal lettore ID-12 è composto da 16 byte ed è rappresentato in figura:

Struttura dati ID-12 reader

  • Il primo byte rappresenta lo Start TX e vale 0x02
  • Data è composto da 10 byte che rappresentano l’ID del tag
  • Checksum vale 2 byte e si ottiene ponendo in XOR i 10 byte di dati
  • Il byte 14 è un Carrier Return e vale 0x13
  • il byte 15 è un Line Feed e vale 0x10
  • il byte 16 rappresenta l’End TX e vale 0x03

Ora passiamo scrivere il codice C# per questo circuito

Int32 Ciclo = 0;
//Creao un oggetto per lavorare con
//la porta seriale
SerialPort sp = new SerialPort("COM1", 9600, Parity.None, 8);

//Apro la porta
sp.Open();

while (true)
{
//Attesa di 200 millisecondi
Thread.Sleep(200);

//aspetto la lettura di tutti i 16 byte
if (sp.BytesToRead == 16)
{
//creo un buffer di 16 byte
Byte[] b = new Byte[sp.BytesToRead];

//leggo dalla seriale i dati inviati dall'ID-12
sp.Read(b, 0, b.Length);

//eseguo un ciclo che mi printa tutti i singoli
//byte del buffer
for (Ciclo = 0; Ciclo < b.Length; Ciclo++)
{
Debug.Print(b[Ciclo].ToString());
}
}
}

 

Il codice precedente ha evidenziato come leggere i dati provenienti dal lettore ID-12. L’esempio è molto semplice e non ha bisogno di grosse descrizioni.
In questo modo possiamo realizzare qualsiasi applicazione basata sulla tecnologia RFID.