Automatische Bewässerung mit DFRobot – ESP32, Bodenfeuchtesensor & Pumpe

Automatische Bewässerung mit DFRobot – ESP32, Bodenfeuchtesensor & Pumpe

Automatische Bewässerung mit DFRobot (ESP32 + Bodenfeuchte + Pumpe)

Dieses Projekt misst die Bodenfeuchte mit einem kapazitiven Sensor. Fällt sie unter einen Schwellenwert, schaltet ein ESP32 über ein Relais eine kleine Tauchpumpe ein und wässert deine Pflanze für eine definierte Zeit – perfekt für Balkon, Büro oder Urlaub.

Benötigte Komponenten (DFRobot mit SKU)

Hinweis: In dieser Liste stehen nur die SKU‑Nummern. Es gibt absichtlich keine Produktlinks.
Kategorie Bauteil SKU Notizen
Steuerung FireBeetle 2 ESP32‑E IoT Microcontroller DFR0654 3,3 V‑Logik, WLAN/BLE; ideal für IoT‑Projekte.
Sensorik Gravity: Analog Capacitive Soil Moisture Sensor SEN0193 Kapazitiv (korrosionsarm), analoger Ausgang.
Leistung/Relais Gravity: Easy Relay Module (3,3–5 V) DFR0643 Direkt vom ESP32 steuerbar.
Leistung/Relais (Alternative) Gravity: Digital 5A Relay Module DFR0017 5 V‑Variante; ggf. andere Logikpegel beachten.
Aktoren Submersible/Amphibious Mini‑Pumpe FIT0800 Für Gießwasser geeignet.
Aktoren (Alternative) Mini‑Pumpe FIT0200 Alternative Pumpenoption je nach Verfügbarkeit.
Stromversorgung 5 V‑USB‑Netzteil FIT0639 oder FIT0976 Ausreichend Stromreserve (Board + Pumpe) einplanen.
Optional Wasserdichter DS18B20 Temperatursensor DFR0198 Für Wassertank‑ oder Umgebungstemp.‑Monitoring.
Zubehör USB‑Kabel, Dupont‑Leitungen, Schlauch, Freilaufdiode, Rückschlagventil (optional) Freilaufdiode parallel zur Pumpe empfohlen.

Verkabelung & Schaltplan (Kurzfassung)

ESP32 (DFR0654) → Sensor (SEN0193)

  • VCC3V3
  • GNDGND
  • AOUTA0 / GPIO36 (analog‑only)

ESP32 → Relais (DFR0643)

  • INGPIO5
  • VCC3V3 (oder 5V)
  • GNDGND

Relais → Pumpe

  • Relais COM und NO in die +5 V‑Leitung der Pumpe einschleifen.
  • Pumpen‑GND direkt an Netzteil‑GND.
  • Freilaufdiode parallel zur Pumpe (Kathode an +5 V), um Spannungsspitzen zu dämpfen.

Stromversorgung

  • ESP32 über USB‑5 V versorgen.
  • Pumpe am selben 5 V‑Netzteil betreiben; gemeinsames GND sicherstellen.
Sicherheit: Elektronik trocken halten, Sensor‑Elektronik nicht in Wasser tauchen, nur die Sondenfläche in die Erde.

Kalibrierung

  1. Sensor in trockene Erde stecken → ADC‑Wert notieren (z. B. 3300).
  2. Sensor in nasse Erde stecken → ADC‑Wert notieren (z. B. 1500).
  3. Im Code als ADC_DRY und ADC_WET eintragen.
  4. Schwellwerte setzen: Start z. B. bei 35 %, Stop bei 50 % (Hysterese).
  5. Pumpendauer testen (z. B. 15 s) und Cooldown (z. B. 5 Min) anpassen.

Beispielcode (Arduino IDE)


// GoMaker × DFRobot – Automatische Bewässerung (ESP32 + SEN0193 + DFR0643)
// Getestet mit FireBeetle 2 ESP32-E (SKU: DFR0654)

#define PIN_SOIL A0        // FireBeetle A0 = GPIO36 (input only)
#define PIN_RELAY 5        // GPIO5 -> Relais IN
#define SAMPLES 10

// Kalibrierung: Hier deine Messwerte eintragen
int ADC_DRY  = 3300;   // trockene Erde (Beispiel)
int ADC_WET  = 1500;   // nasse Erde   (Beispiel)

// Hysterese in Prozent
int MOISTURE_START = 35;  // unter diesem Wert: Bewässerung starten
int MOISTURE_STOP  = 50;  // über diesem Wert: sicher stoppen

// Pumpe & Pausen
unsigned long WATER_ON_MS = 15000;              // Pumpe an (15 s)
unsigned long COOLDOWN_MS = 5UL*60UL*1000UL;    // 5 Minuten Pause nach einem Zyklus

bool watering = false;

int readSoilADC() {
  long sum = 0;
  for (int i=0; i ADC_DRY) adc = ADC_DRY;
  float pct = 100.0f * (float)(ADC_DRY - adc) / (float)(ADC_DRY - ADC_WET);
  if (pct < 0) pct = 0; if (pct > 100) pct = 100;
  return (int)pct;
}

void setup() {
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, LOW); // Relais AUS (ggf. invertiert)
  analogReadResolution(12);     // ESP32: 12-bit (0..4095)
  Serial.begin(115200);
  delay(500);
  Serial.println("Auto-Bewaesserung gestartet");
}

void loop() {
  int adc = readSoilADC();
  int moisture = adcToPercent(adc);
  Serial.printf("ADC=%d  Feuchte~%d%%\n", adc, moisture);

  if (!watering && moisture <= MOISTURE_START) {
    Serial.println(">>> Unter Schwellwert – Bewaesserung START");
    watering = true;
    digitalWrite(PIN_RELAY, HIGH); // ggf. LOW falls Relais invertiert
    delay(WATER_ON_MS);
    digitalWrite(PIN_RELAY, LOW);
    watering = false;
    Serial.println("<<< Bewaesserung STOP – Cooldown");
    delay(COOLDOWN_MS);
  } else if (moisture >= MOISTURE_STOP) {
    digitalWrite(PIN_RELAY, LOW);
  }

  delay(2000); // Messintervall
}
    
Wichtig: Manche Relaismodule sind invertiert (aktiv LOW). Falls die Pumpe sofort startet, HIGH/LOW im Code tauschen. Für Batteriebetrieb kannst du Deep‑Sleep einbauen (z. B. alle 5–10 Minuten aufwachen, messen, ggf. gießen).

Erweiterungen & Ideen

  • Mehr Pflanzen: Mehrere Relais/Pumpen oder Ventile für Tropfbewässerung.
  • Smart Home: MQTT/Home Assistant, App‑Benachrichtigungen.
  • Anzeige: OLED/LCD für Live‑Feuchte & Pumpenstatus.
  • Logging: Cloud‑Daten, Charts, Telegram‑Bot.
  • Energiesparen: Deep‑Sleep, längere Laufzeit bei Akkubetrieb.
Disclaimer: Arbeiten mit Elektronik und Wasser erfordern Vorsicht. Stelle sichere Verbindungen, ausreichende Isolierung und stabile Stromversorgung sicher. Teste die Laufzeit der Pumpe in kleinen Schritten.

0 Kommentare

Kommentieren

Bitte beachten Sie, dass Kommentare vor ihrer Veröffentlichung genehmigt werden müssen.