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.

cou101

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.

couy101

Pompe à eau :

cou1011

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.

5458448

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.

5458448

Résultat du test :

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

cou102

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.

flo10