Arduino Nano - Verrouillage de porte à clavier

Ce tutoriel vous explique comment construire un système de verrouillage de porte protégé par mot de passe en utilisant un Arduino Nano, un clavier, un verrou à solénoïde ou un verrou électromagnétique, et un afficheur LCD. Voici comment fonctionnera le système de verrouillage de porte :

Pour faciliter les choses, le tutoriel est divisé en plusieurs étapes, du plus facile au plus difficile :

Préparation du matériel

1×Arduino Nano
1×USB A to Mini-B USB cable
1×Keypad 3x4 and 4x4 Kit
1×Relay
1×Solenoid Lock
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) Electromagnetic Lock
1×(Optional) LCD I2C
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 clavier numérique, du verrou à solénoïde, du verrou électromagnétique et de l'affichage LCD.

Le verrou à solénoïde et le verrou électromagnétique sont utilisés pour verrouiller/déverrouiller la porte. Ils diffèrent principalement l'un de l'autre en termes de conception mécanique. Leur câblage avec l'Arduino Nano est similaire. Le code Arduino Nano pour les contrôler est le même.

Si vous n'êtes pas familier avec le clavier, la serrure à solénoïde, la serrure électromagnétique et l'affichage LCD (brochage, fonctionnement, programmation...), les tutoriels suivants peuvent vous aider à apprendre :

Diagramme de câblage

  • Schéma de câblage avec Arduino Nano, pavé numérique et verrou à solénoïde
Schéma de câblage Arduino Nano, clavier, serrure à solénoïde

This image is created using Fritzing. Click to enlarge image

  • Schéma de câblage avec Arduino Nano, clavier et verrou électromagnétique
Schéma de câblage de l'Arduino Nano, du clavier numérique, et de la serrure électromagnétique

This image is created using Fritzing. Click to enlarge image

Code Arduino Nano - Serrure de porte à clavier

/* * 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-keypad-door-lock */ #include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 3; //four columns const int RELAY_PIN = 2; // The Arduino Nano pin connected to the IN pin of relay module const byte pin_rows[ROW_NUM] = {10, 9, 8, 7}; // The Arduino Nano pin connected to the row pins of the keypad const byte pin_column[COLUMN_NUM] = {6, 5, 4}; // The Arduino Nano pin connected to the column pins of the keypad char key_layout[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; Keypad keypad = Keypad( makeKeymap(key_layout), pin_rows, pin_column, ROW_NUM, COLUMN_NUM); const String password = "1234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password) { Serial.println("The correct password! Unlocking the door in 20 seconds"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("The incorrect password! try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

※ NOTE THAT:

L'adresse du LCD peut varier selon le fabricant. Dans notre code, nous avons utilisé 0x27 comme spécifié par DIYables.

Étapes rapides

  • Connectez un câble USB à l'Arduino Nano et au PC.
  • Ouvrez l'IDE Arduino et sélectionnez la carte et le port appropriés.
  • Cliquez sur l'icône Libraries dans la barre gauche de l'IDE Arduino.
  • Recherchez "keypad", puis localisez la bibliothèque de clavier créée par Mark Stanley et Alexander Brevig.
  • Appuyez sur le bouton Install pour installer la bibliothèque de clavier.
Bibliothèque de clavier Arduino Nano
  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino.
  • Cliquez sur le bouton Upload pour charger le code sur l'Arduino Nano.
  • Ouvrez le moniteur série.
  • Appuyez sur les touches 12345 suivies du symbole #.
  • Ensuite, appuyez sur les touches 1234 suivies du symbole #.
  • Vérifiez l'état de la gâche de la serrure pendant 20 secondes.
  • Consultez le résultat sur le moniteur série.
COM6
Send
The incorrect password! try again The correct password! Unlocking the door in 20 seconds
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explication du code

