5.10 Automatisch irrigatiesysteem

5.10.1 Waterpompsysteem

In dit experiment gebruiken we het ESP32-ontwikkelbord om de waterpomp in/uit te schakelen met een relaismodule. Een pomp verplaatst water en transporteert vloeistoffen, en wordt meestal gecombineerd met een relaismodule.

Relaismodule:

In gebruik wordt het vaak gebruikt bij het beheer van hoge spanning en belastingstroom, bijvoorbeeld motoren, hoge stroomsensoren en krachtige verlichting.

cou101

Normally Open (NO): Deze pin is normaal open, tenzij een signaal wordt ontvangen door de signaalpin van het relais. Daarom zijn gemeenschappelijke pinnen losgekoppeld via de NC-pin en verbonden via de NO-pin.

Common Contact (COM): Deze pin maakt verbinding met andere modules, bijvoorbeeld een waterpomp.

Normally Closed (NC): De NC-pin is gekoppeld aan de COM-pin om een gesloten circuit te vormen. Het gebruikt het ESP32-bord om het sluiten en loskoppelen van de relaismodule te regelen.

couy101

Waterpomp:

cou1011

Parameters:

Voedingsspanning: 5V

Statische stroom: 2mA

Maximale contactspanning: 250VAC/30VDC

Maximale stroom: 10A

Open de 5.10.1Water-Pump code met 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);
    }
  }
}

Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

5458448

Testresultaat:

Open de seriële monitor en voer “a” in, pomp één keer water.

Let op: Laat geen water overlopen uit plastic bakken tijdens experimenten. Morsen van water op andere sensoren kan niet alleen kortsluiting of het uitvallen van modules veroorzaken, maar ook warmteontwikkeling en zelfs explosie. Wees extra voorzichtig! Vooral voor jongere gebruikers, gelieve te opereren met uw ouders.

5.10.2 Automatisch irrigatiesysteem

In dit experiment verbinden we de twee sensoren op het ESP32-ontwikkelbord en programmeren we om hun uitvoerwaarden te lezen om het relais en de waterpomp te regelen.

Als de grond erg droog is, zal het relais inschakelen om de waterpomp te regelen om planten te irrigeren; En als het waterpeil te laag is, zal de waterpomp niet kunnen werken en zal de zoemer afgaan.

Open de 5.10.2Auto-irrigation code met 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();
}

Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

5458448

Testresultaat:

LCD 1602 zal de huidige waarde van de bodemvochtigheid en het waterpeil weergeven.

cou102

Wanneer de gedetecteerde bodemvochtigheidswaarde lager is dan 500, zal de zoemer afgaan om aan te geven dat de grond droog is. Als de waterpeilwaarde groter is dan 1000, begint de irrigatie automatisch.

Wanneer het gedetecteerde waterpeil lager is dan 500, werkt het waterpompsysteem niet en zal de zoemer afgaan om aan te geven dat er onvoldoende water is. Druk op de knop om het alarm te stoppen.

flo10