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 ("Tags")
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Benötigte Bibliothek:
oder: Sketch -> Bibliothek einbinden -> Bibliotheken verwalten
Zunächst musst du die individuelle Kennung der Karte herausfinden, sie wird im Seriellen Monitor angezeigt.
// RFID-Bibiothek hinzufügen
# include "MFRC522.h"
// Anschlüsse definieren
# define SDA 7
# 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 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!"));
// Dezimal-Werte in String schreiben
for (byte i = 0; i < mfrc522.uid.size; i++)
{
WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " ";
}
// Kennung dezimal anzeigen
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 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!"));
// Dezimal-Wert in String schreiben
for (byte i = 0; i < mfrc522.uid.size; i++)
{
WertDEZ = WertDEZ + String(mfrc522.uid.uidByte[i], DEC) + " ";
}
Serial.println();
// Kennung dezimal anzeigen
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);
}
Verwandte Anleitungen:
Letzte Aktualisierung: