12 RFiD
RFiD
RFiD steht für "radio frequency identification" und ist eine von vielen sog. "Nearfield Communication Technologies". RFiD hat sich heute schon in vielen Bereichen durchgesetzt (z.B. Skipässe, Preisschilder, Alarmsysteme, Bibliotheken, usw.) und erlaubt eine kontaktlose Übertragung von Daten.
Ein RFiD System besteht dabei grundsätzlich aus einer Leseeinheit (Reader) und einem Transponder (Tag). Der Tag besteht aus einem Microchip, welcher eine unverwechselbare ID besitzt und einer Spule, welche für die Stromaufnahme durch den Reader verantwortlich ist. Somit kommt der Tag ohne eigene Spannungsversorgung aus, was seinen Einsatz enorm flexibilisiert. Ebenso kann ein Tag dadurch sehr klein gehalten werden.
Der RFiD Reader erzeugt magnetische Wechselfelder geringer Reichweite oder hochfrequente Radiowellen. Damit werden nicht nur Daten übertragen, sondern auch der Transponder mit Energie versorgt. Die ID des gelesenen Tags wird dann meist über eine Serielle Schnittstelle vom Reader weitergegeben. In diesem Workshop verwenden wir den Reader ID-12 der Firma ID Innovations.
ID-12
Datenblatt:
ID-12
Spannungsversorgung: 5V
Dieser Reader lässt sich sehr einfach mit dem Arduino kombinieren, da er über eine Serielle TTL Schnittstelle und die Spannungsversorgung von 5V ebenfalls vom Arduino übernommen werden kann.
Schaltung
Um den Reader am Arduino anzuschliessen verbinden wir zunächst die 5V und GND Kontakte des Readers mit den entsprechenden PINs des Arduino. Danach verbinden wir den Kontakt RST (Reset) des Readers mit PIN D13 des Arduino, sowie D0 (Data Pin 0) des Readers mit PIN D2 des Arduino.
Auf dem Breadboard sieht das dann folgendermassen aus...
Das Arduino verfügt über eine Serielle Schnittstelle. Diese benötigen wir jedoch für die Programmierung und Kommunikation über USB. Deshalb macht es Sinn, für die Nutzung des ID-12 eine zusätzliche, softwareseitige Serielle Schnittstelle einzurichten. Dies machen wir über die Arduino Library: SoftwareSerial.
SoftwareSerial
Die
SoftwareSerial Library ist nach der Instanzierung genau gleich zu benutzen, wie die normale Serielle Schnittstelle. D.h. es gibt ebenfalls die von uns bereits genutzten Funktionen:
begin(Baudrate),
read(Wert) und
write(Wert).
Instanziert wird die SoftwareSerial über:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(RX_Pin, TX_Pin);
RX_Pin und
TX_Pin können dabei jeder beliebige digitale PIN sein (also zum Beispiel D2 und D3). Die einzige Limitierung ist die Baudrate, welche 115200bps nicht überschreiten darf.
Code
Im Beispiel-Code lesen wir die ID eines RFiD Tags aus und lassen uns diesen über die Serielle Schnittstelle auf dem Serial-Monitor ausgeben.
#include <SoftwareSerial.h>
int RFIDResetPin = 13;
SoftwareSerial mySerial(2,3);
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(RFIDResetPin, OUTPUT);
digitalWrite(RFIDResetPin, HIGH);
}
void loop()
{
char tagString[8];
int index = 0;
boolean reading = false;
while(mySerial.available())
{
int readByte = mySerial.read(); // Nächstes Byte lesen
if(readByte == 2) reading = true; //Indentifizierung für den Anfang des Tags
if(readByte == 3) reading = false; //Indentifizierung für das Ende des Tags
if(reading && readByte != 2 && readByte != 10 && readByte != 13)
{
tagString[index] = readByte; // Tag speichern
index ++;
}
}
if(tagString[0] != 0)
{
Serial.println(tagString); //RFiD Tag über Serielle Schnittstelle ausgeben
}
memset(tagString,0,strlen(tagString)); //Tag freigeben (mit NULL überschreiben)
resetReader(); //Den RFiD Reader resetten
}
void resetReader() // Reset Funktion
{
digitalWrite(RFIDResetPin, LOW);
digitalWrite(RFIDResetPin, HIGH);
delay(150);
}
Aufgaben
1. Lest den RFiD Tag in Processing ein und steuert damit ein Event (z.B. Bild anzeigen, Musik wiedergeben, etc.)
Weitere Informationen
Nearfield.org – Gross angelegtes Forschungsprojekt zum Thema Nahfeld-Kommuniaktion