Chipkarten / Tags mit Arduino RFID Scanner auslesen

Arduino RFID Scanner - Chipkarten Tags scannen
Arduino RFID Scanner – Chipkarten Tags scannen

Eigener Arduino RFID Scanner

Im heutigen Beitrag erstellen wir einen eigenen Arduino RFID Scanner, Welcher die UIDs der gängigen Chipkarten / Tags auslesen kann. Damit können wir die jeweiligen Tags identifizieren und verschiedene Dinge, wie z. B. Zugriffskontrollen realisieren. Im einem der letzten Beiträge haben wir uns schon die Verarbeitung seitens einer .NET Programmiersprache wie C# / VB.NET angesehen.

Dort lag der Fokus eher auf der Verarbeitung der Signale, bzw. Daten der fertigen Hardware. Wir hatten die Lötarbeiten inkl. der Mikrocontroller-Software also schon mehr oder weniger vorausgesetzt. Heute werden wir die andere Seite beleuchten, also die Programmierung der passenden Software seitens unseres Arduino Mikrocontrollers.

Obwohl ich selbst jetzt nicht gerade der Profi-Elektroniker (sondern Entwickler 😛) bin, bekommen wir das mit den Lötarbeiten am Arduino RFID Scanner schon hin. Zum Glück handelt es sich hierbei auch um eine ziemliche einfache Verbindung, wo wir nicht großartig rätseln müssen – 💪!

💡 Bei den einzelnen Produkt-Links handelt es sich ggf. um sogenannte Affiliate-Links. Wenn Du einen Artikel über einen jeweiligen Link erwirbst, bedankst Du Dich völlig ohne extra Kosten bei mir, indem ich einen geringen Anteil des Kaufbetrages bekomme. Falls Du das nicht möchtest, kannst Du die Artikel natürlich auch ohne meine Links suchen und kaufen.

Benötigtes Zubehör

Schauen wir uns zuerst einmal an, Welches hardwaremäßige Zubehör für die Umsetzung unseres RFID Scanners benötigen. Auch wenn der Code natürlich auch erstmal so auf einem Arduino Nano, etc. laufen sollte, wird die Scan-Funktionalität natürlich nur mit dem passenden RFID-Modul funktionieren. Hier eine kleine Liste der benötigten Dinge.

Arduino NanoArduino Nano
Arduino RFID KitRFID Kit
Arduino RFID Scanner - Jumper KabelJumper Kabel
Benötigte Teile für den Arduino RFID Scanner

Arduino Nano – der Mikrocontroller

Als erstes Teil benötigst Du die Kernkomponente des Ganzen: Den Mikrocontroller. Ich persönlich habe mir damals ein Multi-Pack gekauft, da ich es als blödsinnig empfand, für einen einzigen Arduino Lieferkosten zu zahlen. Daher habe ich auch hier direkt das 3er Paket verlinkt. Achte bei Deinem Kauf darauf, dass passende USB-Kabel dabei sind!

RFID Kit

Der nächste Punkt auf unserer Shopping-Liste wäre das typische RFID-Kit. Hier ist alles dabei was wir brauchen. Einerseits haben wir verschiedene scanbare Tags und das Wichtigste: Unser Arduino RFID Modul.

Jumper Kabel

Im letzten Schritt müssen wir alles natürlich auch gut miteinander verbinden können. Dazu habe ich einen Mix aus verschiedenen Jumper-Kabeln ausgesucht. In unserem Beispiel (je nachdem was Du sonst da hast, oder gekauft hast) benötigen wir eigentlich nur „Female to Female“ Kabel. Beachte hierzu auch noch den Hinweis unten drunter!

⚠️ Achte beim Kauf darauf, ob Du gewillt bist, selbst zu löten. Falls Du nicht selbst löten möchtest, kannst Du am besten schon fertig verlötete Geräte kaufen. Meistens geben die Verkäufer diese Info im Verkaufsangebot an. Frag im Zweifelsfall nach!

Löt- & Verbindungsarbeiten am Arduino RFID Scanner

Um Deinen Arduino RFID Scanner soweit für die aktive Arbeit an der Software vorzubereiten, müssen wir Diesen nun im nächsten Schritt erstmal herrichten. Genauer genommen geht es jetzt an die kleinen Lötarbeiten, Welche zu verrichten wären. Ich werde Dir einmal ein Bild von der fertigen Hardware präsentieren und andererseits mit Text auf die Sprünge helfen.

Die Verbindung – tabellarische Übersicht

Hier findest Du einen tabellarischen Überblick über die Verbindung mit dem RFID-Kit RC522. Einerseits haben wir die typisch notwendigen Dinge wie den Stromkreislauf (GND = Ground = Masse, Spannung 3,3V), andererseits Signale auf den digitalen Pins, sowie einen ausgelassenen Anschluss.

