Arduino - Clavier

Le clavier est largement utilisé dans de nombreux appareils tels que les serrures de porte, les distributeurs automatiques, les calculatrices...

Dans ce tutoriel, nous apprendrons :

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×Keypad 3x4 and 4x4 Kit
1×(Alternative) Keypad 3x4
1×(Alternative) Keypad 4x4
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 clavier

Clavier

Le clavier est un ensemble de boutons disposés en rangées et en colonnes (appelé matrice). Chaque bouton est appelé une touche.

Le clavier présente différents types. Deux types populaires pour les projets de bricolage sont le clavier 3x4 (12 touches) et le clavier 4x4 (16 touches).

Brochage

Les broches du clavier sont divisées en deux groupes : rangée et colonne.

Le clavier 3x4 possède 7 broches : 4 broches de rangée (R1, R2, R3, R4) et 3 broches de colonne (C1, C2, C3).

Le clavier 4x4 a 8 broches : 4 broches de rangée (R1, R2, R3, R4) et 4 broches de colonne (C1, C2, C3, C4).

Disposition des broches du clavier

Comment ça marche

Cette section est consacrée à des connaissances approfondies. NE vous inquiétez pas si vous ne comprenez pas. Ignorez cette section si elle vous surcharge, et revenez un autre jour. Continuez à lire les sections suivantes.

Le processus de détection de l'appui sur une touche est appelé balayage du clavier.

Il est appelé « balayage » car il vérifie une touche après l'autre.

Les broches en rangée sont connectées aux broches de sortie de l'Arduino.

Les broches de colonne sont connectées aux broches d'entrée de l'Arduino (INPUT_PULLUP, dans cet état, la valeur de la broche d'entrée est HIGH si la touche n'est pas pressée).

Pour chaque ligne :

  • Met tous les broches de ligne à ÉLEVÉ.
  • Met seulement la broche de ligne courante à BAS.
  • Lit l'état de chaque colonne.
    • Si une broche de colonne est ÉLEVÉE ⇒ la touche à (ligne, colonne) n'est pas pressée.
    • Si une broche de colonne est BASSE ⇒ la touche à (ligne, colonne) est pressée.
  • Répète le processus ci-dessus pour les broches de ligne suivantes.

※ NOTE THAT:

La méthode ci-dessus est l'une des méthodes pour scanner un clavier. Nous pouvons inverser tous les HIGH en LOW et tous les LOW en HIGH pour scanner le clavier.

Pourquoi le clavier est-il agencé et connecté sous forme de matrice ? Cela rend le processus de balayage compliqué. Pourquoi ne pas utiliser chaque touche comme un bouton indépendant, alors que l'état de la touche pourrait simplement être déterminé en lisant l'état d'un bouton ?

Comme nous le savons, un bouton indépendant nécessite une broche d'Arduino et la masse. Prenons l'exemple d'un clavier 4x4. Si nous considérons chaque touche comme un bouton indépendant, cela nécessite 16 broches Arduino pour 16 touches plus la broche de masse. Si nous organisons les touches connectées sous forme de matrice, nous n'avons besoin que de 8 broches d'Arduino, ainsi nous pouvons économiser des broches d'Arduino. En bref, la réponse est : pour économiser les broches d'Arduino.

Diagramme de câblage

Schéma de câblage du clavier Arduino

This image is created using Fritzing. Click to enlarge image

Comment programmer un clavier numérique

Grâce à la bibliothèque Keypad, utiliser un clavier avec Arduino est un jeu d'enfant, que vous compreniez ou non le fonctionnement du clavier.

Code Arduino

Clavier 3x4

#include <Keypad.h> const int ROW_NUM = 4; //four rows const int 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 ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

Clavier 4x4

#include <Keypad.h> const int ROW_NUM = 4; //four rows const int COLUMN_NUM = 4; //four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3', 'A'}, {'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; 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, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

Étapes rapides

  • Naviguez vers l'icône Libraries sur la barre gauche de l'Arduino IDE.
  • 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 dans l'IDE Arduino pour téléverser le code vers Arduino
  • Ouvrez le moniteur série
  • Appuyez sur quelques touches du clavier
  • Voir le résultat dans le moniteur série
COM6
Send
3 6 9 4 * #
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Clavier et mot de passe

Une application populaire du clavier est la saisie de mot de passe. Dans cette application, nous spécifions deux touches spéciales :

  • Une touche pour commencer/relancer la saisie du mot de passe. Par exemple, la touche "*"
  • Une touche pour terminer la saisie du mot de passe. Par exemple, la touche "#"

Le mot de passe sera une chaîne contenant les touches restantes, à l'exception de deux touches spéciales sélectionnées.

Lorsqu'une touche est pressée.

  • Si la touche n'est ni "*" ni "#", ajoutez la touche à la chaîne de mot de passe saisie par l'utilisateur.
  • Si la touche est "#", comparez la chaîne de mot de passe saisie par l'utilisateur avec le mot de passe pour déterminer si le mot de passe saisi est correct ou non, puis effacez la chaîne de mot de passe saisie par l'utilisateur.
  • Si la touche est "*", effacez la chaîne de mot de passe saisie par l'utilisateur.

Clavier - Code de mot de passe

/* * 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 */ #include <Keypad.h> const int ROW_NUM = 4; //four rows const int 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 = "1234"; // change your password here String input_password; void setup(){ Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // clear input password } else if(key == '#') { if(password == input_password) { Serial.println("password is correct"); // DO YOUR WORK HERE } else { Serial.println("password is incorrect, try again"); } input_password = ""; // clear input password } else { input_password += key; // append new character to input password string } } }
  • Exécutez le code ci-dessus
  • Ouvrez le moniteur série
  • Appuyez sur les touches "123456" puis sur "#"
  • Appuyez sur les touches "1234" puis sur "#"
  • Consultez le résultat sur le moniteur série
COM6
Send
password is incorrect, try again password is correct
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Vidéo

Mettez-vous au défi

  • Afficher la touche pressée du clavier sur l'écran LCD. Indice : Consultez Arduino - LCD
  • Réaliser une serrure de porte avec protection par mot de passe en utilisant le clavier.

※ 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!