RFID-Reader

Erstellt von Niclas Lüth
Benötigtes Vorwissen
Benötigtes Material
  • RFID-Reader
  • RFID-TAG
  • LED
  • Breadboard
  • Arduino Uno
  • USB-Kabel für den Arduino
  • 9x MM-Kabel
  • Batterie
Benötigte Software
  • Arduino IDE
Als PDF
PDF-Download
Arbeitsblatt

Beschreibung

Der RFID („radio-frequency identification“) Reader wird verwendet, um von RFID Sendern (auch „RFID Tags“ genannt) per Funk einen bestimmten Code auszulesen. Jeder Sender hat dabei eine einmalige ID (UID). Somit können wir den Arduino verwenden, um Schließanlagen oder ähnliche Projekte zu realisieren, bei denen man sich identifizieren soll.

RFID-TAGs können verschiedene Formen haben, wie z.B. Schlüsselanhänger oder Karten im Kreditkartenformat.

Auf dem folgenden Bild sieht man links und rechts zwei RFID-TAGs und in der Mitte den RFID-Empfänger RFID-RC522 mit noch nicht angelöteter Stiftleiste. Es gibt auch Versionen, bei denen die Stiftleiste bereits an den RFID-Empfänger angelötet wurde.

Verkabelung/Aufbau

ArduinoBauteil
10SDA
13SCK
11MOSI
12MISO
unbelegtIRQ
GNDGND
9RST
3.3 V3.3 V
2Langes Bein LED
GNDKurzes Bein LED
Schaltplan

Schaltplan

Code/Beispiel

Es muss eine Library im Arduino Programm hinzugefügt werden. Wir verwenden die Library “MFRC522” von GithubCommunity. Siehe Bibliotheksverwaltung


Zunächst wollen wir die eindeutige ID (UID) unseres RFID TAGS ermitteln. Wir schauen uns einmal mithilfe des folgenden Codes an, wie sie lautet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <MFRC522.h>               // RFID-Bibiothek hinzufügen.
#include <SPI.h>                   // SPI-Bibiothek hinzufügen.
#define SS_PIN 10                  // SDA an Pin 10.
#define RST_PIN 9                  // RST an Pin 9.
MFRC522 mfrc522(SS_PIN, RST_PIN);  // RFID-Empfänger benennen.

void setup() {
  Serial.begin(9600);  // Seriellen Monitor starten.
  SPI.begin();         // SPI-Verbindung aufbauen.
  mfrc522.PCD_Init();  // Initialisierung des RFID-Empfängers.
}

void loop() {
  if (!mfrc522.PICC_IsNewCardPresent()) {  // Wenn kein TAG in Reichweite ist...
    return;  // ...springt das Programm zurück an den Anfang ( zu void loop() )
  }

  if (!mfrc522.PICC_ReadCardSerial()) {  // Wenn kein TAG ausgewählt wurde...
    return;  // ...springt das Programm zurück an den Anfang ( zu void loop() )
  }

  Serial.print("Die ID des RFID-TAGS lautet:");  // Der Text in
                                                 // Anführungsstrichen wird in
                                                 // den Serial Monitor
                                                 // geschrieben.

  for (byte i = 0; i < mfrc522.uid.size; i++) {
    // Dann wird die UID ausgelesen, die aus vier einzelnen Blöcken besteht und
    // der Reihe nach an den Serial Monitor gesendet. Die Endung DEC bedeutet,
    // dass die vier Blöcke der UID als Dezimalzahlen ausgegeben werden, da sie
    // ursprünglich als Hexadezimal Zahl vorliegt. (z.B. F3 F8 A6 0)
    Serial.print(mfrc522.uid.uidByte[i], DEC);
    Serial.print(" ");  // Fügt zwischen die einzelnen Blöcke ein Leerzeichen
                        // ein.
  }
}
Ausgabe des seriellen Monitors.

Ausgabe des seriellen Monitors.

Nun können wir diese ID noch nicht verwenden, da es vier einzelne Zahlenblöcke sind. Daher passen wir den Code etwas an, indem wir einfach alle 4 Blöcke miteinander addieren. Dazu ersetzen wir die Zeilen 27 - 35 mit diesem Code:

27
28
29
30
31
32
33
  int code = 0;  // Diese Variable speichert die UID als zusammenhängende Zahl
                 // ab.
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    code = (code + mfrc522.uid.uidByte[i]);  // Addition der vier Zahlenblöcke.
  }
  Serial.print("Die Kartennummer lautet:");  // Ausgabe des Zahlencodes.
  Serial.println(code);
Ausgabe des seriellen Monitors.

Ausgabe des seriellen Monitors.

Die gewonnene Kennzahl nutzen wir jetzt, um eine LED anzuschalten, wenn der korrekte RFID TAG erkannt wird. Wir ergänzen den Code nach Zeile 33 um die folgenden Zeilen:

  if (code == 396) {
    digitalWrite(2, HIGH);  // ...dann soll die LED an Pin 2 leuchten...
    delay(500);             // für eine halbe Sekunde
    digitalWrite(2, LOW);   // ...und danach wieder aus gehen.
  }

Das Material und dessen Inhalte sind - sofern nicht anders angegeben - lizenziert unter der Creative Commons Lizenz CC BY-NC-SA 4.0 (für den vollständigen Lizenztext siehe https://creativecommons.org/licenses/by-sa/4.0/legalcode )