Arduino - RFID/NFC Türschloss-System

In diesem Tutorial lernen wir, wie man ein Arduino RFID/NFC Türschloss-System mit Arduino, dem RFID/NFC RC522-Kit und einem elektromagnetischen oder Solenoidschloss baut.

※ Notiz:

Wir haben auch weitere Arduino - Türschloss-System mit Tastatur Tutorials.

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Magnetschloss
1×(Alternativ) Electromagnetic Lock
1×Relais
1×12V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über RFID/NFC RC522-Modul und elektromagnetisches Türschloss

Wenn Sie nicht mit dem RFID/NFC RC522-Modul, dem elektromagnetischen Schloss und dem Solenoid-Schloss vertraut sind, erfahren Sie mehr darüber in den folgenden Tutorials:

Systemkomponenten

Das Türschloss-System umfasst zwei Hauptteile:

  • Türschloss: Arduino + RFID/NFC-Leser + elektromagnetisches Türschloss
  • Türschlüssel: RFID/NFC-Tags
Arduino Arduino RFID Türschloss-Komponente

Es gibt verschiedene Arten von RFID/NFC-Lesern, die mit Arduino funktionieren. Dieses Tutorial verwendet RFID-RC522 als RFID/NFC-Leser, weil es billig ist.

Wie RFID/NFC-Türschloss funktioniert

  • Einige Tags, denen UIDs im Arduino-Code zugewiesen sind, dienen als autorisierte Schlüssel.
  • Der Benutzer hält ein RFID-/NFC-Tag an den RFID-/NFC-Leser.
  • Der Leser liest die UID des Tags aus.
  • Arduino erhält die UID vom Leser.
  • Arduino vergleicht die gelesene UID mit den vordefinierten UIDs.
  • Wenn die UID mit einer der vordefinierten UIDs übereinstimmt, deaktiviert Arduino das elektromagnetische Schloss, um die Tür zu entriegeln.

Verdrahtungsdiagramm

  • RFID RC522 Türschloss mit Solenoidschloss
Schaltplan des Arduino RFID RC522 Türschloss-Systems

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

  • RFID RC522 Türschloss mit elektromagnetischem Schloss
Schaltplan für Arduino RFID RC522 Türschloss-System

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Um es einfach zu machen, sind die Pins des RC522-Moduls direkt mit den Pins des Arduino verbunden. Allerdings kann dies in bestimmten Fällen dazu führen, dass das Arduino-Board nicht mehr ordnungsgemäß funktioniert, da die Ausgabepins des Arduino 5 V liefern, während die Pins des RC522-Moduls normalerweise mit 3,3 V arbeiten. Daher wird empfohlen, die Spannung zwischen den Arduino-Pins und den Pins des RC522-Moduls zu regulieren. Weitere detaillierte Anleitungen finden Sie im Arduino - RFID RC522 Tutorial. Das untenstehende Diagramm veranschaulicht, wie man 5 V mithilfe von Widerständen auf 3,3 V reguliert:

Arduino RFID RC522 mit Schaltplan zur Spannungsregulierung

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

※ Notiz:

Die Reihenfolge der Pins kann je nach Hersteller variieren. Verwenden Sie IMMER die auf dem Modul aufgedruckten Beschriftungen. Das obige Bild zeigt die Pinbelegung der Module des Herstellers DIYables.

Arduino-Code - Eine Taste

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-rfid-nfc-door-lock-system */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // the Arduino pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte keyTagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap RFID/NFC Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == keyTagUID[0] && rfid.uid.uidByte[1] == keyTagUID[1] && rfid.uid.uidByte[2] == keyTagUID[2] && rfid.uid.uidByte[3] == keyTagUID[3] ) { Serial.println("Access is granted"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied for user with UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Schnelle Schritte

Da die UID normalerweise nicht auf dem RFID-/NFC-Tag gedruckt wird, besteht der erste Schritt, den wir tun müssen, darin, die UID des Tags herauszufinden. Dies kann auf folgende Weise erfolgen:

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE.
  • Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code auf Arduino hochzuladen.
  • Öffnen Sie den seriellen Monitor.
  • Berühren Sie einen RFID/NFC-Tag am RFID-RC522-Modul.
  • Zeigen Sie die UID im seriellen Monitor an.
COM6
Send
Tap RFID/NFC tag on reader Access denied for user with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Nachdem Sie eine UID haben:

  • Aktualisieren Sie die UID in Zeile 18 des obigen Codes. Zum Beispiel ändern Sie byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; zu byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Laden Sie den Code erneut auf den Arduino hoch.
  • Halten Sie ein RFID-/NFC-Tag an das RFID-RC522-Modul.
  • Die Ausgabe im Seriellen Monitor sehen.
COM6
Send
Tap RFID/NFC tag on reader Access is granted
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Überprüfen Sie das elektromagnetische Türschloss; es sollte entriegelt sein.
  • Legen Sie einen weiteren RFID-/NFC-Tag auf das RFID-RC522-Modul.
  • Sehen Sie die Ausgabe im Serial Monitor.
COM6
Send
Tap RFID/NFC tag on reader Access is granted Access denied for user with UID: BD 1E 1D 00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

  • Um das Testen zu erleichtern, ist die Freischaltzeit auf 2 Sekunden festgelegt; sie sollte in der Praxis bzw. bei Demonstrationen erhöht werden.
  • Es muss die MFRC522-Bibliothek installiert werden. Siehe Arduino - RFID/NFC RC522 Tutorial

Arduino-Code – Mehrere Tasten

Stellen wir uns vor, dass ein Raum dem Manager und der Sekretärin nur das Entsperren der Tür erlaubt.

In diesem Fall müssen wir zwei RFID-/NFC-Tags verwenden: eines für den Manager und das andere für die Sekretärin. Wir müssen die UIDs der beiden Tags im Code angeben.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-rfid-nfc-door-lock-system */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // the Arduino pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte managerKeyUID[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte secretaryKeyUID[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap RFID/NFC Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == managerKeyUID[0] && rfid.uid.uidByte[1] == managerKeyUID[1] && rfid.uid.uidByte[2] == managerKeyUID[2] && rfid.uid.uidByte[3] == managerKeyUID[3] ) { Serial.println("Access is granted for manager"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else if (rfid.uid.uidByte[0] == secretaryKeyUID[0] && rfid.uid.uidByte[1] == secretaryKeyUID[1] && rfid.uid.uidByte[2] == secretaryKeyUID[2] && rfid.uid.uidByte[3] == secretaryKeyUID[3] ) { Serial.println("Access is granted for secretary"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied for user with UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Führen Sie ähnliche Schritte wie oben aus, und halten Sie dann nacheinander jedes RFID-Tag an das RFID-RC522-Modul. Das Ergebnis im Serial Monitor sieht wie folgt aus:

COM6
Send
Tap RFID/NFC tag on reader Access is granted for secretary Access is granted for manager
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Sie können den obigen Code auf drei, vier oder mehr Tags erweitern.

※ Notiz:

Im obigen Code sind die Schlüssel hartkodiert. In der Praxis sollte es möglich sein, Schlüssel dynamisch über einen speziellen Modus hinzuzufügen bzw. zu löschen. Wenn ja, sollten die Schlüssel im EEPROM-Speicher gespeichert werden. Die Anzahl der Schlüssel kann je nach Größe des EEPROM gespeichert werden. Der Code wird dadurch komplizierter. Wenn Sie ein solches System erstellen möchten, bieten wir Ihnen eine Programmierdienstleistung an. Bitte zögern Sie nicht, uns zu kontaktieren.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!