Auf irgendeinem CCC Event bin ich über eine lustige Projektidee einer jammernden Pflanze gestoßen. Die hat mir und auch meiner größeren Tochter so gut gefallen, dass wir sie zusammen nachbauen wollten.

Die Idee
Ein kleines Gerät misst den Feuchtigkeitsgehalt der Blumenerde. Ist der Wert zu trocken, spielt ein MP3-Player eine Audiodatei ab. Ein Bewegungsmelder sorgt dafür, dass die Pflanze sich nur beschwert, wenn auch jemand da ist. Ist die Erde trocken und es wird eine Bewegung erkannt, jammert die Pflanze los.
Die Bauteile
Da es das erste Projekt dieser Art für meine Tochter ist, sollte es übersichtlich und einfach bleiben. Ein Arduino Nano (fast die gleichen Möglichkeiten wie der UNO, aber deutlich kleiner), ein DFPlayer-Modul als MP3-Player, ein HC-SR312 Bewegungsmelder und ein kapazitiver Feuchtigkeitssensor.
Aufbau und Entwicklung
Gestartet haben wir mit einem Breadboard, um die Verschaltung Modul für Modul zu setzen und die Ansteuerung mit dem Arduino anhand der Beispiele zu testen. Beim DFPlayer haben wir per TTS Texte in MP3s umgewandelt und auf der SD-Karte im Ordner mp3 gespeichert. Diese werden zufällig abgespielt, wenn die Erde zu trocken ist und eine Bewegung erkannt wurde.
Als die Verschaltung zusammen mit dem Code funktionierte, haben wir mit KiCad eine Platine designt und fertigen lassen. So hat man weniger Kabelsalat und alles ist platzsparend aufgehoben.

Das Gehäuse haben wir in FreeCAD designt und mit dem 3D-Drucker gedruckt. Die Teile sind mit einem Tropfen Sekundenkleber fixiert.

Im Einsatz
Das Teil steckt in der Blume und meldet sich zuverlässig, wenn es Zeit zum Gießen ist. Da es von den MP3s auf dem Player abhängt, was die Pflanze „sagt“, sind lustige Reaktionen garantiert. Die Pflanze kann dich im Vorbeigehen voll jammern, um Wasser betteln oder anfangen zu schimpfen.
Meine Tochter wird nach dem Projekt nicht alles alleine wiederholen können, aber die einzelnen Schritte sind klar. Wie so ein Gerät entsteht, was nötig ist. Schnell findet man Verbesserungsmöglichkeiten: Den Feuchtigkeitssensor von der Elektronik trennen, mit einem NodeMCU ESP8266 WLAN-Statusdaten senden, oder mit Li-Ion-Akkus und einem BMS vom Stromnetz unabhängig werden.
Quellcode
Für den DFPlayer wird die DFRobotDFPlayerMini Library benötigt (lokal unter ~/Arduino/libraries ablegen).
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
/* --- Pins ---------------------------------------------------- */
const uint8_t PIN_DF_RX = 10;
const uint8_t PIN_DF_TX = 11;
const uint8_t PIN_PIR = 7;
const uint8_t PIN_SENSOR = A0;
/* --- Parameter ----------------------------------------------- */
const int schwellwert = 380;
const unsigned long PLAY_COOLDOWN_MS = 15000;
const uint8_t TRACK_JAMMERN = 1;
/* --- Objekte ------------------------------------------------- */
SoftwareSerial dfSerial(PIN_DF_RX, PIN_DF_TX);
DFRobotDFPlayerMini dfPlayer;
/* --- Laufzeitstatus ------------------------------------------ */
unsigned long lastPlay = 0;
/* ------------------------------------------------------------- */
void setup() {
pinMode(PIN_PIR, INPUT);
Serial.begin(115200);
dfSerial.begin(9600);
Serial.println(F("Initializing DFPlayer ..."));
if (!dfPlayer.begin(dfSerial)) {
Serial.println(F("DFPlayer init failed"));
while (true);
}
dfPlayer.volume(20);
dfPlayer.outputDevice(DFPLAYER_DEVICE_SD);
dfPlayer.EQ(DFPLAYER_EQ_NORMAL);
dfPlayer.setTimeOut(500);
Serial.println(F("DFPlayer Mini online"));
}
/* ------------------------------------------------------------- */
void loop() {
/* DFPlayer Events immer zuerst abholen */
if (dfPlayer.available()) {
handleDFPlayerEvent(dfPlayer.readType(), dfPlayer.read());
}
int messwert = analogRead(PIN_SENSOR);
bool bewegung = digitalRead(PIN_PIR) == HIGH;
bool trocken = messwert > schwellwert;
unsigned long now = millis();
if (trocken && bewegung) {
if (now - lastPlay >= PLAY_COOLDOWN_MS) {
Serial.println(F("Bewegung + Erde trocken -> spiele Sound"));
dfPlayer.play(TRACK_JAMMERN);
lastPlay = now;
}
} else {
logStatus(trocken, bewegung, messwert);
}
delay(100); // leichte Entlastung – kein Logik-Delay
}
/* ------------------------------------------------------------- */
void logStatus(bool trocken, bool bewegung, int messwert) {
if (!bewegung && trocken) {
Serial.print(F("Keine Bewegung, Erde trocken: "));
} else if (bewegung && !trocken) {
Serial.print(F("Bewegung, Erde ok: "));
} else if (!bewegung && !trocken) {
Serial.print(F("Keine Bewegung, Erde ok: "));
}
Serial.println(messwert);
}
/* ------------------------------------------------------------- */
void handleDFPlayerEvent(uint8_t type, int value) {
if (type == DFPlayerPlayFinished) {
Serial.print(F("Track "));
Serial.print(value);
Serial.println(F(" beendet"));
}
}
Downloads
3D-Druck: STL Gehäuse | STL Deckel
Platine: Gerber-Dateien
Einkaufsliste
- Bewegungsmelder HC-SR312
- Arduino Nano
- DFPlayer MP3 Player inkl. Lautsprecher
- Bodenfeuchtesensor
- Widerstand 1 K Ohm
- microSDHC Speicherkarte
- DC-Buchse
- Netzteil
- Sekundenkleber
Optional: Breadboard mit Kabeln, Multimeter, Lötkolben
Fragen? Einfach melden.








Sehr schönes Projekt!
Ich gebe die Hoffnung nicht auf sowas mit meinen Töchtern auch irgendwann man machen zu dürfen und nehme Dich dann gerne als Vorbild 😉