Arduino Lektion 20 – Teil 1: RFID RC522 – Kartenleser

In diesem Tutorial möchte ich das Modul RFID RC522 erklären und an einem kleinen Beispiel zeigen wie man diesen betreibt.

rfid-chip
Lieferumfang des RFID RC522

RFID bedeutet übersetzt radio frequency identification(laut 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 ModulPIN am Arduino UNO
 3,3 V3,3 V
GNDGND
RSTPIN 9
SDAPIN 10
MOSIPIN 11
MISOPIN 12
SCKPIN 13
rfid
RFID-RC522 Modul am Arduino Uno

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);
}
serialmonitor
Ausgabe auf dem seriellen Monitor der IDE

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.

Download

9 Kommentare

    1. 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

    1. 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

  1. 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++)

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.