Verrou de porte RFID - Arduino Nano

Ce tutoriel vous explique comment construire un système de verrouillage de porte en utilisant un Arduino Nano, un module RFID/NFC RC522, un relais, un verrou à solénoïde ou un verrou électromagnétique, et éventuellement un écran LCD. Pour vous faciliter la tâche, le tutoriel vous guide pour construire le verrou RFID de manière simple à complexe. En détail, nous allons réaliser :

Si vous souhaitez construire un système de verrouillage de porte utilisant un mot de passe, veuillez consulter Arduino Nano - Serrure de porte à clavier

Préparation du matériel

1×Arduino Nano
1×USB A to Mini-B USB cable
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×Solenoid Lock
1×(Alternative) Electromagnetic Lock
1×Relay
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino Nano
1×(Recommended) Screw Terminal Adapter for Arduino Nano

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du module RFID/NFC RC522, du verrou à solénoïde et du verrou électromagnétique

Si vous ne connaissez pas le module RFID/NFC RC522, le verrou à solénoïde, la serrure électromagnétique (y compris le brochage, son fonctionnement et comment le programmer), les tutoriels suivants peuvent fournir plus d'informations :

#Composants du système de verrouillage de porte

Un système de serrure de porte simple se compose de deux composants :

  • Serrure de porte : un Arduino Nano, un lecteur RFID/NFC, un relais et une serrure à solénoïde ou une serrure électromagnétique
  • Clé de porte : étiquettes RFID/NFC
Composant de serrure de porte RFID Arduino Nano

Fonctionnement des serrures de porte RFID/NFC

  • L'utilisateur appuie sur une étiquette RFID/NFC sur le lecteur RFID/NFC, qui lit l'UID de l'étiquette.
  • Arduino Nano récupère ensuite cet UID du lecteur et le compare aux UID qui ont été définis dans le code Arduino Nano.
  • Ces UID servent de clés autorisées.
  • Si l'UID correspond à l'un des UID prédéfinis, Arduino Nano désactivera le verrou à solénoïde pour déverrouiller la porte.
  • Arduino Nano verrouillera la porte après un délai en activant le relais.

Diagramme de câblage

  • Serrure de porte RFID RC522 avec serrure à solénoïde
Schéma de câblage du système de verrouillage de porte à solénoïde RFID RC522 Arduino Nano

This image is created using Fritzing. Click to enlarge image

  • Serrure de porte RFID RC522 avec serrure électromagnétique
Schéma de câblage du système de verrouillage électromagnétique de porte RFID RC522 Arduino Nano

This image is created using Fritzing. Click to enlarge image

Pour simplifier le processus de connexion, les broches du module RC522 sont directement connectées aux broches de l'Arduino. Cependant, cela peut entraîner un dysfonctionnement de l'Arduino dans certains cas, car les broches de sortie de l'Arduino délivrent 5V, tandis que les broches du module RC522 fonctionnent à 3.3V. En conséquence, il est recommandé de réguler la tension entre les broches de l'Arduino et celles du module RC522. Le schéma ci-dessous montre comment des résistances peuvent être utilisées pour réguler de 5V à 3.3V.

Schéma de câblage régulé en tension pour Arduino Nano RFID RC522

This image is created using Fritzing. Click to enlarge image

※ NOTE THAT:

Les fabricants peuvent disposer l'ordre des broches différemment, il est donc important de se fier aux étiquettes imprimées sur le module. Le schéma de brochage ci-dessus montre l'agencement des broches pour les modules produits par le fabricant DIYables.

Code Arduino Nano - Touche unique

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } } }

Étapes rapides

Afin de découvrir l'UID d'une étiquette RFID/NFC :

  • Téléchargez le code ci-dessus sur Arduino Nano en utilisant l'IDE Arduino.
  • Ouvrez le moniteur série et appuyez sur l'étiquette sur le module RFID-RC522. L'UID sera affiché sur le moniteur série.
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  

Une fois que vous avez l'UID :

  • Modifiez la ligne 18 du code pour refléter l'UID, par exemple changez byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; par byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Téléchargez le code révisé sur l'Arduino Nano
  • Placez une étiquette RFID/NFC sur le module RFID-RC522
  • Vérifiez la sortie sur le moniteur série
COM6
Send
Tap RFID/NFC tag on reader Access is granted
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vérifiez que le verrou solénoïde n'est pas désactivé.
  • Tapez un autre tag RFID/NFC sur le module RFID-RC522.
  • Consultez la sortie sur le moniteur série.
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  

※ NOTE THAT:

  • Pour faciliter les tests, le temps de déverrouillage a été réglé à 2 secondes ; cependant, il devrait être augmenté pour une utilisation pratique/démonstration.
  • L'installation de la bibliothèque MFRC522 est nécessaire. Pour plus d'informations, veuillez vous référer au tutoriel Arduino Nano - RFID/NFC RC522.

Code Arduino Nano - Plusieurs Touches

Imaginons une pièce où seuls le directeur et la secrétaire peuvent ouvrir la porte.

