Arduino-gesteuerter Indoor-Garten: Intelligente, automatisierte Pflanzenpflege
Komponenten und Zubehör
- 1× Arduino Nano R3
- 1× Custom PCB (gefertigt bei JLCPCB, Blattform)
- 1× ESP-01 Modul (WiFi) oder HC-05/HC-06 Bluetooth-Modul
- 1× BH1750 Lichtsensor (I2C)
- 1× DHT11 Temperatur-/Feuchtesensor
- 1× Bodenfeuchtesensor (kapazitiv empfohlen)
- 1× 12 V Wasserpumpe (Tauchpumpe)
- 1× 12 V DC-Lüfter (Kühlung)
- Weiße LEDs (Pflanzenlicht)
- Steckverbinder, Header, Widerstände
- Netzteil: 12 V / ≥ 2 A (für Pumpe & Lüfter)
- 5 V Spannungsregler (auf PCB für Arduino & Sensoren)
Projektbeschreibung
Ein kompakter, automatisierter Indoor-Garten, der Licht, Bewässerung und Belüftung basierend auf Sensorwerten regelt. Eine Android-App (Bluetooth) ermöglicht manuelle Steuerung und Live-Datenanzeige. Die Custom-PCB (JLCPCB, ~2 $) vereint alle Anschlüsse und führt die Verkabelung sauber zusammen.
Sensoren & Aktoren
| Sensor / Aktor | Funktion | Anschluss |
|---|---|---|
| BH1750 | Umgebungslicht (Lux) | I2C (A4/A5) |
| DHT11 | Temperatur & Luftfeuchte | Digital Pin 7 |
| Bodenfeuchte | Substratfeuchte (analog) | Analog Pin A0 |
| Weiße LEDs | Pflanzenbeleuchtung (PWM) | Pin 6 (PWM) |
| Wasserpumpe | Bewässerung (ein/aus) | Pin 4 (via MOSFET) |
| 12 V Lüfter | Luftzirkulation (PWM) | Pin 5 (PWM) |
PCB & Fertigung
Die platinenförmige PCB (Blatt-Design) wurde bei JLCPCB geordert: Gerber hochladen, Parameter wählen (1,6 mm, grün, 5 Stk.), 2 $ + Versand, Lieferung in 3 Tagen. Alle Bauteile sind beschriftet, Lötfehler nahezu ausgeschlossen. Beide Seiten bestückbar.
Montage
- Arduino Nano & Header auf PCB löten → Testsketch für Spannung & I2C.
- Sensoren & Aktoren gemäß Aufdruck bestücken.
- ESP-01 / HC-05 in Steckplatz einsetzen.
- 12 V Netzteil anschließen (Pumpe, Lüfter), 5 V Regler versorgt Arduino & Logik.
- Lasergeschnittene MDF-Platte (DXF-Datei) als Halterung für PCB & Pflanze.
Android-App (Bluetooth)
Die App verbindet sich per Bluetooth (HC-05/06) mit dem Arduino. Manuell: Lüfter, Licht, Pumpe ein/aus. Automatisch: Lichtnachführung per BH1750, Bewässerung bei Trockenheit, Lüfter bei >30 °C. Sensorwerte per „Get Data“ abrufbar.
Arduino-Code (Hauptlogik)
/***********************************************************************************************************
* Autor: BELKHIR Mohamed | MEGA DAS | BSD 2-Clause License | 20/11/2017
***********************************************************************************************************/
#include "DHT.h"
#include
#include
// Pins
const int Pump = 4;
const int Fan = 5; // PWM
const int Light = 6; // PWM
const int TempHum = 7; // DHT11
const int Moisture = 8; // Digital (nicht verwendet, analog über A0)
const int TestLED = 9;
const int Brightness = 12; // BH1750 Interrupt? (hier ungenutzt)
const int analogMoisture = A0;
#define DHTTYPE DHT11
DHT dht(TempHum, DHTTYPE);
BH1750 lightMeter;
char Data = 'x';
String cmd = "";
int flagModeAuto = 0;
int sprayCMD = 300; // Schwellwert Bodenfeuchte (analog 0-1023)
int LightCMD = 500; // Schwellwert Licht (Lux)
int lightLevelPlus = 0;
float temperature = 0, humidity = 0;
uint16_t lux = 0;
void setup() {
Wire.begin();
dht.begin();
lightMeter.begin();
Serial.begin(9600);
Serial.setTimeout(100);
pinMode(Pump, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(Moisture, INPUT);
pinMode(TestLED, INPUT);
delay(1000);
digitalWrite(Pump, LOW);
digitalWrite(Fan, LOW);
digitalWrite(Light, LOW);
}
void loop() {
// Bluetooth-Befehle lesen
while (Serial.available()) {
delay(10);
Data = Serial.read();
cmd += Data;
}
// Befehle verarbeiten
if (cmd == "dt") Serial.print(humidity); // Feuchte senden
if (cmd == "dh") Serial.print(lux); // Licht senden
if (cmd == "db") Serial.print(temperature); // Temp senden
if (cmd == "o") flagModeAuto = 1; // Auto an
if (cmd == "m") flagModeAuto = 0; // Auto aus
if (flagModeAuto) {
autoPump();
lightBrightness();
autoFan();
} else {
// Manuelle Steuerung
if (cmd == "f") analogWrite(Fan, 255); // Lüfter an
if (cmd == "x") analogWrite(Fan, 0); // Lüfter aus
if (cmd == "l") analogWrite(Light, 255); // Licht an
if (cmd == "k") analogWrite(Light, 0); // Licht aus
if (cmd == "w") analogWrite(Pump, 255); // Pumpe an
if (cmd == "y") analogWrite(Pump, 0); // Pumpe aus
}
cmd = "";
// Sensoren zyklisch lesen
lux = lightMeter.readLightLevel();
temperature = dht.readTemperature();
humidity = dht.readHumidity();
}
// Automatische Bewässerung
void autoPump() {
if (analogRead(analogMoisture) < sprayCMD) {
digitalWrite(Pump, HIGH);
delay(1000);
digitalWrite(Pump, LOW);
delay(1000);
}
}
// Automatische Lichtnachführung
void lightBrightness() {
while (lux < LightCMD) {
analogWrite(Light, lightLevelPlus);
delay(100);
lightLevelPlus++;
lux = lightMeter.readLightLevel();
}
}
// Automatische Lüftung
void autoFan() {
if (temperature > 30) analogWrite(Fan, 255);
else analogWrite(Fan, 0);
}
Wichtige Hinweise
- Bodenfeuchtesensor: Widerstandsbasierte Sensoren korrodieren schnell. Kapazitive Sensoren (z. B. v1.2) sind langlebiger.
- Die Schwellwerte
sprayCMD(Bodenfeuchte) undLightCMD(Lux) müssen vor Ort kalibriert werden. - Für WiFi (ESP-01) muss die serielle Kommunikation angepasst werden (AT-Befehle). Der Code oben nutzt Bluetooth-Serial.
- Alle 12-V-Lasten (Pumpe, Lüfter) benötigen einen eigenen MOSFET-Treiber auf der PCB (z. B. IRLZ44N).
Herstellungsprozess
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
- Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
- Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
- Intelligenter kabelloser Lichtschalter-Controller: Arduino-basierter Fernschalter-Manipulator
- Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
- Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
- Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
- Arduino-Sonnenblume: Elektronischer Sonnen-Tracker selbst bauen
- Smartes Indoor-Navigations-Roboter-Kit für Arduino-Projekte