Serrure de porte sécurisée par mot de passe avec Arduino, clavier et actionneur linéaire
Composants et fournitures
| Arduino UNO | ×1 |
| Clavier à membrane 4×4 | ×1 |
| Double pont en H L293D (Texas Instruments) – pilote de moteur | ×1 |
| Actionneur linéaire 12V | ×1 |
À propos du projet
Ce projet existe sur de nombreux sites et chaînes YouTube – il n'a rien d'original. Mais je vais l'expliquer et le présenter de manière plus simple et informative.
Le clavier matriciel
J'utilise un clavier à membrane 4×4. Les touches sont des interrupteurs à pression : fermés quand on appuie, ouverts au repos.
Le clavier est câblé en interne en lignes (rows) et colonnes (columns). Quand on appuie sur '1', colonne 1 et ligne 1 se connectent. Pour '9', c'est ligne 3 et colonne 3.
Principes de balayage (scanning)
Le balayage se fait avec 4 broches en sortie (lignes) et 4 en entrée (colonnes). J'ai mis toutes les colonnes en entrée avec résistances de tirage (pull-up), et toutes les lignes en sortie. Par programmation, chaque ligne est mise à l'état BAS (LOW) l'une après l'autre, plusieurs fois par seconde. Quand une touche est pressée, la colonne correspondante passe à LOW. En lisant l'état des entrées colonnes très fréquemment, on détecte quelle touche est pressée : si ligne 1 est LOW et colonne 1 est LOW simultanément, c'est la touche '1'.
Cette logique est illustrée dans le Code 1 ci-dessous, écrit sans bibliothèque pour en comprendre le fonctionnement interne (la bibliothèque Keypad n'étant pas compatible avec ma carte STM32 à l'époque). Vous pouvez aussi utiliser la bibliothèque Keypad et l'exemple 'customkeypad' – même résultat, mais moins pédagogique.
Le moniteur série affiche chaque touche pressée (vidéo 1).
Gestion du mot de passe
C'est simple : je définis une chaîne "1234" comme mot de passe. Un tableau stocke les touches pressées. Quand 4 touches sont entrées, les deux chaînes sont comparées. Si elles correspondent → mot de passe correct, sinon → intrus. C'est le Code 2. Une LED sur la broche 11 s'allume si le mot de passe est correct (vidéo 2).
Actionneur linéaire comme verrou
L'actionneur linéaire 12V (photo ci-dessus) est piloté par le L293D, alimenté en 12V. Le L293D prend les commandes 5V de l'Arduino et sort du 12V vers l'actionneur. Quand le mot de passe est correct, la broche 11 passe HIGH et la broche 12 LOW. Ces broches sont connectées aux entrées du L293D : l'actionneur se rétracte et la porte s'ouvre (vidéo 3).
Code
Code 1 – Balayage du clavier (Arduino)
int rows = 4;
int columns = 4;
char readkey(void);
char nfunc(void);
#define c3 9
#define c2 8
#define c1 7
#define c0 6
#define r3 5
#define r2 4
#define r1 3
#define r0 2
void setup() {
Serial.begin(9600);
pinMode(c0, INPUT_PULLUP);
pinMode(c1, INPUT_PULLUP);
pinMode(c2, INPUT_PULLUP);
pinMode(c3, INPUT_PULLUP);
pinMode(r0, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
char readkey(void) {
digitalWrite(r0, LOW); digitalWrite(r1, HIGH); digitalWrite(r2, HIGH); digitalWrite(r3, HIGH);
if (digitalRead(c0) == LOW) { delay(500); return '1'; }
else if (digitalRead(c1) == LOW) { delay(500); return '2'; }
else if (digitalRead(c2) == LOW) { delay(500); return '3'; }
else if (digitalRead(c3) == LOW) { delay(500); return 'A'; }
digitalWrite(r0, HIGH); digitalWrite(r1, LOW); digitalWrite(r2, HIGH); digitalWrite(r3, HIGH);
if (digitalRead(c0) == LOW) { delay(500); return '4'; }
else if (digitalRead(c1) == LOW) { delay(500); return '5'; }
else if (digitalRead(c2) == LOW) { delay(500); return '6'; }
else if (digitalRead(c3) == LOW) { delay(500); return 'B'; }
digitalWrite(r0, HIGH); digitalWrite(r1, HIGH); digitalWrite(r2, LOW); digitalWrite(r3, HIGH);
if (digitalRead(c0) == LOW) { delay(500); return '7'; }
else if (digitalRead(c1) == LOW) { delay(500); return '8'; }
else if (digitalRead(c2) == LOW) { delay(500); return '9'; }
else if (digitalRead(c3) == LOW) { delay(500); return 'C'; }
digitalWrite(r0, HIGH); digitalWrite(r1, HIGH); digitalWrite(r2, HIGH); digitalWrite(r3, LOW);
if (digitalRead(c0) == LOW) { delay(500); return '*'; }
else if (digitalRead(c1) == LOW) { delay(500); return '0'; }
else if (digitalRead(c2) == LOW) { delay(500); return '#'; }
else if (digitalRead(c3) == LOW) { delay(500); return 'D'; }
return 'o';
}
char nfunc(void) {
char key = 'o';
while (key == 'o') key = readkey();
return key;
}
void loop() {
char key1 = nfunc();
if (key1) { Serial.print(key1); }
}
Code 2 – Vérification du mot de passe (Arduino)
int rows = 4;
int columns = 4;
int count = 0;
char readkey(void);
char nfunc(void);
#define c3 9
#define c2 8
#define c1 7
#define c0 6
#define r3 5
#define r2 4
#define r1 3
#define r0 2
char password[5] = "1234";
char typed[5];
void setup() {
Serial.begin(9600);
pinMode(c0, INPUT_PULLUP);
pinMode(c1, INPUT_PULLUP);
pinMode(c2, INPUT_PULLUP);
pinMode(c3, INPUT_PULLUP);
pinMode(r0, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
char readkey(void) {
// Identique au Code 1 (ommis pour brièveté)
}
char nfunc(void) {
char key = 'o';
while (key == 'o') key = readkey();
return key;
}
void loop() {
char key1 = nfunc();
if (key1) {
typed[count] = key1;
count++;
Serial.print(key1);
}
if (count == 4) {
if (strcmp(typed, password) == 0) {
Serial.println(" correct");
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
delay(250);
digitalWrite(11, LOW);
} else {
Serial.println(" intruder");
}
count = 0;
}
}
Schématiques
- Schéma de câblage du L293D : connectez l'actionneur là où le moteur est indiqué. Broche 8 du L293D au 12V.
- Vidéo 1 : touche pressée affichée sur le moniteur série
- Vidéo 2 : LED s'allume quand le mot de passe est correct
- Vidéo 3 : actionneur rétracté en position normale (porte verrouillée). Mot de passe correct → actionneur rentré → porte ouverte.
Processus de fabrication
- À l'intérieur des coffres-forts bancaires : histoire, conception et avenir de la sécurité
- Portes tournantes : conception, histoire et avantages d'économie d'énergie
- Canaux et Écluses : Ingénierie, Histoire et Avenir du Transport Fluvial aux États-Unis
- Station météo solaire DIY avec Raspberry Pi
- Construire une porte à verrouillage automatique intelligente via la proximité Bluetooth de votre smartphone
- Construire une porte à reconnaissance faciale sécurisée avec Windows IoT et Raspberry Pi
- Automates Cellulaires Temps Réel sur Arduino avec Écran OLED 128x64
- Serrure connectée WiFi avec Arduino et ESP8266 – Déverrouillage par smartphone
- Configuration moteur : guide complet des types et caractéristiques