Dans ce cas, deux étiquettes RFID/NFC sont nécessaires : une pour le gestionnaire et l'autre pour le secrétaire. Les UID des deux étiquettes doivent être spécifiés dans le code.

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } } }

Répétez les mêmes étapes que précédemment, puis sélectionnez individuellement chaque étiquette sur le module RFID-RC522. L'affichage sur le moniteur série devrait ressembler à cela :

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  

Vous pouvez étendre le code mentionné ci-dessus pour inclure trois, quatre ou plusieurs balises.

Ajout d'un écran LCD au verrouillage de porte RFID

Nous pouvons ajouter en option un écran LCD pour afficher le statut d'accès (par exemple ACCORDÉ/REFUSÉ) aux utilisateurs. Vous pouvez en savoir plus sur les LCD dans Tutoriel Arduino Nano - LCD

Schéma de câblage - Système de verrouillage de porte utilisant RFID, serrure à solénoïde ou serrure électromagnétique, et affichage LCD

Schéma de câblage d'un verrou de porte RFID RC522 avec Arduino Nano et écran LCD

This image is created using Fritzing. Click to enlarge image

Veuillez noter que dans le schéma de câblage ci-dessus, une alimentation de 5V est ajoutée car la broche 5V de l'Arduino ne peut pas fournir suffisamment de puissance à la fois pour le relais et l'écran LCD.

Code Arduino Nano - Système de verrouillage de porte avec mot de passe utilisant le module RFID RC522, un verrou solénoïde ou un verrou électromagnétique, et un affichage LCD

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } } }

※ NOTE THAT:

L'adresse du LCD peut varier en fonction du fabricant. Nous avons utilisé 0x27 dans notre code, comme spécifié par DIYables.

Ajout d'un capteur de porte au verrou de porte RFID

Dans le code précédent, la porte se verrouillait après un certain temps depuis qu'elle avait été déverrouillée par l'Arduino Nano. Cependant, dans des scénarios réels, un capteur de porte est souvent intégré au système. Si la porte est fermée, l'Arduino Nano verrouillerait immédiatement la porte sans attendre l'expiration de la période de timeout.

Pour ne pas vous surcharger, nous n'ajoutons pas le capteur de porte au schéma de câblage et au code. Nous laissons cette partie à votre créativité. Vous pouvez vous référer aux tutoriels Arduino Nano - Capteur de porte et Arduino Nano - Contrôle de relais par capteur de porte.

Gérer et stocker les clés RFID valides dans l'EEPROM

Dans l'exemple précédent, les clés RFID valides (UID) étaient codées en dur dans le code de l'Arduino Nano. Cela signifie que si vous vouliez ajouter ou supprimer des clés RFID, vous devriez modifier le code et le télécharger à nouveau sur l'Arduino Nano, ce qui peut être peu pratique.

Pour rendre les choses plus pratiques, nous avons besoin d'une manière de gérer les clés RFID sans avoir à modifier et charger le code sur l'Arduino Nano à chaque fois. Une solution est de stocker les clés RFID dans l'EEPROM au lieu de les coder en dur. Par conséquent, nous avons besoin d'une méthode qui permette d'ajouter ou de supprimer des clés RFID de l'EEPROM sans avoir à changer le code.

Il existe deux méthodes pour gérer les clés RFID dans l'EEPROM :

  • Clés RFID comme clés principales
    • Utilisez une clé RFID comme clé principale pour ajouter de nouvelles clés. Après que l'Arduino détecte la clé principale d'ajout, il bascule entre le mode AJOUT et le mode OPÉRATION.
    • En mode AJOUT, si l'Arduino détecte une nouvelle clé, il l'ajoute à l'EEPROM
    • Semblable à la clé principale de SUPPRESSION et au mode de SUPPRESSION.
  • Écrire des commandes AJOUT/SUPPRESSION via Série/Bluetooth/IR
    • Les commandes sont envoyées via Série/Bluetooth/IR en utilisant le moniteur série, l'application Bluetooth, le contrôleur IR...
    • Les commandes incluses : directive (AJOUT/SUPPRESSION), UID de la clé RFID.
    • Pour renforcer la sécurité, la commande doit également inclure un mot de passe. Arduino vérifie le mot de passe pour déterminer si la commande est valide ou non.

    Les deux méthodes nécessitent d'ajouter beaucoup de code Arduino. Ce n'est pas une tâche facile pour les débutants. Par conséquent, ce tutoriel fournit uniquement les connaissances pour aider les débutants à en savoir plus sur le système de verrouillage de porte sans les surcharger avec le code compliqué. Si vous souhaitez mettre cela en pratique, veuillez nous contacter via notre service de programmation payant

Stockage de l'historique d'accès sur la carte SD

Vous pourriez vouloir stocker l'historique d'accès avec les informations suivantes : UID de la clé RFID, statut d'accès (AUTORISÉ/REFUSÉ), et date et heure. Vous pouvez utiliser une carte SD pour conserver l'historique car l'EEPROM n'est pas assez grande pour stocker l'historique. Vous pouvez consulter ce tutoriel Arduino Nano - Enregistrer des données avec horodatage sur une carte SD.

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!