

Wird die korrekte Karte an das RFID-Modul gehalten, öffnet der Servomotor die Schranke, anderenfalls bleibt die Schranke geschlossen. Wenn die Karte erneut vor das Lesegerät gehalten wird, schließt die Schranke wieder.
So sieht es aus:
Ein RFID-Modul (radio-frequency identification) besteht aus sogenannten „Tags“, und einem Lesegerät.

Benötigte Bauteile:
- Servomotor
- RFID-Modul
- Leitungsdrähte
- kodierte Karten
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliotheken:
Arduino IDE 1.8x:
Sketch → Bibliothek einbinden → Bibliotheken verwalten

Arduino IDE 2.x:

Zunächst musst du die individuelle Kennung der Karte herausfinden:
// RFID-Bibiothek hinzufügen
# include <MFRC522.h>
// Anschlüsse definieren
# define SDA 10
# define RST 9
// RFID-Empfänger benennen
MFRC522 mfrc522(SDA, RST);
void setup()
{
Serial.begin(9600);
SPI.begin();
// Initialisierung des RFID-Empfängers
mfrc522.PCD_Init();
}
void loop()
{
String WertHEX;
String WertDEZ;
// Wenn keine Karte in Reichweite ist ..
if (!mfrc522.PICC_IsNewCardPresent())
{
// .. wird die Abfrage wiederholt.
return;
}
// Wenn kein RFID-Sender ausgewählt wurde ..
if (!mfrc522.PICC_ReadCardSerial())
{
// .. wird die Abfrage wiederholt.
return;
}
Serial.println(F("Karte entdeckt!"));
// HEX-Werte/Dezimal-Werte in Strings schreiben
for (byte i = 0; i < mfrc522.uid.size; i++)
{
WertHEX = WertHEX + String(mfrc522.uid.uidByte[i], HEX) + " ";
WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " ";
// HEX-Werte in Großbuchstaben umwandeln
WertHEX.toUpperCase();
}
// hexadezimal/dezimal anzeigen
Serial.println("Wert in hexadezimal: " + WertHEX);
Serial.println("Wert in dezimal: " + WertDEZ);
delay(1000);
}

Binde die Bibliotheken ein und definiere die Variablen:
// eingebaute Bibliothek einbinden
# include <Servo.h>
// RFID-Bibiothek hinzufügen
# include <MFRC522.h>
// Anschlüsse definieren
# define SDA 10
# define RST 9
// Schranke nach Betreten wieder schließen
bool Status = false;
// RFID-Empfänger benennen
MFRC522 mfrc522(SDA, RST);
// Bezeichnung des Motors
Servo Motor;
Der setup-Teil. Beachte die Kommentare:
void setup()
{
// Pin des Motors zuordnen
Motor.attach(7);
Serial.begin(9600);
SPI.begin();
// Initialisierung des RFID-Empfängers
mfrc522.PCD_Init();
// Motor in "geschlossen"-Position fahren
Motor.write(0);
}
Der loop-Teil. Beachte die Kommentare.
void loop()
{
String WertHEX;
String WertDEZ;
// Wenn keine Karte in Reichweite ist ..
if (!mfrc522.PICC_IsNewCardPresent())
{
// .. wird die Abfrage wiederholt.
return;
}
// Wenn kein RFID-Sender ausgewählt wurde ..
if (!mfrc522.PICC_ReadCardSerial())
{
// .. wird die Abfrage wiederholt.
return;
}
Serial.println(F("Karte entdeckt!"));
// HEX-Werte/Dezimal-Werte in Strings schreiben
for (byte i = 0; i < mfrc522.uid.size; i++)
{
WertHEX = WertHEX + String(mfrc522.uid.uidByte[i], HEX) + " ";
WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " ";
// Kleinbuchstaben des HEX-Wertes in Großbuchstaben umwandeln
WertHEX.toUpperCase();
}
Serial.println();
// hexadezimal/dezimal anzeigen
Serial.println("Wert in hexadezimal: " + WertHEX);
Serial.println("Wert in dezimal: " + WertDEZ);
// Leerzeichen am Ende entfernen
WertDEZ.trim();
// WertDEZ mit korrektem Wert vergleichen -> Schranke öffnen
if (WertDEZ.compareTo("80 236 29 59") == 0)
{
Serial.println("korrekte Karte -> Schranke \u00f6ffnen");
Motor.write(90);
Status = !Status;
}
if (WertDEZ.compareTo("80 236 29 59") == 0 && !Status)
{
Serial.println(" korrekte Karte/Zutritt erfolgt -> Schranke schlie\u00dfen");
Motor.write(5);
}
// wenn die Karte falsch ist
else if (WertDEZ.compareTo("80 236 29 59") != 0)
{
Motor.write(5);
Serial.println("falsche Karte -> Schranke geschlossen lassen");
Status = false;
}
delay(1000);
}

Ausgabe im Seriellen Monitor
Verwandte Aufgaben:
- Automatische Tür mit Hall-Sensoren
- Glücksrad mit Schrittmotor
- Glücksrad mit Servomotor
- Servomotor mit einem Potentiometer steuern
- Türöffner mit einem RFID-Modul und Servomotor
- Wahrsagerin
Letzte Aktualisierung: