Système de verrouillage de porte Arduino - RFID/NFC

Dans ce tutoriel, nous allons apprendre à fabriquer un système de verrouillage de porte Arduino RFID/NFC en utilisant Arduino, le kit RFID/NFC RC522 et un verrou électromagnétique ou un verrou à solénoïde.

※ NOTE THAT:

Nous avons également d'autres tutoriels Arduino - Système de verrouillage de porte utilisant un clavier.

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
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
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

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 et de la serrure électromagnétique

Si vous ne connaissez pas le module RFID/NFC RC522, le verrou électromagnétique et le verrou à solénoïde (brochage, fonctionnement, programmation...), renseignez-vous à leur sujet dans les tutoriels suivants :

#Composants du système

Le système de verrouillage de porte comprend deux parties principales :

  • Serrure de porte : Arduino + lecteur RFID/NFC + verrou électromagnétique
  • Clé de porte : Étiquettes RFID/NFC
Composant de serrure de porte RFID Arduino

Il existe certains types de lecteurs RFID/NFC qui peuvent fonctionner avec Arduino. Ce tutoriel utilise le RFID-RC522 comme lecteur RFID/NFC car il est bon marché.

Comment fonctionne une serrure de porte RFID/NFC

  • Certains tags possédant des UID définis dans le code Arduino fonctionnent comme des clés autorisées.
  • L'utilisateur tape un tag RFID/NFC sur le lecteur RFID/NFC.
  • Le lecteur lit l'UID du tag.
  • Arduino reçoit l'UID du lecteur.
  • Arduino compare l'UID lu avec les UID prédéfinis.
  • Si l'UID correspond à l'un des UID prédéfinis, Arduino désactive le verrou électromagnétique pour déverrouiller la porte.

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 RFID RC522 Arduino

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 de porte Arduino RFID RC522

This image is created using Fritzing. Click to enlarge image

Pour simplifier, 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, puisque les broches de sortie de l'Arduino délivrent 5V, tandis que les broches du module RC522 fonctionnent normalement à 3.3V. Il est donc recommandé de réguler la tension entre les broches de l'Arduino et celles du module RC522. Pour des instructions plus détaillées, veuillez consulter le tutoriel Arduino - RFID RC522. Le schéma ci-dessous illustre comment réguler de 5V à 3.3V à l'aide de résistances :

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

This image is created using Fritzing. Click to enlarge image

※ NOTE THAT:

L'ordre des broches peut varier selon les fabricants. Utilisez TOUJOURS les étiquettes imprimées sur le module. L'image ci-dessus montre le schéma de brochage des modules du fabricant DIYables.

Code Arduino - Touche Unique

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/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 } } }

Étapes rapides

Comme l'UID n'est généralement pas imprimé sur l'étiquette RFID/NFC, la première étape que nous devons faire est de découvrir l'UID de l'étiquette. Cela peut être fait en :

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Cliquez sur le bouton Upload de l'IDE Arduino pour téléverser le code sur Arduino
  • Ouvrez le moniteur série
  • Tapez une étiquette RFID/NFC sur le module RFID-RC522
  • Obtenez l'UID 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  

Après avoir UID :

  • Mettez à jour l'UID à la ligne 18 du code ci-dessus. Par exemple, changez byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; en byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Téléversez à nouveau le code sur Arduino
  • Approchez une étiquette RFID/NFC du module RFID-RC522
  • Consultez 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 le verrou électromagnétique, il doit être déverrouillé
  • Posez 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 le test, le temps de déverrouillage est réglé sur 2 secondes, il devrait être augmenté lors de l'utilisation pratique/de la démonstration.
  • Il est nécessaire d'installer la bibliothèque MFRC522. Voir Arduino - Tutoriel RFID/NFC RC522

Code Arduino - Plusieurs Touches

Imaginons qu'une pièce permet uniquement au directeur et à la secrétaire de déverrouiller la porte.

Dans ce cas, nous devons utiliser deux étiquettes RFID/NFC : une pour le gérant et l'autre pour le secrétaire. Nous devons spécifier les UID des deux étiquettes dans le code.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/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 } } }

Effectuez les mêmes étapes que ci-dessus, puis appuyez un par un sur les tags du module RFID-RC522. Le résultat sur le moniteur série apparaît comme ci-dessous :

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 ci-dessus pour trois, quatre tags ou plus.

※ NOTE THAT:

Dans le code ci-dessus, les clés sont codées en dur. En pratique, il devrait être possible d'ajouter/supprimer des clés dynamiquement via un mode spécial. Dans ce cas, les clés doivent être sauvegardées dans la mémoire EEPROM. Le nombre de clés qui peuvent être sauvegardées dépend de la taille de l'EEPROM. Le code deviendra compliqué. Si vous souhaitez construire un tel système, nous proposons un service de codage. N'hésitez pas à nous contacter.

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!