Arduino Nano - RFID-Türschloss

Dieses Tutorial zeigt dir, wie du ein Türschloss-System mit Arduino Nano, dem RFID/NFC RC522-Modul, einem Relais, einem Solenoidschloss oder einem elektromagnetischen Schloss und optional einem LCD-Display aufbaust. Um es dir leichter zu machen, führt dich das Tutorial schrittweise von einfachen zu komplexeren Schritten beim Aufbau des RFID-Türschlosses. Im Detail werden wir Folgendes tun:

Wenn Sie ein Türschloss-System mit Passwort bauen möchten, beachten Sie bitte Arduino Nano - Keypad Door Lock.

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
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) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

Oder Sie können die folgenden Kits kaufen:

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, Solenoidschloss und elektromagnetisches Schloss

Wenn Sie mit dem RFID/NFC RC522-Modul, dem Solenoid-Schloss und der elektromagnetischen Verriegelung (einschließlich Pinbelegung, Funktionsweise und Programmierung) nicht vertraut sind, können Ihnen die folgenden Tutorials weitere Informationen liefern:

Türschloss-Systemkomponenten

Ein einfaches Türschloss-System besteht aus zwei Komponenten:

  • Türschloss: ein Arduino Nano, ein RFID-/NFC-Lesegerät, ein Relais und ein Solenoidschloss oder ein elektromagnetisches Schloss
  • Türschlüssel: RFID-/NFC-Tags
Arduino Nano Arduino RFID Türschloss-Komponente

Wie ein RFID-/NFC-Türschloss funktioniert

  • Der Benutzer hält einen RFID/NFC-Tag an den RFID/NFC-Leser, der die UID vom Tag ausliest.
  • Der Arduino Nano erhält dann diese UID vom Leser und vergleicht sie mit den UIDs, die im Arduino-Nano-Code festgelegt wurden.
  • Diese UIDs dienen als berechtigte Schlüssel.
  • Wenn die UID mit einer der vordefinierten UIDs übereinstimmt, deaktiviert der Arduino Nano das Solenoidschloss, um die Tür zu entriegeln.
  • Der Arduino Nano verriegelt die Tür nach einem Timeout, indem er das Relais aktiviert.

Verdrahtungsdiagramm

  • RFID RC522 Türschloss mit Solenoidschloss
Arduino Nano RFID RC522 Tür-Solenoidschloss-System Verdrahtungsdiagramm

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

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

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

Um den Verbindungsprozess zu vereinfachen, sind die Pins des RC522-Moduls direkt mit den Pins des Arduino verbunden. Dies kann jedoch in einigen Fällen dazu führen, dass der Arduino Fehlfunktionen zeigt, da die Ausgangspins des Arduino 5V erzeugen, während die Pins des RC522-Moduls mit 3,3V arbeiten. Daher wird empfohlen, die Spannung zwischen den Pins des Arduino und dem RC522-Modul zu regulieren. Das untenstehende Diagramm veranschaulicht, wie Widerstände verwendet werden können, um 5V auf 3,3V zu regulieren.

Arduino Nano RFID RC522 mit spannungsregulierendem Schaltplan

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

※ Notiz:

Hersteller können die Reihenfolge der Pins unterschiedlich anordnen, daher ist es wichtig, sich auf die auf dem Modul aufgedruckten Beschriftungen zu verlassen. Die oben gezeigte Pinbelegung zeigt die Anordnung der Pins für Module, die vom Hersteller DIYables hergestellt werden.

Arduino Nano Code - Eine Taste

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #define RC522_SS_PIN 10 // The Arduino Nano pin connected to RC522's SS pin #define RC522_RST_PIN 5 // The Arduino Nano pin connected to RC522's RST pin #define RELAY_PIN A5 // The Arduino Nano pin connected to relay MFRC522 rfid(RC522_SS_PIN, RC522_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

Um die UID eines RFID/NFC-Tags zu ermitteln:

  • Lade den oben genannten Code auf den Arduino Nano mit der Arduino-IDE hoch.
  • Öffne den Serial Monitor und tippe auf das Tag am RFID-RC522-Modul. Die UID wird im Serial Monitor angezeigt.
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  

