Créer un système automatique d’ouverture et de fermeture de porte, contrôlé par un bouton poussoir, avec une indication visuelle de l'état de la porte sur un écran LCD I2C, et un servomoteur qui actionne mécaniquement la porte.
1. Initialisation du système
Lors de la mise sous tension :
La carte ESP32 initialise tous les composants connectés.
Le servomoteur est positionné à 90°, correspondant à l’état "porte fermée".
L’écran LCD I2C affiche un message d’état comme : Porte fermée.
2. Surveillance du bouton poussoir
Le bouton poussoir est relié à une entrée numérique (GPIO) de l’ESP32.
Le programme surveille en permanence si le bouton est appuyé.
Lorsqu’une pression est détectée :
L’ESP32 change l’état de la porte.
Une résistance de 10 kΩ est utilisée comme pull-down pour assurer que la broche de l’ESP32 lit bien l’état BAS (LOW) quand le bouton n’est pas pressé.
3. Ouverture de la porte
Si la porte est fermée et que le bouton est appuyé :
L’ESP32 envoie un signal PWM au servomoteur, qui tourne à 20° (ou autre angle selon le mécanisme).
Le servomoteur déplace alors le loquet ou le bras de la porte vers la position ouverte.
Le LCD I2C met à jour le message à l’écran : Porte ouverte.
4. Fermeture de la porte
Si la porte est ouverte et que le bouton est appuyé :
L’ESP32 envoie un signal PWM au servomoteur, qui tourne à 90° (ou autre angle selon le mécanisme).
Le servomoteur déplace alors le bras de la porte vers la position fermée.
L'afficheur LCD I2C met à jour le message à l’écran : Porte fermée.
5. Retour à l’attente
Le système retourne en mode veille en attendant un nouvel appui sur le bouton.
Carte ESP32
La carte ESP32 est le cerveau du système. Il lit l’état du bouton, contrôle le servomoteur et envoie des messages à l’écran LCD.
Bouton poussoir
Le bouton poussoir permet à l’utilisateur de déclencher l’ouverture ou la fermeture de la porte.
Servomoteur (ex : SG90)
Le servomoteur est le mécanisme qui fait tourner un bras ou un verrou pour ouvrir ou fermer la porte.
Afficheur LCD I2C (16x2)
L'afficheur LCD Affiche les messages : "Porte fermée", "Ouverture...", "Porte ouverte", etc.
Résistance 10 kΩ
La résistance 10 kΩ est Utilisée comme résistance de pull-down pour stabiliser l’entrée du bouton sur l’ESP32.
Breadboard (Plaque d'essai)
La plaque d'essai facilite les connexions sans soudure.et distribue le 5V de l’Arduino aux autres composants.
Fils de connexion (Jumpers)
Les fils de connexion relient les composants entre eux et à l’Arduino.
Prototype de maison en bois
Le prototype de maison en bois simule une vraie maison avec une porte mobile.
Il constitue un support pour fixer le servomoteur et la porte.
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 bouton poussoir à la carte ESP32
Bouton poussoir | ESP32 |
relier une borne à une résistance | relier la patte de la résistance à GND de ESP32 |
la même borne | GPIO 19 |
une autre borne | 3V3 |
Voici un programme complet en MicroPython pour un système d'ouverture/fermeture de porte avec ESP32, utilisant un bouton poussoir, un servomoteur et un écran LCD I2C.
Bibliothèques requises
Servo → pour commander le servomoteur
i2c_lcd et lcd_api → pour afficher les informations sur l’écran LCD I2C
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 |
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 I2C_ADDR = 0x27 totalRows = 4 totalColumns = 20 # ============================= # Configuration des broches # ============================= i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000) #initializing the I2C method for ESP32 lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns) # Bouton poussoir connecté à la broche GPIO 19 push_button = Pin(19, Pin.IN) # Servomoteur connecté à la broche GPIO 23 motor=Servo(pin=23) motor.move(90) # tourne le servo à 90° pour fermer la porte position_door=90 lcd.clear() lcd.move_to(1,1) # afficher "porte fermee dans l'afficheur LCD I2C" lcd.putstr("Porte fermee") while True: if push_button.value()==1 : #si on appuie sur le bouton if position_door==90: # si la porte est fermee # Ouvrir la porte et affiche l'état lcd.clear() lcd.move_to(1,1) lcd.putstr("La porte s'ouvre") for i in range(91,19,-1): motor.move(i) # faire tourner le servomoteur pour ouvrir la porte sleep(0.1) position_door=20 lcd.clear() lcd.move_to(1,1) lcd.putstr("porte ouverte") elif position_door==20: # Si la porte est fermee lcd.clear() lcd.move_to(1,1) lcd.putstr("La porte s'ouvre") for i in range(20,91): motor.move(i) # faire tourner le servomoteur pour fermer la porte sleep(0.1) position_door=90 lcd.clear() lcd.move_to(1,1) lcd.putstr("Porte fermee") |
Explication du programme
1- Initialise les composants : bouton, servo, LCD.
2- Affiche "Porte fermee" au démarrage.
3- Lorsqu’on appuie sur le bouton :
Si la porte est fermée → elle s’ouvre et affiche "Porte ouverte".
Si la porte est ouverte → elle se ferme et affiche "Porte fermee".
Le servo tourne à 0° pour fermer, et à 90° pour ouvrir.
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