Objectif du projet
Le but de ce projet est de concevoir un distributeur de pièces automatisé et interactif à l’aide de la carte ESP32, capable de :
1- afficher le montant total sur un écran LCD I2C à chaque interaction.
2- permettre l’ajout ou la soustraction de crédits via deux boutons poussoirs (par exemple, un bouton pour ajouter 1€ et un autre pour retirer ou lancer la distribution).
3- distribuer physiquement les pièces grâce à un servomoteur qui actionne un mécanisme de poussée de pièce.
4- offrir une interface simple et visuelle, pratique pour un projet éducatif, DIY, ou pour un usage de démonstration.
Cette configuration permet également de visualiser en temps réel la somme accumulée et les pièces disponibles, tout en automatisant le geste physique de distribution.
Fonctionnement du distributeur
1. Alimentation et initialisation
La carte ESP32 est alimentée et initialise :
a- l’afficheur LCD I2C pour afficher le montant.
b- le servomoteur pour la distribution des pièces.
c- les boutons poussoirs pour la saisie de l’utilisateur.
2. Interaction via les boutons poussoirs
Bouton poussoir 1 : Ajoute un montant prédéfini au total (ex. 1€ ou 0,50€).
Bouton poussoir 2 : Actionne le servomoteur pour distribuer la pièce correspondante.
3. Distribution mécanique
Le servomoteur est relié à un mécanisme de poussée.
Quand le bouton de distribution est pressé, le servomoteur tourne, pousse la pièce du réservoir vers le tiroir, puis revient à sa position initiale.
4. Affichage LCD
Chaque action sur le bouton poussoir 1 met à jour le montant affiché sur l’écran.
Elle permet à l’utilisateur de suivre le crédit disponible et le nombre de pièces distribuées.
1- Carte ESP32

La carte ESP32 est le cœur du projet. Elle gère la logique du distributeur : lecture des boutons, contrôle du servomoteur, mise à jour de l’afficheur LCD.
Fonctions principales :
Lecture des entrées (boutons poussoirs).
Commande du servomoteur pour distribuer les pièces.
Communication avec l’écran LCD I2C pour afficher le montant.
2- Boutons poussoirs (2 pièces)

Les deux boutons poussoirs permettent l’interaction utilisateur avec le distributeur.
Bouton 1 : Ajouter un montant au crédit disponible.
Bouton 2 : Distribuer une pièce via le servomoteur.
3. Servomoteur

Le servomoteur est un moteur spécial capable de tourner à un angle précis.
Rôle dans le projet :
- actionner le mécanisme mécanique du distributeur
- permettre de libérer une pièce à chaque rotation contrôlée
- revenir à sa position initiale après chaque distribution
Le servomoteur est contrôlé par un signal PWM envoyé par la carte Micro:bit.
4. Afficheur LCD I2C

L’afficheur LCD I2C est utilisé pour afficher les informations du système.
5. Mécanisme mécanique du distributeur

Le mécanisme du distributeur de pièces est la partie mécanique qui permet de libérer une pièce à la fois.
Rôle dans le projet :
- stocker les pièces
- permettre leur distribution contrôlée une par une
6. Câbles de Connexion (Jumper Wires)

