Conception et réalisation d’un système d’arrosage automatique à base d’ESP32
Dans le cadre des activités du Maker Space Gadget au Lab nous avons développé un système d’arrosage automatique pour plante d’intérieur décliné en deux versions :
- Version autonome avec interface locale (écran + boutons)
- Version connectée paramétrable par smartphone via BLE
Les deux versions reposent sur la même architecture matérielle et diffèrent uniquement par leur interface de commande et leur programme.

1️⃣ Architecture matérielle
Microcontrôleur
Le système est architecturé autour d’un ESP32, programmé via l’IDE Arduino.
Caractéristiques exploitées :
- ADC pour lecture sonde d’humidité
- GPIO pour pilotage MOSFET
- Mode Deep-Sleep
- Bluetooth Low Energy (version connectée)
- EEPROM interne (ou Preferences.h en version BLE)
Sous-ensembles fonctionnels
L’architecture est décomposée en blocs :
🔋 Gestion batterie
- contrôle du courant de charge
- inhibition de charge
- supervision tension batterie
💧 Commande moteur
La pompe est commandée via :
- MOSFET N-channel IRLZ44 (Q5)
- Doubleur de tension à diodes Schottky (BAT43) pour garantir une tension Gate suffisante
- Diode de roue libre (N4002)
- Batterie Li-ion
- Module BMS (Battery Management System)
- Circuit de contrôle de charge :
- Q1 : PNP BC557
- Q2 : PMOS SUP53P06-20
- Q3 / Q4 : NPN BC547
- Mesure état batterie par l’ESP32
Le montage à transistors permet :
L’ESP32 ne pouvant fournir le courant nécessaire au moteur, l’interface de puissance est indispensable.
🌡️ Capteur d’humidité
- Capteur capacitif
- Sortie analogique proportionnelle à l’humidité
- Nécessite étalonnage
La tension mesurée par l’ADC est convertie en valeur de consigne utilisateur.
🖥 Interface utilisateur (version autonome)
- Écran
- 4 boutons :
- Mode
- Validation / Réveil
- –
Boîtiers réalisés en impression 3D.
2️⃣ Gestion énergétique : Deep-Sleep
L’optimisation énergétique est un élément central du projet.
Principe
Entre deux contrôles d’humidité :
- L’ESP32 passe en Deep-Sleep
- Réveil :
- soit par timer
- soit par bouton poussoir externe
Implémentation
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 300
esp_sleep_enable_ext0_wakeup(GPIO_NUM_35, 1);
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
esp_deep_sleep_start();
Particularité importante :
Lors du réveil, l’ESP32 redémarre entièrement (exécution complète de setup()).
D’où la nécessité de stocker les paramètres en mémoire non volatile.
3️⃣ Gestion des paramètres et mémoire
Version autonome : EEPROM.h
L’ESP32 dispose de 4096 octets d’EEPROM.
Exemple de déclaration :
#include <EEPROM.h>
#define EEPROM_SIZE 4096
Stockage d’un paramètre (ex : humidité) :
EEPROM.get(0, humid_prm);
EEPROM.put(0, humid_prm);
EEPROM.commit();
Les paramètres sont stockés en byte pour optimiser l’espace mémoire.
Fonction générique de modification
byte fonct_prm(byte prm, byte v_mini, byte v_maxi, byte sens)
Permet :
- incrémentation
- décrémentation
- gestion circulaire entre bornes
Version connectée : Preferences.h
Conformément aux recommandations Espressif, la version BLE utilise :
#include <Preferences.h>
L’implémentation est plus robuste que EEPROM.h et mieux adaptée à l’ESP32.
4️⃣ Logique de fonctionnement
Mode 0 : Fonctionnement
Affichage :
- Taux humidité
- Consigne
- État pompe
- État batterie
Cycle :
- Mesure humidité
- Comparaison consigne
- Activation pompe si nécessaire
- Gestion cycles
- Passage en sommeil
Modes 1 à 8 : Paramétrage
Paramètres configurables :
- Taux humidité
- Temps de travail pompe
- Temps de repos
- Nombre de cycles avant Deep-Sleep
- Temps fonctionnement pompe (micro-pulses)
- Temps cycle pompe
- Fréquence contrôle
- Durée affichage
Mode 9 : Deep-Sleep forcé
Activation par appui simultané sur BP+ et BP-.
5️⃣ Stratégie d’arrosage
Problématique :
Éviter le ruissellement et la saturation.
Solution :
Arrosage par micro-cycles :
Exemple :
- 5 secondes ON
- 15 à 60 secondes OFF
- Répété N fois
Cela permet :
- homogénéisation humidité
- limitation débordement
- meilleur contrôle racinaire
6️⃣ Version connectée – BLE
Architecture
- BLE activé uniquement au réveil
- Connexion smartphone Android
- Application développée sous MIT App Inventor
Fonctions :
- Recherche périphérique
- Connexion
- Paramétrage consignes
- Étalonnage sonde
- Configuration nom dispositif
Choix du BLE
Avantages :
- Faible consommation
- Adapté à future version solaire
Limite observée :
- Instabilité sporadique de connexion
- Problème non résolu malgré support communautaire
Version considérée comme prototype expérimental.
7️⃣ Conception PCB
- Schémas réalisés sous KiCad
- Circuit double face
- Plan de masse face composants
- Connecteurs dédiés :
- Batterie
- Pompe
- Sonde
- Écran
- Bouton réveil
8️⃣ Apports pédagogiques
Ce projet a permis d’aborder :
- Architecture ESP32
- Gestion d’énergie embarquée
- Commande moteur par MOSFET
- Deep-Sleep et réveil externe
- Mémoire non volatile
- BLE
- Développement Android
- Conception PCB
- Impression 3D
- Calibration capteur analogique
🔎 Perspectives d’amélioration
- Stabilisation BLE
- Version solaire
- Monitoring WiFi
- Application mobile native
- Algorithme adaptatif basé sur historique humidité
🎯 Conclusion
Ce système d’arrosage automatique constitue un projet complet d’électronique embarquée, intégrant :
- Gestion d’énergie
- Capteurs analogiques
- Commande de puissance
- Communication sans fil
- Interface utilisateur locale ou distante
Il illustre une approche modulaire, évolutive et pédagogique parfaitement adaptée à un environnement fablab.
