Watering plants with a Raspberry PI based on sensors

es c603c7e169 'README.md' ändern 1 ماه پیش
.gitignore de6ecef85e Initial commit 1 ماه پیش
README.md c603c7e169 'README.md' ändern 1 ماه پیش

README.md

Automatisches Topf‑Wasserkonzept

(Raspberry Pi + BME280 + Bodenfeuchte‑Sensor + 5 V Pumpensteuerung)

Ich habe mir Hilfe von OpenAi-GPT-oss-20b-abliterated-uncensored-NEO-Imatrix geholt:
Prompt:

Ich habe einen Raspberry Pi, ein Bodenfeuchte-Sensor Modul mit analog und digital out dafür, eine kleine 5V Pumpe und einen Temperatursensor BME280. Entwirf mir ein Konzept, mit dem ich automatisch eine Topfpflanze nach ihrem Bedarf und der mit dem BME280 nutzbaren Messwerte gießen lassen kann.

Thought for 2 minutes 37 seconds

We need to propose a concept: Raspberry Pi controlling irrigation system using soil moisture sensor analog/digital and BME280 for temperature/humidity? They want automated topplant watering based on moisture levels and temperature sensor data from BME280. Provide architecture: sensors, microcontroller, relay or pump control, software, data acquisition, algorithm.

Need to discuss hardware wiring, power supply (5V?), maybe use 3.3V logic? BME280 is I2C? They want "automatically watering top plants according to need and by using BME280 measurable values". So propose concept: using Raspberry Pi Zero or Pi4? Connect analog soil moisture sensor via ADC (like MCP3008) because Pi has no ADC. Or use Pi's ADC expansion board (Adafruit ADS1115). Use I2C for BME280.

We need to design code architecture in Python or Node-RED. Provide scheduling, threshold-based logic: If soil moisture < threshold and temperature > threshold then water. Maybe incorporate watering schedule and sensor calibration.

Also include power management: 12V pump? Or 5V? They mention small 5V pump. So use 5V supply to pump via transistor (MOSFET) controlled by Pi's GPIO through optocoupler or MOSFET driver like TIP120? Use digital output from Pi.

Also consider sensor modules: soil moisture analog sensor outputs voltage relative to moisture; need to read with ADC. Could use MCP3008 over SPI. BME280 uses I2C. So connect both via separate bus lines: one on I2C (SCL, SDA) for BME280, another on SPI for ADC.

Also propose using a 12V supply? Actually they mention "kleine 5V Pumpe". So we can use 5V logic but pump may require more. But okay.

Will need to integrate into code: Python script that reads sensor values via I2C and SPI, calculates watering schedule based on thresholds or simple rule like if moisture < X AND temperature > Y then water for Z seconds.

Also propose a real-time loop: maybe using while True loop with delay 5 minutes.

