Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

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