Une porte sécurisée à ouverture par code est un système de verrouillage qui nécessite la saisie d’un code numérique préalablement défini pour autoriser l’ouverture d’une porte. Elle remplace ou complète les méthodes d'accès traditionnelles comme les clés mécaniques.
Principe de base :
1- L’utilisateur saisit un code via un clavier (physique ou tactile).
2- Le système compare le code entré à un code enregistré.
3- Si le code est correct, le système déverrouille la porte pendant un court laps de temps.
4- Si le code est incorrect, l’accès est refusé (parfois après un nombre d’essais, un système d’alerte peut se déclencher).
Composants principaux
- Clavier numérique (Keypad) : périphérique d’entrée pour saisir le code.
- Microcontrôleur ou système de contrôle : cœur du système, qui traite le code saisi (ex : Arduino, ESP32, Raspberry Pi).
- Mécanisme d’ouverture :
Serrure électronique (à solénoïde ou électroaimant)
Gâche électrique
- Servomoteur pour libérer ou bloquer un verrou
- Source d’alimentation : alimentation directe ou batterie.
- Éléments additionnels (facultatifs) :
Écran d’affichage (LCD, OLED) pour messages d’état
Buzzer pour retour sonore
LEDs pour indiquer l’état (rouge = verrouillé, vert = ouvert)
Capteurs ou systèmes de sécurité (alarme, détection d’effraction)
Avantages
Sécurité renforcée sans nécessité de clé physique.
Installation simple (surtout avec des systèmes modernes sans fil).
Code modifiable à volonté, évitant les pertes de clé.
Contrôle d’accès intelligent – on peut l’intégrer à des systèmes domotiques ou à des bases de données d’accès.
Alimentation sur batterie possible (utile en cas de coupure de courant).
Créer un système électronique de porte sécurisée qui ne s’ouvre que lorsque l’utilisateur saisit le bon code sur un clavier matriciel. Le système affiche des messages sur un écran LCD I2C et commande un servomoteur pour verrouiller ou déverrouiller une porte.
1. Initialisation
L’Arduino initialise l’écran LCD et le clavier.
Le servomoteur est mis en position verrouillée (par exemple, angle 0°).
2. Saisie du code
L’utilisateur tape un code via le clavier matriciel (par exemple "1234").
Chaque touche est affichée en temps réel sur l’écran LCD.
3. Vérification
Lorsque la longueur du code atteint le nombre requis (ex : 4 chiffres), le code est comparé au mot de passe enregistré.
Résultat:
a) Si le code est correct :
Le servomoteur tourne (ex : 20°) pour déverrouiller la porte.
Le LCD affiche un message du type “Accès autorisé”.
Si l'utilisateur appuie sur le bouton 0, la porte se referme.
b) Si le code est incorrect :
Le servomoteur reste verrouillé.
Le LCD affiche “Code incorrect”.
Permet d’apprendre à utiliser :
Les entrées matricielles (clavier)
Les afficheurs I2C
Les servomoteurs PWM
Introduit aux bases de la sécurité électronique
Idéal pour des projets scolaires, TPE ou démonstrateurs
1. Carte Arduino UNO
Rôle : Cerveau du système.
Fonction :
Lit les entrées du clavier matriciel.
Compare le code saisi avec le mot de passe stocké.
Commande le servomoteur pour ouvrir/fermer la porte.
Affiche les informations et messages sur l'écran LCD.
2. Clavier Matriciel 4x3
Description :
4 rangées et 3 colonnes de boutons (généralement 0-9, *, #).
Connecté directement aux broches numériques de l'Arduino.
Rôle :
Permet à l'utilisateur d'entrer un code PIN pour déverrouiller la porte.
Afficheur LCD avec module I2C
Description :
Écran capable d'afficher 2 lignes de 16 caractères.
Le module I2C simplifie la connexion (2 fils : SDA & SCL).
Rôle :
Affiche des instructions ("Entrez le code", "Accès autorisé", "Erreur").
Peut aussi afficher un compte à rebours ou des messages de verrouillage.
Servomoteur (SG90 ou similaire)
Description :
Petit moteur à rotation contrôlée (0° à 180°).
Rôle :
Déplace mécaniquement une serrure ou un loquet pour ouvrir/fermer la porte.
Le servomoteur reçoit une consigne d'angle depuis l'Arduino pour se positionner.
Fils de connexion:
Reliés entre le clavier, l'écran LCD, le servomoteur et l'Arduino.
Breadboard :
Peut être utilisée pour faciliter les connexions sans soudure.
Connexion de l'afficheur LCD I2C à l'Arduino
LCD I2C Display Pin | Arduino Pin |
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
Connexion du servomoteur à l'Arduino
Servomoteur | Arduino UNO |
Fil marron (-) | GND |
Fil rouge (+) | 5V |
Fil jaune | Broche numérique N°2 |
Connexion du clavier matriciel à l'Arduino
Clavier matriciel 4x3 | Arduino |
Broche 1 ( à droite) | Broche 3 |
Broche 2 | Broche 4 |
Broche 3 | Broche 5 |
Broche 4 | Broche 6 |
Broche 5 | Broche 7 |
Broche 6 | Broche 8 |
Broche 7 | Broche 9 |
Voici un programme complet Arduino pour ouvrir une porte à l’aide d’une carte Arduino, d’un servomoteur, d'un clavier matriciel 4x3, et d’un afficheur LCD I2C.
Ce code utilise ces bibliothèques LiquidCrystal_I2C et IRremote. Assure-toi de les installer dans l'IDE Arduino en suivant ces étapes :
Allez dans Sketch > Inclure une bibliothèque > Gérer les bibliothèques et recherchez LiquidCrystal_I2C et Keypad.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
// === Inclusion des bibliothèques nécessaires === #include <LiquidCrystal_I2C.h> #include<Servo.h> //include the servo library #include <Keypad.h> // === Configuration du clavier 4x3 === const byte ROWS = 4; //four rows const byte COLS = 3; //three columns char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; // Définir les broches du clavier byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte colPins[COLS] = {5, 4, 3}; //connect to the column pinouts of the keypad // Initialisation du clavier Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // === Variables du système === String code=""; String etoiles=""; int position_servo = 85; // === Configuration du LCD I2C === LiquidCrystal_I2C lcd(0x27, 40, 4); // === Configuration du servomoteur === Servo servo; //create a servo object void setup() { // Initialisation du servomoteur servo.attach(2); //pin used by the servo servo.write(85); //Position initiale du servo pour fermer la porte // Initialisation du LCD lcd.init(); lcd.backlight(); // Afficher le message de démarrage // dans l'ecran LCD I2C lcd.clear(); lcd.setCursor(1, 0); lcd.print("Saisir code"); lcd.setCursor(1, 1); lcd.print("pour ouvrir porte"); } void loop() { // Lire une touche du clavier char key = keypad.getKey(); if((key)) // On appuie sur une touche du clavier matriciel { if (key!='#') { lcd.setCursor(1, 2); etoiles=etoiles+"*"; lcd.print(etoiles); // Afficher des etoiles saisies sur l'afficheur LCD code+=key; delay(100); } else if (key=='#') { if (code=="1234") { // Si le code saisi est valide if (position_servo==85) { // Si la porte est fermee lcd.clear(); lcd.setCursor(1, 1); lcd.print("La porte s'ouvre"); for (int i=85; i>20 ; i--) { servo.write(i); // Tourner le servomoteur pour ouvrir la porte delay(100); } lcd.clear(); lcd.setCursor(1, 1); lcd.print("Door open"); delay(5000); lcd.clear(); lcd.setCursor(1, 0); lcd.print("Presser le bouton 0"); lcd.setCursor(1, 1); lcd.print("pour fermer porte"); position_servo=20; } } else if (code=="0") { // Si on appuie la touche 0 du clavier if (position_servo==20) { // si la porte est ouverte lcd.clear(); lcd.setCursor(1, 1); lcd.print("La porte se ferme"); for (int i=20; i<85 ; i++) { servo.write(i); // Tourner le servomoteur pour fermer la porte delay(100); } lcd.clear(); lcd.setCursor(1, 1); lcd.print("Porte fermee"); delay(5000); lcd.clear(); lcd.setCursor(1, 0); lcd.print("Saisir code code"); lcd.setCursor(1, 1); lcd.print("pour ouvrir porte"); position_servo=85; } } else { // Si le code saisi par l'utilisateur est incorrect lcd.clear(); lcd.setCursor(1, 1); lcd.print("Code invalide"); delay(5000); lcd.clear(); lcd.setCursor(1, 0); lcd.print("Saisir code"); lcd.setCursor(1, 1); lcd.print("pour ouvrir porte"); } code=""; etoiles=""; } } } |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info