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.

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.

Wasserpumpe:

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.

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.

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

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.