Sobald Sie die UID haben:

  • Ändere Zeile 18 des Codes, um die UID widerzuspiegeln, z. B. ändere byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; zu byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Lade den überarbeiteten Code auf den Arduino Nano hoch.
  • Platziere einen RFID/NFC-Tag auf dem RFID-RC522-Modul.
  • Überprüfe die Ausgabe im Serial Monitor.
COM6
Send
Tap RFID/NFC tag on reader Access is granted
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vergewissern Sie sich, dass das Solenoidschloss nicht deaktiviert ist.
  • Halten Sie ein anderes RFID/NFC-Tag an das RFID-RC522-Modul.
  • Überprüfen 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 Tests zu erleichtern, wurde die Freigabezeit auf 2 Sekunden gesetzt; sie sollte jedoch für den praktischen Einsatz bzw. zur Demonstration erhöht werden.
  • Die Installation der MFRC522-Bibliothek ist erforderlich. Weitere Informationen finden Sie im Arduino Nano - RFID/NFC RC522 Tutorial.

Arduino Nano Code - Mehrere Tasten

Stellen wir uns einen Raum vor, in dem nur der Manager und die Sekretärin die Tür öffnen können.

In diesem Fall werden zwei RFID-/NFC-Tags benötigt: eines für den Manager und das andere für die Sekretärin. Die UIDs beider Tags müssen im Code angegeben werden.

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #define RC522_SS_PIN 10 // The Arduino Nano pin connected to RC522's SS pin #define RC522_RST_PIN 5 // The Arduino Nano pin connected to RC522's RST pin #define RELAY_PIN A5 // The Arduino Nano pin connected to relay MFRC522 rfid(RC522_SS_PIN, RC522_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 } } }

Wiederhole die gleichen Schritte wie zuvor und wähle anschließend jedes Tag auf dem RFID-RC522-Modul einzeln aus. Die Ausgabe im Serial Monitor sollte wie folgt aussehen:

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 oben genannten Code erweitern, um drei, vier oder mehr Tags einzuschließen.

Hinzufügen eines LCD-Displays zum RFID-Türschloss

Wir können optional ein LCD-Display hinzufügen, um den Zugriffsstatus (z. B. GENEHMIGT/ABGELEHNT) für Benutzer anzuzeigen. Sie können mehr über LCD in Arduino Nano - LCD-Tutorial erfahren.

Schaltplan - Türschloss-System mit RFID, Solenoid-Schloss oder elektromagnetischem Schloss und LCD-Anzeige

Arduino Nano RFID RC522 Türschloss LCD-Verkabelungsdiagramm

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

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

Bitte beachten Sie, dass im oben gezeigten Schaltplan 5-V-Strom hinzugefügt wird, weil der 5-V-Pin des Arduino nicht genügend Leistung liefern kann, um sowohl das Relais als auch das LCD gleichzeitig zu betreiben.

Arduino Nano Code - Türschloss-System mit Passwort, unter Verwendung eines RFID-RC522-Moduls, Solenoidschloss oder elektromagnetisches Schloss und LCD-Anzeige

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #include <LiquidCrystal_I2C.h> #define RC522_SS_PIN 10 // The Arduino Nano pin connected to RC522's SS pin #define RC522_RST_PIN 5 // The Arduino Nano pin connected to RC522's RST pin #define RELAY_PIN A5 // The Arduino Nano pin connected to relay MFRC522 rfid(RC522_SS_PIN, RC522_RST_PIN); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows 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 lcd.init(); // Initialize the LCD I2C display lcd.backlight(); 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 lcd.clear(); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.clear(); } 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 lcd.clear(); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.clear(); } else { Serial.print("Access denied for user with UID:"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); 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 } } }

※ Notiz:

Die Adresse des LCDs kann je nach Hersteller variieren. Wir verwendeten 0x27 in unserem Code, wie von DIYables angegeben.