Include hardware details: wiring diagram, power supply (5V from Pi's GPIO? Actually Pi has 3.3V, but we can use 5V via separate regulator). So we need to provide suggestions for powering sensors and pump.

Also propose a concept for future expansion: add moisture sensor on each plant maybe multiple? Provide modular architecture.

Also maybe design a simple UI in Python or Node-RED.

Let's produce an answer in German with technical details, diagrams description. Provide code snippet example using smbus2 library for I2C and spidev for SPI or use Adafruit's libraries.

Let's propose using Pi Zero 2W? Or Pi 4? We'll mention compatibility.

Also discuss how to calibrate sensor values: convert analog voltage to moisture content using linear regression, store calibration parameters.

We can also add a real-time logging to CSV file.

We need to answer in German. Provide concept description.

Let's include recommended parts: Raspberry Pi 3B+, MCP3008 ADC, BME280 I2C breakout board, TIP120 MOSFET, 5V pump (like 12V stepper?), maybe 24V? But okay.

Also mention optional use of H-bridge to drive pump. Provide design of power supply: 12V for pump via DC-DC converter from Pi's 5V line?

We need to propose a concept for automatic watering system. So let's produce a detailed concept with hardware, software, algorithm, wiring diagram description, sample code.

Let's do that.

1. Überblick des Systems

Ziel – Ein kleines, aber voll automatisiertes Bewässerungs­system für eine Topfpflanze (oder mehrere).

Die Pflanze soll je nach aktuellem Bodenfeuchte‑ und Temperaturwert automatisch bewässert werden.

Das System besteht aus:

Komponente Funktion Ansteuerung
Raspberry Pi (3B+/4) Steuer­controller, Datenverarbeitung & Logging I²C + SPI
BME280 Break‑out Temperatur / Feuchte (I²C) I²C
Bodenfeuchte‑Sensor (analog) Voltsensor für Feuchte ADC (SPI)
5 V Pumpenkontroller (MOSFET) Bewässerung GPIO
Stromversorgung Versorgung aller Bauteile 12 V (oder 5 V + DC‑DC)

2. Hardware‑Architektur

2.1 Raspberry Pi

  • CPU – 1 GHz (3B+) oder 1,8 GHz (4).
  • I²C‑Bus – für BME280 (SDA/SCL).
  • SPI‑Bus – für MCP3008 ADC (MISO/MOSI/SCK).
  • GPIO‑Pin – für MOSFET‑Ansteuerung der Pumpe.

2.2 Sensor‑Stack

Teil Pin‑Belegung (Pi) Spannung
BME280 SCL → SCLK, SDA → SDA 3,3 V
MCP3008 MISO → MISO, MOSI → MOSI, SCK → SCK, CS → CS 5 V
Bodenfeuchte‑Sensor VCC → 5 V, GND → GND, OUT → A0 (analog) analog

2.3 Pumpensteuerung

  • MOSFET – TIP120 (NPN) oder IRLZ44N (N‑MOS).
  • GPIO – Pin 17 (BCM2835‑GPIO).
  • Stromversorgung – 12 V aus einem DC‑DC‑Converter (oder 5 V + Step‑Up).

2.4 Stromversorgungsschaltung

Pi   ──────> 5 V   ─┬───────
                          │
               BME280    │ 3,3 V
                          │
           MCP3008   │ 5 V
          (ADC)      │
                          ▼
            Pumpen­MOSFET

*Der Pi liefert 3,3 V für den I²C‑Bus und 5 V über einen regulator (z. B. AMS1117).

  • Der ADC benötigt 5 V; daher ein kleiner DC‑DC‑Converter von 3,3 → 5 V ist sinnvoll.

3. Datenverarbeitung & Steuerlogik

3.1 Messsequenz (Python)

#!/usr/bin/env python3
import time, busio, board, digitalio, analogio, adafruit_bme280
from adafruit_mcp3008 import MCP3008

# --- initialisierung
i2c = busio.I2C(board.SCL, board.SDA, frequency=400_000)   # 400 kHz I²C
adc_spi = MCP3008(busio.spi.SCK, busio.spi.MOSI,
                   busio.spi.MISO, busio.spi.CS, busio.spi.OE)

# BME280‑Initialisierung
bme280 = adafruit_bme280.Adafruit_BME280_I2c(i2c)
bme280.configure(address=0x76)   # default I²C address

def read_sensors():
    """Liest Feuchte und Temperatur zurück."""
    temp  = bme280.temperature      # °C
    humid = bme280.humidity         # %
    moist = adc_spi.read(0) * 3.3/1024   # analog‑Volt → m³/m³
    return temp, humid, moist

def should_water(temp, humid, moist):
    """Entscheidet, ob Bewässerung notwendig ist."""
    # Simple Thresholds; kann später per CSV geladen werden.
    if moist < 0.35 and temp > 20:   # Beispielwerte
        return True
    return False

def water_pump(on_time=5):
    """Steuert den Pumpen‑MOSFET (GPIO 17)."""
    pin = digitalio.DigitalInOut(board.GP17)
    pin.switch_to_output()
    pin.value = 1   # ON
    time.sleep(on_time)   # pump läuft 5 s
    pin.value = 0

def main():
    while True:
        temp, humid, moist = read_sensors()
        if should_water(temp, humid, moist):
            print(f"Bewässerung: Temp={temp:.1f}°C Hum={humid:.1f}% Mois={moist:.2f}")
            water_pump()
        else:
            print("Keine Bewässerung nötig.")
        time.sleep(300)  # 5 min Pause

if __name__ == "__main__":
    main()

3.2 Steuer‑Logik

  1. Mess­schleife – alle 5 min werden Temperatur, Feuchte und Bodenfeuchte gelesen.
  2. Entscheidungsfunktion – eine einfache Schwellen­logik (je nach Bedarf).
  3. Pump‑Steuerung – GPIO 17 steuert MOSFET; Pump läuft 5 s (kann per Konfiguration angepasst).

3.3 Logging & Erweiterbarkeit

  • Alle Messwerte werden in einer CSV-Datei log.csv hinterlegt (timestamp, temp, humid, moist).
  • Der Schwellen‑Parameter kann per JSON‑Datei config.json geladen werden – ermöglicht später eine Anpassung ohne Code‑Änderung.

4. Schaltplan & Verdraht (schematic)

   +---------+      +-----------+
   | 3,3 V   |------| BME280    |
   |         |      |           |
   +---------+      +-----------+
        ^               ^
        |               |
   +---------+      +-----------+
   | 5 V     |------| MCP3008    |
   | (ADC)  |      | (analog)   |
   +---------+      +-----------+
        ^               ^
        |               |
   +--------+          +--------+
   | Pi‑GPIO |---+----> | TIP120 |--->
   | 17 (out)|    |     | 5 V Pump
   +--------+    |     +--------+
                 |            |
             DC‑DC‑Conv   (optional)

Alle Verbindungen sind per Jumper‑Kabel realisierbar; für eine bessere Signal­qualität kann ein Breadboard oder ein PCB verwendet werden.


5. Kostenaufstellung

Element Preis (Euro) Menge
Raspberry Pi 3B+ 35 1
MCP3008 ADC‑Breakout 10 1
BME280 Break‑out 15 1
TIP120 MOSFET 6 1
DC‑DC‑Converter (5 V→12 V) 12 1
Kabel + Breadboard 8 1
Gesamt 81

6. Mögliche Erweiterungen

  • Mehrere Pflanzen – einfach ein zusätzliches BME280‑Kabel in die I²C‑Bus‑Linie einbauen; jeder Sensor hat einen eigenen ADC‑Channel.
  • Automatisches Takt‑Management – mit einer Kalibrieroutine (z. B. scikit‑learn) zur Berechnung von Schwellenwerten per ML‑Modell.
  • Remote‑Monitoring – Web‑UI via Flask + Grafana, die die Messwerte in Echtzeit anzeigt.

Fazit

Das vorgeschlagene Konzept nutzt ein einziges Raspberry Pi als „Herz“ des Systems, kombiniert einen analogen Bodenfeuchte‑Sensor mit einem digitalem Temperatur‑/Feuchtesensor (BME280) und steuert per GPIO‑Pin eine 5‑V‑Pumpe.
Mit der oben aufgezeigten Schaltung, dem Python‑Script und dem einfachen Logging‑Schema lässt sich die Pflanze automatisch nach ihren Bedarf bewässern – alles in ca. 80 € für ein funktionsfähiges Set‑Up.

Wenn Du weitere Fragen hast (z. B. zur Kalibrierung oder zum Einbau auf einem PCB), sag Bescheid!