5.10 Système d’auto-irrigation
5.10.1 Système de pompage d’eau
Dans cette expérience, nous utilisons la carte de développement ESP32 pour allumer/éteindre la pompe à eau via un module relais. Une pompe soulève l’eau et transporte des liquides, et est généralement combinée à un module relais.
Module relais :
En utilisation, il est souvent employé dans la gestion de hautes tensions et de courants de charge, par exemple, des moteurs, des capteurs à courant élevé et des lumières de forte puissance.

Normalement Ouvert (NO) : Cette broche est normalement ouverte, sauf si un signal est reçu par la broche de signal du relais. Par conséquent, les broches communes sont déconnectées via la broche NC et connectées via la broche NO.
Contact Commun (COM) : Cette broche se connecte à d’autres modules, par exemple, la pompe à eau.
Normalement Fermé (NC) : La broche NC est liée à la broche COM pour former un circuit fermé. Elle utilise la carte ESP32 pour contrôler la fermeture et la déconnexion du module relais.

Pompe à eau :

Paramètres :
Tension d’alimentation : 5V
Courant statique : 2mA
Tension de contact maximale : 250VAC/30VDC
Courant maximal : 10A
Ouvrez le code 5.10.1Water-Pump avec Arduino IDE.
#define RelayPin 25
char content; //Define a character string as the received value from serial port
void setup() {
Serial.begin(9600);
pinMode(RelayPin,OUTPUT);
}
void loop() {
//Serial.read() receives one byte once. For example, when input "aaa", it receives one "a" at a time for three times in total.
if(Serial.available() > 0) {
if (Serial.read() == 'a') //When the input value equals to "a", irrigation begins.
{
digitalWrite(RelayPin,HIGH);
delay(400);//irrigation delay
digitalWrite(RelayPin,LOW);
delay(700);
}
}
}
Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

Résultat du test :
Ouvrez le moniteur série et entrez “a”, la pompe à eau se déclenche une fois.
Attention : Ne laissez pas l’eau déborder des piscines en plastique lors des expériences. Le déversement d’eau sur d’autres capteurs peut non seulement provoquer un court-circuit ou la panne des modules, mais aussi générer de la chaleur et même une explosion. Soyez extrêmement prudent ! Surtout pour les jeunes utilisateurs, veuillez opérer avec vos parents.
5.10.2 Système d’auto-irrigation
Dans cette expérience, nous connectons les deux capteurs à la carte de développement ESP32 et programmons pour lire leurs valeurs de sortie afin de contrôler le relais et la pompe à eau.
Si le sol est très sec, le relais s’activera pour contrôler la pompe à eau afin d’irriguer les plantes ; et si le niveau d’eau est trop bas, la pompe à eau ne pourra pas fonctionner, et le buzzer sonnera.
Ouvrez le code 5.10.2Auto-irrigation avec Arduino IDE.
#include <LiquidCrystal_I2C.h>
#define BuzzerPin 16
#define SoilHumidityPin 32
#define WaterLevelPin 33
#define RelayPin 25
#define ButtonPin 5 //Define a button pin
int value = 0; //Set an initial button value
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
//Set the pins mode
pinMode(SoilHumidityPin, INPUT);
pinMode(WaterLevelPin, INPUT);
pinMode(RelayPin, OUTPUT);
pinMode(ButtonPin, INPUT);
//Initialize LCD
lcd.init();
//Turn on LCD backlight
lcd.backlight();
//Clear LCD displays
lcd.clear();
ledcAttachChannel(BuzzerPin, 1000, 8, 4);
}
void loop() {
//define variables as the read values of water level, humidity and button state
int shvalue = analogRead(SoilHumidityPin);
int wlvalue = analogRead(WaterLevelPin);
int ReadValue = digitalRead(ButtonPin);
//Set the display position of cursor
lcd.setCursor(0, 0);
//Set the display position of character strings
lcd.print("SoilHum:");
lcd.setCursor(9, 0);
lcd.print(shvalue);
lcd.setCursor(0, 1);
lcd.print("WaterLevel:");
lcd.setCursor(11, 1);
lcd.print(wlvalue);
//Determine whether the button is pressed
if (ReadValue == 0) {
//Eliminate the button shake
delay(10);
if (ReadValue == 0) {
value = !value;
Serial.print("The current status of the button is : ");
Serial.println(value);
}
//Again, determine whether the button is still pressed
//Pressed: execute the loop; Released: exit the loop to next execution
while (digitalRead(ButtonPin) == 0)
;
}
//When the detected humidity is lower than the set threshold, the buzzer starts to alarm. Press button to stop alarming.
if (500 >= shvalue && value == 0) {
ledcWriteTone(BuzzerPin, 532);
delay(100);
ledcWriteTone(BuzzerPin, 532);
delay(100);
ledcWriteTone(BuzzerPin, 659);
delay(100);
ledcWriteTone(BuzzerPin, 0); //Stop alarming
}
//When the detected water level is lower than the set threshold, the buzzer starts to alarm. Press button to stop alarming.
if (500 >= wlvalue && value == 0) {
ledcWriteTone(BuzzerPin, 411);
delay(100);
ledcWriteTone(BuzzerPin, 639);
delay(100);
ledcWriteTone(BuzzerPin, 411);
delay(100);
ledcWriteTone(BuzzerPin, 0); //Stop alarming
}
//When the detected humidity is lower than the set threshold, and the water is sufficient in the pool, irrigation starts automatically.
if (500 >= shvalue && wlvalue >= 1000) {
digitalWrite(RelayPin, HIGH);
delay(400); //Irrigation delay.
digitalWrite(RelayPin, LOW);
delay(700);
}
delay(500);
//Clear displays
lcd.clear();
}
Choisissez la carte ESP32 Dev Module et le port COM, puis téléchargez le code.

Résultat du test :
L’écran LCD 1602 affichera la valeur actuelle de l’humidité du sol et du niveau d’eau.

Lorsque la valeur d’humidité du sol détectée est inférieure à 500, le buzzer sonne pour indiquer que le sol est aride. Si la valeur du niveau d’eau est supérieure à 1000, l’irrigation démarre automatiquement.
Lorsque le niveau d’eau détecté est inférieur à 500, le système de pompage d’eau ne fonctionne pas et le buzzer sonne pour indiquer que l’eau est insuffisante. Appuyez sur le bouton pour arrêter l’alarme.