Les mots de passe valides sont prédéfinis dans le code de l'Arduino Nano. Une chaîne de caractères est utilisée pour stocker le mot de passe saisi par les utilisateurs, appelée chaîne d'entrée. Sur le clavier, deux touches (* et #) sont utilisées à des fins spéciales : pour effacer le mot de passe et pour terminer le mot de passe. Le système fonctionne comme suit :

  • À l'exception des deux touches spéciales, si une autre touche est pressée, elle est ajoutée à la chaîne de saisie.
  • Si * est pressé, la chaîne de saisie est effacée. Cela peut être utilisé pour démarrer ou redémarrer la saisie du mot de passe.
  • Si # est pressé :
    • Arduino Nano compare la chaîne de saisie aux mots de passe prédéfinis. Si elle correspond à l'un des mots de passe prédéfinis, Arduino Nano contrôle le relais pour déverrouiller la porte.
    • Que le mot de passe soit correct ou non, Arduino Nano efface la chaîne de saisie pour la prochaine entrée.

Code Arduino Nano - Plusieurs Clés

/* * 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-keypad-door-lock */ #include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 3; //four columns const int RELAY_PIN = 2; // The Arduino Nano pin connected to the IN pin of relay module const byte pin_rows[ROW_NUM] = {10, 9, 8, 7}; // The Arduino Nano pin connected to the row pins of the keypad const byte pin_column[COLUMN_NUM] = {6, 5, 4}; // The Arduino Nano pin connected to the column pins of the keypad char key_layout[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; Keypad keypad = Keypad( makeKeymap(key_layout), pin_rows, pin_column, ROW_NUM, COLUMN_NUM); const String password_1 = "1234"; // change your password here const String password_2 = "5642"; // change your password here const String password_3 = "12345"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // lock the door } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The correct password! Unlocking the door in 20 seconds"); digitalWrite(RELAY_PIN, HIGH); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, LOW); // lock the door } else { Serial.println("The incorrect password! try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Ajout d'un écran LCD à la serrure de porte RFID

Nous pouvons ajouter en option un écran LCD pour afficher le statut (par exemple, ACCORDÉ/REFUSÉ) aux utilisateurs.

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

Schéma de câblage LCD du système de verrouillage de porte Arduino Nano

This image is created using Fritzing. Click to enlarge image

Veuillez noter que, dans le schéma de câblage ci-dessus, le relais et l'écran LCD peuvent ne pas fonctionner ou fonctionner de manière instable en raison d'une puissance insuffisante. Nous vous recommandons fortement d'utiliser une source d'alimentation externe pour le relais et l'écran LCD. Veuillez vous référer au schéma de câblage suivant pour obtenir des instructions :

Schéma de câblage du système de verrouillage de porte Arduino Nano avec écran LCD et alimentation externe

This image is created using Fritzing. Click to enlarge image

Code Arduino Nano - Serrure de porte à clavier

/* * 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-keypad-door-lock */ #include <Keypad.h> #include <LiquidCrystal_I2C.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 3; //four columns const int RELAY_PIN = 2; // The Arduino Nano pin connected to the IN pin of relay module const byte pin_rows[ROW_NUM] = {10, 9, 8, 7}; // The Arduino Nano pin connected to the row pins of the keypad const byte pin_column[COLUMN_NUM] = {6, 5, 4}; // The Arduino Nano pin connected to the column pins of the keypad char key_layout[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; Keypad keypad = Keypad( makeKeymap(key_layout), pin_rows, pin_column, ROW_NUM, COLUMN_NUM); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows const String password_1 = "1234"; // change your password here const String password_2 = "5642"; // change your password here const String password_3 = "12345"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed 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(); } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password lcd.clear(); } else if (key == '#') { lcd.clear(); if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("password is correct"); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("password is incorrect, try again"); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); } input_password = ""; // reset the input password } else { if (input_password.length() == 0) { lcd.clear(); } input_password += key; // append new character to input password string lcd.setCursor(input_password.length(), 0); // move cursor to new position lcd.print('*'); // print * key as hiden character } } }

※ NOTE THAT:

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

Ajout du bip sonore lors de l'appui sur le clavier.

Nous pouvons rendre la serrure de la porte réactive en ajoutant un buzzer piézo pour générer un bref bip à chaque fois qu'une touche du clavier est pressée.

Il est assez simple de l'ajouter. Nous laissons donc cette partie à votre créativité. Vous pouvez consulter le tutoriel Arduino Nano - Bip du clavier pour plus de conseils.

Ajout d'un capteur de porte à la serrure de porte à clavier.

Dans le code mentionné précédemment, l'Arduino Nano verrouille la porte après un délai depuis le déverrouillage. Cependant, dans les applications pratiques, un capteur de porte est généralement ajouté au système. Si l'Arduino Nano détecte que la porte est fermée, il verrouille immédiatement la porte au lieu d'attendre le délai.

Pour ne pas vous submerger, nous n'avons pas inclus le capteur de porte dans le schéma de câblage et le code. Au lieu de cela, nous laissons cette partie à votre créativité. Vous pouvez consulter les tutoriels Arduino Nano - Capteur de porte et Arduino Nano - Commande de relais par capteur de porte pour plus de conseils.

Gérer et stocker les mots de passe valides dans l'EEPROM.

Le code ci-dessus contient des mots de passe valides (UID) qui sont codés en dur dans le code Arduino Nano. Cela signifie que si vous souhaitez ajouter ou supprimer des mots de passe, vous devez modifier le code et le télécharger à nouveau sur l'Arduino Nano, ce qui est peu pratique.

Dans les applications réelles, il est nécessaire de gérer les mots de passe sans avoir à modifier et télécharger le code à chaque fois. Pour ce faire, les mots de passe peuvent être stockés dans l'EEPROM au lieu d'être codés en dur. Par conséquent, une méthode permettant de gérer facilement les mots de passe depuis l'EEPROM est nécessaire.

Deux méthodes sont disponibles pour gérer les mots de passe dans l'EEPROM :

  • Utilisez des mots de passe principaux
    • En utilisant un mot de passe comme mot de passe principal ADD, de nouveaux mots de passe peuvent être ajoutés au système. Une fois que l'Arduino Nano détecte le mot de passe principal ADD, il bascule entre le mode ADD et le mode OPERATION.
    • Pendant le mode ADD, l'Arduino Nano ajoute tout nouveau mot de passe qu'il détecte à l'EEPROM.
    • Une approche similaire est utilisée pour le mot de passe principal DELETE et le mode DELETE.
  • Utilisez des commandes ADD/DELETE via Serial/Bluetooth/IR
    • Les commandes sont transmises via Serial/Bluetooth/IR, en utilisant des outils tels que le moniteur série, l'application Bluetooth ou la télécommande IR.
    • Les commandes consistent en une directive (ADD/DELETE) et le mot de passe.

    Afin d'utiliser l'une des deux méthodes mentionnées ci-dessus, une quantité considérable de code Arduino Nano doit être ajoutée. Pour les personnes qui sont nouvelles dans la programmation, cela peut être une tâche difficile. En conséquence, ce tutoriel vise à fournir une compréhension de base du système de verrouillage de porte sans submerger les débutants avec un code complexe. Si vous souhaitez mettre en œuvre ce système à des fins pratiques, veuillez nous contacter via notre service de programmation payant

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

Pour suivre l'historique des accès, il peut être nécessaire d'enregistrer le statut des accès (AUTORISÉ/REFUSÉ) ainsi que la date et l'heure. Comme l'EEPROM a une capacité insuffisante pour stocker tout l'historique, une carte SD peut être utilisée à la place. Vous pouvez trouver des instructions dans ce tutoriel Arduino Nano - Enregistrer des données avec horodatage sur 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!