In diesem Tutorial möchte ich das Modul RFID RC522 erklären und an einem kleinen Beispiel zeigen wie man diesen betreibt.
RFID bedeutet übersetzt radio frequency identification(Wikipedia).
Das Modul habe ich über ebay ersteigert und je nachdem wie lange man auf seine Ware warten möchte zahlt man zwischen 3 € und 8 €.
Lieferumfang
Zum Lieferumfang gehört:
- 1 Transponder mit Schlüsselring
- 1 Transponder im Kartenformat
- 1 RFID-RC522 Modul
- 2 Stiftleisten
- 1 gerade
- 1 abgewinkelt
Technische Daten
- Betriebsspannung 3,3 V
- Maße ca. 60 mm x 39 mm x 6 mm (höchste Stelle am Quarz)
Aufbau
Anschluss
PIN am RFID Modul | PIN am Arduino UNO |
---|---|
3,3 V | 3,3 V |
GND | GND |
RST | PIN 9 |
SDA | PIN 10 |
MOSI | PIN 11 |
MISO | PIN 12 |
SCK | PIN 13 |
Quellcode
Eine Bibliothek für den Arduino ist unter https://github.com/Edragon/Arduino/tree/master/libraries/Rfid-master2 zu finden.
Mit Erlaubnis von ElectroDragon kann ich dir hier die Bibliothek als ZIP Datei anbieten:
#include <SPI.h> #include <RFID.h> #define SS_PIN 10 #define RST_PIN 9 RFID rfid(SS_PIN, RST_PIN); String ids[2] = {"453B56D16", "8C3B3924AA"}; //Zugelassene ID's void setup() { Serial.begin(9600); SPI.begin(); rfid.init(); } void loop() { if (rfid.isCard() && rfid.readCardSerial()) { String serial = parseId(rfid); Serial.print("RFID Nummer: "); Serial.println(serial); boolean serialOK = false; int counter = 0; for (counter = 0; counter < (sizeof(ids) / sizeof(String)); counter++) { if (serial == ids[counter]) { serialOK = true; break; } } if (serialOK) { Serial.println("ID wurde gefunden!"); } else { Serial.println("ID wurde nicht gefunden!"); } delay(2000); } rfid.halt(); } String parseId(RFID rfid) { String result = ""; int position = 0; for (position = 0; position <= 4; position++) { String pos = getNumPosAsHEX(rfid, position); result = result + pos; } result.toUpperCase(); return result; } String getNumPosAsHEX(RFID rfid, int position) { return String(rfid.serNum[position], HEX); }
Neue IDs registrieren
Der Quellcode des Arduino Sketches wird in einen festen Speicher geschrieben und die Variablen in einen flüchtigen. Durch dieses Verhalten kann man den Arduino nicht ohne weiteres dauerhaft auf die RFID’s “anlernen”.
Meine Lösung ist das Array welches um die registrierten IDs erweitert werden.
Somit ist bei jedem neuen RFID Chip ein minimaler Programmieraufwand nötig.
ein sd-karten erweiterungsmodul wäre hier hilfreich.
oder ein arbeiten mit dem raspberry pi.
Hallo,
ich arbeite gerade an einem 2. Teil zu diesem Tutorial, dort wird es sich hauptsächlich darum drehen wie man bequem neue Karten registrieren kann.
Gruß,
Stefan Draeger
Die Seite mit dem Library wurde gelöscht…. wo kann man das noch downloaden?
Hi,
ich habe den Link angepasst, die *.zip Datei ist leider nicht mehr vorhanden so das man die Dateien RFID.cpp & RFID.h einzeln herunterladen muss und in eine Zip Datei packen muss.
Ich habe mal beim Author angeschrieben ob ich dieses auf dem Blog als fertige Zip Anbieten kann.
Gruß,
Stefan Draeger
Hi,
Super Anleitung, leider hat sich hier der Fehlerteufel eingeschlichen.
in der Zeile:
for (counter = 0; counter < sizeof(ids)-1; counter++)
Der Befehl sizeof(ids) liefert nicht die Arraygröße zurück, sondern die Speichergröße (Bytes). Somit wird die Schliefe nicht nach 2 Läufen beendet und es wir der Inhalt aus dem RAM wiedergegeben.
Abhilfe:
for (counter = 0; counter < (sizeof(ids) / sizeof(String)); counter++)
Hi,
vielen Dank werde das gleich mal ändern.
Gruß,
Stefan