ArduinoRFID RC522
D10SDA
D13SCK
D11MOSI
D12MISO
/IRQ
GNDGND
D9RST
3,3V3,3V
Arduino zu RFID-Kit RC522 tabellarische Verbindungsübersicht

Die fertige Hardware – als Bild

Hier siehst Du die oben beschriebenen Verbindungen als fertiges Bild, leider nicht annähernd so toll, wie ein visueller Schaltplan, aber „It’s something“… Im Endeffekt soll’s nur einmal zeigen, wie es fertig aussieht, die Pinbelegungen sind hier leider weniger zu erkennen – sorry dafür.

Arduino RFID Scanner - Fertig verlötet
Arduino RFID Scanner – Fertig verlötet

Die Hardware mit dem PC verbinden

Im nächsten Schritt werde ich ein wenig darauf eingehen, wie Du Deinen nun fertigen Arduino RFID Scanner mit Deinem PC verbinden kannst. Wenn Du das bereits geschafft hast, Glückwunsch – Du kannst Diesen Teil hier überspringen. Falls nicht, fahren wir zuerst mit dem Download des Treibers für den CH340 Chip fort.

Besuche also als nächstes die Homepage für den Treiber, Welche leider in chinesisch ist. Verwende falls nötig / falls hilfreich z. B. die Übersetzungs-Funktion eines jeden modernen Browsers. Falls Du eine detailliertere Anleitung benötigst, kannst Du auch zum anderen Teil dieses zweiteiligen Beitrages gehen.

Kurzum würde ich sagen, installiere den Treiber, starte Deinen PC am besten einmal neu und schon bist Du für die Verbindung über Mini-USB ready. Falls Du nicht weiter kommst, gehe wie gesagt einmal zum anderen Teil und schaue Dir dort die bessere Anleitung hierzu an. Ich wollte es nur ungern wiederholen..

Wenn alles geklappt hat, solltest Du den angeschlossenen Arduino nun als verbundenen COM-Port sehen. Ein Beispiel findest Du hier in meinem Bild, dort ist der Arduino am Port „COM3“ angeschlossen:

USB Verbindung vom Arduino CH340 Chip erkannt
USB Verbindung vom Arduino CH340 Chip erkannt

Arduino RFID Code

Kommen wir nun zum – für mich – interessantesten Teil: Der Code für unseren RFID Scanner aus der Arduino IDE! Zuerst fehlt noch eine Kleinigkeit, denn wir möchten den Code, der für die Kommunikation mit dem Gerät notwendig ist, mit Sicherheit nicht komplett von vorn, bzw. in Eigenarbeit schreiben.

Daher müssen wir nun zuerst einmal die Library / Bibliothek einbinden, Welche dafür notwendig ist und bereits fertig angeboten wird. Um es Dir so einfach wie möglich zu machen, habe ich Dir meine verwendete Version / Variante unten bei den Downloads hinzugefügt. Lade Dir die Datei herunter und im nächsten Schritt binden wir Diese auch sofort in unsere Arduino IDE ein.

Library zur RFID Kommunikation einbinden

Begebe Dich nach dem Download der unter Downloads gelisteten Library nun in die Arduino IDE. Dort klickst Du auf „Sketch->Bibliothek einbinden->.Zip-Bibliothek hinzufügen“. Dann zeigst Du dem Ding einfach die heruntergeladene Zip-Datei und fertig.

Der Code selbst

Nun fangen wir endlich mit unserem eigenen Code an, öffne dazu ein neues Arduino Projekt und speichere es z. B. als „RFID Beispiel“ ab. Alternativ kannst Du natürlich in/mit der anderen unter Downloads angebotenen Projektdatei rumspielen.

Nachdem die Datei vorhanden ist und wir mit eigenem Code spielen können, binden wir zuerst einmal die notwendigen Bibliotheken ein. Die erste einzubindende Bibliothek ist die „SPI.h“-Datei, dann noch die „MFRC522.h“.

Wundere Dich nicht, wir haben die „SPI“-Bibliothek nicht heruntergeladen – brauchen wir auch nicht. Dabei handelt es sich um eine Standard-Bibliothek, Welche wir durch die Arduino IDE mitgeliefert bekommen.

Imports usw

#include <SPI.h>
#include <MFRC522.h>

Nach den Imports/Includes definieren wir nun 2 Konstanten für den SDA und den Reset Pin. Danach erstellen wir eine neue MFRC522-Instanz mit diesen beiden Konstanten als Parameter.

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

Setup-Funktion

