Arduino - Clavier - Serrure électromagnétique

Dans ce tutoriel, nous allons apprendre à utiliser ensemble un clavier numérique, un verrou électromagnétique et un Arduino. En détail, si un utilisateur saisit correctement le mot de passe sur le clavier numérique, l'Arduino active le verrou électromagnétique.

Le tutoriel fournit également le code qui active un verrou électromagnétique pendant une période donnée puis le désactive sans utiliser la fonction delay(). Le code Arduino prend aussi en charge plusieurs mots de passe.

Serrure électromagnétique à clavier Arduino

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×Keypad 3x4
1×Relay
1×Jumper Wires
1×Electromagnetic Lock
1×12V Power Adapter
1×(Optional) DC Power Jack
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 clavier et du verrou électromagnétique

Si vous ne connaissez pas le clavier et le verrou électromagnétique (brochage, fonctionnement, programmation...), renseignez-vous sur ces dispositifs dans les tutoriels suivants :

Diagramme de câblage

Schéma de câblage du verrou électromagnétique à clavier Arduino

This image is created using Fritzing. Click to enlarge image

Code Arduino - activer le verrou électromagnétique si le mot de passe est correct

Les codes ci-dessous activent un verrou électromagnétique si le mot de passe est correct.

/* * 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-keypad-electromagnetic-lock */ #include <Keypad.h> #define RELAY_PIN A0 // the Arduino pin that controls electromagnetic lock via relay #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the electromagnetic lock } 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 password is correct => unlock"); digitalWrite(RELAY_PIN, LOW); } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Étapes rapides

  • Connectez l'Arduino au PC via le câble USB
  • Ouvrez l'IDE Arduino, sélectionnez la bonne carte et le bon port
  • Naviguez vers l'icône Libraries sur la barre latérale gauche de l'IDE Arduino.
  • Recherchez "keypad", puis trouvez la bibliothèque keypad de Mark Stanley, Alexander Brevig
  • Cliquez sur le bouton Install pour installer la bibliothèque keypad.
Bibliothèque de clavier Arduino
  • 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 vers Arduino
Téléversement de code dans l'IDE Arduino
  • Appuyez sur les touches 8123 puis sur #
  • Appuyez sur les touches 1234 puis sur #
  • Consultez le résultat sur le moniteur série et l'état du verrou électromagnétique
COM6
Send
The password is incorrect, try again The password is correct => unlock
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explication du code

Les mots de passe autorisés sont prédéfinis dans le code Arduino.

Une chaîne 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 : effacer le mot de passe et terminer le mot de passe. Lorsqu'une touche du clavier est pressée :

  • Si la touche pressée n'est pas l'une des deux touches spéciales, elle est ajoutée à la chaîne de saisie.
  • Si la touche pressée est *, la chaîne de saisie est effacée. Vous pouvez l'utiliser pour commencer ou recommencer à saisir le mot de passe.
  • Si la touche pressée est # :
    • La chaîne de saisie est comparée aux mots de passe pré-définis. Si elle correspond à l'un des mots de passe pré-définis, le verrou électromagnétique est activé.
    • Que le mot de passe soit correct ou non, la chaîne de saisie est effacée pour la prochaine saisie.

Code Arduino - activer un verrou électromagnétique pendant une période si le mot de passe est correct

Le code ci-dessous active le verrou électromagnétique pendant 5 secondes si le mot de passe est correct. Après 5 secondes, le verrou électromagnétique est désactivé.

/* * 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-keypad-electromagnetic-lock */ #include <Keypad.h> #include <ezOutput.h> #define UNLOCK_TIME 5000 // in milliseconds #define RELAY_PIN A0 // the Arduino pin that controls electromagnetic lock via relay #define ROW_NUM 4 // four rows #define COLUMN_NUM 3 // three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); ezOutput relay(RELAY_PIN); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed relay.high(); // lock the electromagnetic lock } void loop() { relay.loop(); // MUST call the loop() function first 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 password is correct => unlock"); relay.high(); // set high before making a low pulse relay.pulse(UNLOCK_TIME); // deactivate the electromagnetic lock during UNLOCK_TIME duration } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Veuillez noter que le code ci-dessus utilise la bibliothèque ezOutput, qui facilite la gestion du temps de manière non bloquante. Vous pouvez consulter le Guide d'installation de la bibliothèque ezOutput

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!