Les portes sécurisées à ouverture par code sont des dispositifs de contrôle d’accès qui utilisent un code numérique ou alphanumérique pour autoriser ou refuser l’ouverture d’une porte. Contrairement aux serrures mécaniques classiques, ces systèmes ne nécessitent ni clé physique ni badge, mais reposent sur l’entrée correcte d’un mot de passe via un clavier ou une interface numérique.
Objectif principal
Garantir la sécurité d’un espace (logement, bureau, laboratoire, coffre, etc.) en limitant l’accès uniquement aux personnes connaissant le code confidentiel.
Fonctionnement général
1- Entrée du code via un clavier ou écran tactile.
2- Vérification du code par un système électronique ou logiciel.
3- Si le code est correct : déverrouillage de la porte (électriquement ou mécaniquement).
4- Si le code est incorrect : la porte reste verrouillée, et des mesures peuvent être déclenchées (alarme, temporisation, verrouillage définitif).
Éléments typiques
- Clavier ou pavé numérique : interface de saisie.
- Unité de traitement : microcontrôleur, circuit électronique, ou logiciel embarqué.
- Système de verrouillage : serrure électrique, électroaimant, gâche électrique, etc.
- Source d’énergie : batterie, alimentation secteur, ou panneau solaire.
Avantages
Pas besoin de clé physique (pas de perte, pas de duplication).
Accès rapide et simple.
Code modifiable facilement.
Adapté à différents environnements (résidences, écoles, entreprises, zones sensibles).
Ce projet a pour but de concevoir un système de contrôle d’accès électronique capable de verrouiller ou déverrouiller une porte à l’aide d’un code secret saisi via un clavier matriciel. Le système est géré par une carte ESP32, qui contrôle l'ouverture de la porte à l’aide d’un servomoteur, tout en fournissant un retour visuel à l’utilisateur via un écran LCD I2C.
Principe de fonctionnement
1- Au démarrage, l'écran affiche "Entrer le code".
2- L'utilisateur saisit un code à 4 ou 6 chiffres via le clavier matriciel.
3- Le code saisi est comparé à un code prédéfini enregistré dans l’ESP32.
4- Si le code est correct :
L’écran affiche "Accès autorisé".
Le servomoteur tourne pour déverrouiller la porte.
5- Si le code est incorrect :
L’écran affiche "Code incorrect".
La porte reste verrouillée.
6- Le système revient ensuite à l’état initial après quelques secondes.
Carte ESP32 :
La carte ESP32 est le microcontrôleur principal, responsable du traitement du code et de la gestion des composants.
Clavier matriciel 4x3 :
Le clavier matriciel est utilisé pour entrer un code d’accès numérique.
Servomoteur :
Le servomoteur simule le verrouillage/déverrouillage de la porte en effectuant une rotation (ex. : 90° pour fermé, 20° pour ouvert).
Afficheur LCD I2C (16x2 ou 20x4) :
L'afficheur LCD affiche des messages d’état (ex. : "Entrer le code", "Code correct", "Accès refusé", etc.).
Fils de connexion:
Les fils de connexion reliés entre le clavier, l'écran LCD, le servomoteur et la carte ESP32.
Breadboard :
Le Breadboard est utilisée pour faciliter les connexions sans soudure.
Connexion de l'afficheur I2C LCD à la carte ESP32
LCD I2C Pin | ESP32 pin |
VCC | 5 volt |
GND | GND |
SDA | GPIO 21 |
SCL | GPIO 22 |
Connexion du servomoteur à la carte ESP32
Servomoteur | ESP32 |
Fil marron (-) | GND |
Fil rouge (+) | 5V |
Fil jaune | GPIO 23 |
Connexion du clavier matriciel à la carte ESP32
Clavier matriciel 4x3 | Carte ESP32 |
Broche N°1 ( à gauche ) | GPIO 19 |
Broche N°2 | GPIO 18 |
Broche N°3 | GPIO 5 |
Broche N°4 | GPIO 17 |
Broche N°5 | GPIO 16 |
Broche N°6 | GPIO 4 |
Broche N°7 | GPIO 2 |
Voici le code en Micropython qui implémente le fonctionnement du système :
Bibliothèques requises
DIYables_MicroPython_Keypad → pour gérer le clavier matriciel 4x3
i2c_lcd et lcd_api → pour afficher les informations sur l’écran LCD I2C
Servo → pour commander le servomoteur
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 |
# === Inclusion des bibliothèques nécessaires === import machine from machine import Pin, SoftI2C from time import sleep from servo import Servo from lcd_api import LcdApi from i2c_lcd import I2cLcd from ir_rx import NEC_16 from DIYables_MicroPython_Keypad import Keypad # === CONFIGURATION I2C POUR L'ÉCRAN LCD === I2C_ADDR = 0x27 totalRows = 4 totalColumns = 20 i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000) #initializing the I2C method for ESP32 lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns) # === Configuration du clavier 4x3 === NUM_ROWS = 4 NUM_COLS = 3 # Constants for GPIO pins ROW_PINS = [19, 18, 5, 17] # The ESP32 pin GPIO18, GPIO5, GPIO17, GPIO16 connect to the row pins COLUMN_PINS = [16, 4, 2] # The ESP32 pin GPIO4, GPIO0, GPIO2 connect to the column pins # Keymap corresponds to the layout of the keypad 3x4 KEYMAP = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '0', '#'] # Initialize the keypad keypad = Keypad(KEYMAP, ROW_PINS, COLUMN_PINS, NUM_ROWS, NUM_COLS) keypad.set_debounce_time(400) # 400ms, addjust it if it detects twice for single press # === CONFIGURATION DU SERVOMOTEUR === motor=Servo(pin=23) # A changer selon la broche utilisée motor.move(90) # tourne le servo à 90° pour fermer la porte position_door=90 # === Afficher des messages sur l'afficheur LCD I2C lcd.clear() lcd.move_to(1,0) lcd.putstr("Saisir code") lcd.move_to(1,1) lcd.putstr("pour ouvrir porte") #=== Initialiser les variables a utiliser code="" etoiles="" while True: key = keypad.get_key() if key : # Si on appuie sur une touche du clavier matriciel if key!="#": code=code+key etoiles=etoiles+"*" lcd.move_to(1,2) lcd.putstr(etoiles) # Afficher des etoiles saisies sur l'afficheur LCD else: if code=="1234" and position_door==90 : # Si le code saisi est valide lcd.clear() lcd.move_to(1,0) lcd.putstr("Code valide") lcd.move_to(1,1) lcd.putstr("Porte s'ouvre") for i in range(91,19,-1): motor.move(i) # tourne le servo a 20° pour ouvrir la porte sleep(0.1) position_door=20 lcd.clear() lcd.move_to(1,1) lcd.putstr("Porte ouverte") sleep(5) lcd.clear lcd.move_to(1,0) lcd.putstr("Presser le bouton 0") lcd.move_to(1,1) lcd.putstr("pour fermer porte") code="" etoiles="" position_door=20 else: if code=="0" and position_door==20 : # Si la porte est ouverte et on appuie la touche 0 du clavier lcd.clear() lcd.move_to(1,1) lcd.putstr("Porte se ferme") for i in range(20,91): motor.move(i) # tourne le servo à 90° pour fermer la porte sleep(0.1) position_door=90 lcd.clear() lcd.move_to(1,1) lcd.putstr("Porte fermee") sleep(5) lcd.clear() lcd.move_to(1,0) lcd.putstr("Saisir code") lcd.move_to(1,1) lcd.putstr("pour ouvrir porte") code="" etoiles="" position_door=90 else : # Si le code saisi par l'utilisateur est incorrect lcd.clear() lcd.move_to(1,0) lcd.putstr("Code invalide") lcd.move_to(1,1) lcd.putstr("acces refuse") sleep(5) lcd.clear() lcd.move_to(1,0) lcd.putstr("Saisir code") lcd.move_to(1,1) lcd.putstr("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