Les fils de connexion permettent de relier les différents composants entre eux.
7- Breadboard (Plaque d'essai) :

Une breadboard est utile pour créer un circuit temporaire et connecter facilement les composants entre eux.


1- Connexion du bouton 1 à la carte ESP32
| Bouton 1 | Carte ESP32 |
|---|---|
| Patte | GPIO 23 |
| Autre patte | GND |
1- Connexion du bouton 2 à la carte ESP32
| Bouton 2 | Carte ESP32 |
|---|---|
| Patte | GPIO 19 |
| Autre patte | GND |
3- Connexion du servomoteur à la carte ESP32
| Servomoteur | Carte ESP32 |
|---|---|
| Fil rouge | 5V |
| Fil marron | GND |
| Fil jaune | GPIO 5 |
4- Connexion de l’afficheur LCD I2C à la carte ESP32
| Afficheur LCD I2C | Carte ESP32 |
|---|---|
| VCC | 5V de la carte GPIO |
| GND | GND |
| SDA | GPIO 21 |
| SCL | GPIO 22 |
Ce programme permet de contrôler un distributeur de pièces automatisé basé sur la carte ESP32, utilisant :
- deux boutons poussoirs pour ajouter du crédit ou lancer la distribution.
- un servomoteur pour actionner le mécanisme de poussée des pièces.
- Un écran LCD I2C pour afficher le montant actuel ou les messages pour l’utilisateur.
Le programme suit une logique simple : ajouter du crédit → afficher le montant → distribuer les pièces → remettre le compteur à zéro.
On commence par l’importation de ces bibliothèques:
i2c_lcd et lcd_api → pour afficher les informations sur l’écran LCD I2C
Servo → pour commander le servomoteur
Voici le code en Micropython qui implémente le fonctionnement du système :
|
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 |
# Importation des classes nécessaires from machine import Pin # Permet de contrôler les broches GPIO de l'ESP32 from time import sleep # Permet de faire des pauses dans le programme from machine import I2C # Permet d'utiliser le bus I2C pour l'afficheur from servo import Servo # Permet de contrôler un servomoteur # Import de la bibliothèque pour contrôler l'afficheur LCD I2C from i2c_lcd import I2cLcd # Adresse I2C de l'afficheur LCD (0x27 ou 0x3F selon le module) I2C_ADDR = 0x27 # Initialisation de l'afficheur LCD # I2C(0) → bus I2C numéro 0 # scl=Pin(22) → broche GPIO22 utilisée comme ligne horloge I2C # sda=Pin(21) → broche GPIO21 utilisée comme ligne de données I2C # 4, 20 → afficheur LCD 4 lignes x 20 colonnes lcd = I2cLcd(I2C(0, scl=Pin(22), sda=Pin(21)), I2C_ADDR, 4, 20) # Efface l'afficheur pour un affichage propre lcd.clear() # Affichage initial sur le LCD lcd.move_to(0, 0) lcd.putstr("ESP32 ATM") # Titre du projet lcd.move_to(0, 1) lcd.putstr("Amount to withdraw ") # Texte descriptif lcd.move_to(0, 2) lcd.putstr("0") # Montant initial montant = 0 # Variable qui stocke le montant actuel # Configuration des boutons poussoirs # button_1 connecté à GPIO23 avec résistance pull-up interne button_1 = Pin(23, Pin.IN, Pin.PULL_UP) # button_2 connecté à GPIO19 avec résistance pull-up interne button_2 = Pin(19, Pin.IN, Pin.PULL_UP) # Configuration du servomoteur servo_motor = Servo(pin=5) # Broche connectée au servo (à adapter si nécessaire) servo_motor.move(0) # Position initiale du servo à 0° # Boucle principale while True: # Si le bouton 1 est pressé if button_1.value() == 0: montant = montant + 1000 # Ajoute 1000 (ex. 1€) au montant lcd.move_to(0, 2) # Se positionner sur la ligne du montant lcd.putstr(str(montant)) # Affiche le montant mis à jour # Si le bouton 2 est pressé if button_2.value() == 0: print("Button 2 pressed") # Message dans la console pour debug # Distribuer les pièces : une pour chaque 1000 du montant for i in range(montant // 1000): servo_motor.move(150) # Tourne le servo pour pousser une pièce sleep(0.5) # Pause pour laisser le temps au servo servo_motor.move(0) # Retour du servo à la position initiale sleep(0.5) # Petite pause avant la prochaine pièce montant = 0 # Réinitialise le montant après distribution lcd.move_to(0, 2) lcd.putstr(str(montant)) # Affiche le montant remis à zéro sleep(0.3) # Petite pause pour éviter les rebonds des boutons |
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
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info