5.10 Automatische Bewässerungsanlage

5.10.1 Wasserpumpsystem

In diesem Experiment verwenden wir das ESP32 Entwicklungsboard, um die Wasserpumpe über ein Relaismodul ein- und auszuschalten. Eine Pumpe hebt Wasser und transportiert Flüssigkeiten und wird üblicherweise zusammen mit einem Relaismodul verwendet.

Relaismodul:

Im Einsatz wird es häufig zur Steuerung von Hochspannung und Laststrom verwendet, z.B. Motoren, Hochstromsensoren und Hochleistungsleuchten.

cou101

Normally Open (NO): Dieser Pin ist normalerweise offen, es sei denn, ein Signal wird vom Signalpin des Relais empfangen. Daher sind gemeinsame Pins über den NC-Pin getrennt und über den NO-Pin verbunden.

Common Contact (COM): Dieser Pin verbindet sich mit anderen Modulen, zum Beispiel der Wasserpumpe.

Normally Closed (NC): Der NC-Pin ist mit dem COM-Pin verbunden, um einen geschlossenen Stromkreis zu bilden. Er verwendet das ESP32-Board, um das Schließen und Trennen des Relaismoduls zu steuern.

couy101

Wasserpumpe:

cou1011

Parameter:

Versorgungsspannung: 5V

Statischer Strom: 2mA

Maximale Kontaktspannung: 250VAC/30VDC

Maximaler Strom: 10A

Öffnen Sie den Code 5.10.1Water-Pump mit 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);
    }
  }
}

Wählen Sie das Board ESP32 Dev Module und den COM-Port aus und laden Sie den Code hoch.

5458448

Testergebnis:

Öffnen Sie den seriellen Monitor und geben Sie “a” ein, um einmal Wasser zu pumpen.

Achtung: Lassen Sie bei Experimenten kein Wasser aus den Plastikbecken überlaufen. Verschüttetes Wasser auf anderen Sensoren kann nicht nur einen Kurzschluss oder Funktionsausfall der Module verursachen, sondern auch Hitzeentwicklung und sogar Explosionen. Seien Sie besonders vorsichtig! Besonders für jüngere Benutzer, bedienen Sie dies bitte mit Ihren Eltern.

5.10.2 Automatische Bewässerungsanlage

In diesem Experiment verbinden wir die beiden Sensoren mit dem ESP32 Entwicklungsboard und programmieren sie, um deren Ausgangswerte auszulesen, um das Relais und die Wasserpumpe zu steuern.

Wenn der Boden sehr trocken ist, schaltet sich das Relais ein, um die Wasserpumpe zur Bewässerung der Pflanzen zu steuern; und wenn der Wasserstand zu niedrig ist, kann die Wasserpumpe nicht arbeiten und der Summer alarmiert.

Öffnen Sie den Code 5.10.2Auto-irrigation mit 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();
}

Wählen Sie das Board ESP32 Dev Module und den COM-Port aus und laden Sie den Code hoch.

5458448

Testergebnis:

LCD 1602 zeigt den aktuellen Wert der Bodenfeuchtigkeit und des Wasserstands an.

cou102

Wenn der gemessene Bodenfeuchtigkeitswert niedriger als 500 ist, alarmiert der Summer, um anzuzeigen, dass der Boden trocken ist. Wenn der Wasserstandswert größer als 1000 ist, beginnt die Bewässerung automatisch.

Wenn der gemessene Wasserstand niedriger als 500 ist, funktioniert das Wasserpumpsystem nicht, und der Summer alarmiert, um anzuzeigen, dass nicht genügend Wasser vorhanden ist. Drücken Sie die Taste, um den Alarm zu stoppen.

flo10