Hinzufügen eines Türsensors zum RFID-Türschloss

Im vorherigen Code würde sich die Tür nach einer bestimmten Zeit automatisch schließen, nachdem sie vom Arduino Nano entsperrt wurde. In der Praxis ist jedoch oft ein Türsensor in das System integriert. Wenn die Tür geschlossen ist, würde der Arduino Nano die Tür sofort abschließen, ohne darauf zu warten, dass die Ablaufzeit abläuft.

Um Sie nicht zu überfordern, fügen wir den Türsensor nicht in den Schaltplan und den Code ein. Diesen Teil überlassen wir Ihrer Kreativität. Sie können sich auf die Tutorials Arduino Nano - Türsensor und Arduino Nano - Türsensor-Relaissteuerung beziehen.

Verwaltung und Speicherung gültiger RFID-Schlüssel im EEPROM

Im vorherigen Beispiel wurden die gültigen RFID-Schlüssel (UID) im Arduino Nano-Code fest kodiert. Das bedeutet, dass man RFID-Schlüssel hinzufügen oder löschen möchte, den Code ändern und ihn erneut auf den Arduino Nano hochladen müsste, was umständlich sein kann.

Um die Dinge praktischer zu machen, benötigen wir eine Möglichkeit, RFID-Schlüssel zu verwalten, ohne jedes Mal den Code für den Arduino Nano ändern und hochladen zu müssen. Eine Lösung besteht darin, die RFID-Schlüssel im EEPROM zu speichern, statt sie hart zu codieren. Folglich benötigen wir eine Methode, die das Hinzufügen oder Löschen von RFID-Schlüsseln aus dem EEPROM ermöglicht, ohne den Code ändern zu müssen.

Es gibt zwei Methoden zur Verwaltung von RFID-Schlüsseln im EEPROM:

  • RFID-Schlüssel als Master-Schlüssel
    • Verwenden Sie einen RFID-Schlüssel als ADD-Master-Schlüssel zum Hinzufügen eines neuen Schlüssels. Nachdem der Arduino den ADD-Master-Schlüssel erkannt hat, wechselt er zwischen dem ADD-Modus und dem Betriebsmodus.
    • Im ADD-Modus fügt der Arduino, falls er einen neuen Schlüssel erkennt, diesen Schlüssel dem EEPROM hinzu.
    • Ähnlich wie der DELETE-Master-Schlüssel und der DELETE-Modus.
  • ADD/DELETE-Befehle über Serial/Bluetooth/IR schreiben
    • Befehle werden über Serial/Bluetooth/IR gesendet, z. B. mit dem Serial Monitor, der Bluetooth-App, dem IR-Controller...
    • Befehle umfassen: Anweisung (ADD/DELETE), UID des RFID-Schlüssels.
    • Zur Erhöhung der Sicherheit sollte der Befehl auch ein Passwort enthalten. Der Arduino überprüft das Passwort, um zu bestimmen, ob der Befehl gültig ist oder nicht.

    Beide Methoden erfordern, viel Arduino-Code hinzuzufügen. Das ist keine einfache Aufgabe für Anfänger. Daher bietet dieses Tutorial nur das Wissen, um Anfängern zu helfen, mehr über das Türschloss-System zu erfahren, ohne Anfänger durch den komplizierten Code zu überfordern. Wenn Sie dies praktisch umsetzen möchten, kontaktieren Sie uns bitte über unseren kostenpflichtigen Programmierdienst.

Speichern der Zugriffshistorie auf der SD-Karte

Sie möchten möglicherweise den Zugriffsverlauf mit den folgenden Informationen speichern: UID des RFID-Schlüssels, Zugriffsstatus (GRANTED/DENIED) und Datum und Uhrzeit. Sie können eine SD-Karte verwenden, um die Historie aufzubewahren, da der EEPROM nicht groß genug ist, um die Historie zu speichern. Sie können sich auf dieses Tutorial Arduino Nano - Protokollieren von Daten mit Zeitstempel auf der SD-Karte beziehen.

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!