Interaction Design WikiElectrical Engineering

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.

Beispiel RFiD Expand source
#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);
}