Nun versehen wir die Setup-Funktion des Arduino Codes mit Inhalt. Nicht vergessen, diese wird einmalig bei Start/Stromversorgung des Arduinos aufgerufen. In der ersten Zeile starten wir eine serielle Kommunikation mit der Baudrate von 9600. Danach sagen wir auch der SPI Lib „go“, Welche auch ihren Anteil dazu beiträgt. Zuletzt initialisieren wir den MFRC522 Chip, um damit zu interagieren.

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
}

Haupt-Loop

Im nächsten Schritt kommt die Haupt-Funktion des Arduino-Codes – die Haupt-Schleife. Dies ist der in einer Endlosschleife laufende Code, Welcher unsere Chips letztendlich verarbeitet. Die erste (If-) Anweisung prüft, ob eine neue Karte vorhanden ist. Danach wählen wir (laut Recherche der Funktion) die Karte aus. Verbessere mich hier gerne in den Kommentaren, falls Du es genauer weißt!

void loop() {
  if (!mfrc522.PICC_IsNewCardPresent())
    return;

  if (!mfrc522.PICC_ReadCardSerial())
    return;

  // more...
}

GetId-Funktion – Kleine Hilfe

Als nächstes definieren wir uns eine Hilfs-Funktion, um die jeweilige Card-Id auszulesen. Diese geht in einer zähler- und kopfgesteuerten Schleife (for) die einzelnen Uid-Bytes durch (die Bytes der ID – anhand des „size“ Wertes). Dabei setzen wir die ID aus der hex-repräsentativen Form zusammen. Solange wir nicht im letzten Block der UID-Blöcke angekommen sind, erweitern wir den String um ein Leerzeichen (sieht man gleich im Screenshot).

Zum Schluss wandeln wir dann alles noch in Großbuchstaben (wie für Hex-Werte üblich) um und geben es durch „return“ wieder.

String getCardId() {
  String uid = "";
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    uid.concat(String(mfrc522.uid.uidByte[i], HEX));
    if (i < mfrc522.uid.size - 1)
      uid.concat(" ");
  }
  uid.toUpperCase();
  return uid;
}

Zuletzt müssen wir die Funktion dementsprechend dann nur noch aufrufen und die bekommene ID verarbeiten. Mit der PICC_HaltA() Methode stoppen wir dann noch den Lesevorgang und verzögern das ganze Programm ein wenig – lasse die Verzögerung für Testzwecke gerne einmal weg.

  String uid = getCardId();
  // Serial.println("RFID:" + uid);
  // do something with uid!
  mfrc522.PICC_HaltA();
  delay(1000);

Hier habe ich beispielhaft mal 2 dieser typischen blauen Schlüsselanhänger-Chips und eine Chipkarte ausgelesen:

Arduino RFID Chipkarten Anhänger
Arduino RFID Chipkarten Anhänger

Dabei kamen dann die folgenden Werte heraus (nicht vergessen es bei Bedarf auszugeben, also mit Serial.println.. – ist oben auskommentiert). Strg+Shift+M öffnet den seriellen Monitor, um die Ausgabe des Arduinos zu beobachten. Hierbei muss man auch auf die korrekte Baudrate – in diesem Fall 9600 – achten.

Arduino RFID Scanner - 3 Chip UIDs ausgelesen
Arduino RFID Scanner – 3 Chip UIDs ausgelesen

Kompletter Code

Hier zeige ich am Ende nochmal den kompletten Arduino RFID Scanner Code:

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
}

void loop() {
  if (!mfrc522.PICC_IsNewCardPresent())
    return;

  if (!mfrc522.PICC_ReadCardSerial())
    return;

  String uid = getCardId();
  
  Serial.println("RFID:" + uid);
  mfrc522.PICC_HaltA();
  delay(1000);
}

String getCardId() {
  String uid = "";
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    uid.concat(String(mfrc522.uid.uidByte[i], HEX));
    if (i < mfrc522.uid.size - 1)
      uid.concat(" ");
  }
  uid.toUpperCase();
  return uid;
}

Fazit

In diesem Beitrag habe ich demonstriert, wie man einen eigenen Arduino RFID Scanner bauen kann. Dazu brauchten wir im ersten Schritt einen Arduino Mikrocontroller und das RFID Kit mit ein wenig Zubehör, wie einigen Jumper Kabeln. Zusätzlich brauchten wir die passende Klassenbibliothek, Welche Du unten unter Downloads herunterladen kannst. Nachdem wir dann alles im Setup vorbereiteten, haben wir mit einigen Funktionen der Library inkl. einer kleinen selbstgebauten Funktion die UID des jeweiligen Tags ausgelesen. Wenn Du wissen möchtest, wie Du diese Informationen nun in z. B. C# oder VB.NET verarbeiten kannst, schaue gerne in den unten aufgelisteten RFID Beitrag.

Weitere Links

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.