Strauchie-Bot Pflanzenüberwachung per E-Mail mit Arduino

Nicht jeder besitzt einen grünen Daumen. Deshalb müssen Pflanzen aber nicht zwangsläufig vergammeln. Mit einem Arduino Microcontroller Board, einem Ethernet Shield, ein paar Sensoren und einem Sketch baut man sich eine effektive Pflanzenüberwachung zusammen, die per E-Mail warnt, wenn der Pflanze etwas fehlt.

Vorgeschichte

Vor ein paar Jahren hatte ich mir den Parrot Flower Power gekauft, um Vitaldaten einer meiner Lieblingspflanzen zu erhalten und sie vor einem frühen Tod zu schützen. Der Flower Power gab jedoch nach rund eineinhalb Jahren den Geist auf: Der Bodenfeuchtigkeitssensor war defekt. Außerdem arbeitet der Flower Power mit dem Nahbereichsfunk Bluetooth. Um Infos zum Zustand der Pflanze auf einem Smartphone zu erhalten, muss sich das Mobiltelefon in der Nähe des Flower Power befinden. Eine Fernüberwachung ist nicht möglich. Ein neuer Flower Power kam für mich deshalb nicht in Frage. Glücklicherweise konnte ich ihn zurückschicken und bekam von Amazon den Kaufpreis erstattet.

Das Geld investierte ich in einen Arduino Mega 2560, ein Ethernet Shield und Sensoren für Luft- und Bodentemperatur, Luft- und Bodenfeuchtigkeit sowie Helligkeit, um ein eigenes Pflanzenüberwachungssystem mit dem Namen „Strauchie-Bot“ zu bauen. Strauchie-Bot soll sicherstellen, dass sich die Pflanze per E-Mail meldet, sobald sie keine optimalen Bedingungen mehr hat und beispielsweise Wasser oder mehr Licht benötigt. Außerdem soll morgens und abends eine Zusammenfassung zum Status mit aktuellen Messwerten gesendet werden.

Basis und austauschbare Sensoreinheit

Kernstück des Strauchie-Bots ist ein Arduino Mega mit ATmega 2560 Microcontroller. Diese erweiterte Variante des Arduino Uno verfügt mit 54 digitalen und 16 analogen Ein-und Ausgängen über deutlich mehr In- und Output-Ports als das kleine Schwestermodell. Wichtiger ist jedoch der üppigere, 256 KB große Flash-Speicher für Programme und Variablen. Der größere Programmspeicher kann deutlich umfangreichere Sketches aufnehmen. Zum Vergleich: Der Arduino Uno verfügt lediglich über 32 KB Speicher. Der größere Speicher ist notwendig, da die Abfrage und Auswertung der sensorischen Daten, die textliche Aufbereitung sowie das Mailen den Sketch stark aufblähen und reichlich Variablen benötigt werden.

Strauchie-Bot Basis geöffnet seitlich

Zum Herstellen einer Internet-Verbindung, benötigt man ein Ethernet Shield. Möchte man lieber eine drahtlose WLAN-Verbindung ins Internet herstellen, dann muss man sich ein Wi-Fi Shield anschaffen. Das ist allerdings etwa sechsmal so teurer. Alternativ greift man auf ein preiswertes WLAN-Modul wie beispielsweise ein ESP8266 zurück. Im Projekt kommt ein ein Ethernet Shield zum Einsatz, das über den SPI-Bus kommuniziert und die entsprechenden Anschlüsse blockiert. Die übrigen Sensoren und Komponenten benutzen analoge und digitale Ports sowie den I2C-Bus. Der serielle I2C-Datenbus kann mit mehreren Slaves gleichzeitig kommunizieren. Doch dazu später mehr.

Strauchie-Bot Anschlüsse

Arduino Mega und Ethernet Shield verschwinden in einem Kunststoffgehäuse mit Aussparungen für den Netzteilanschluss, Ethernet-Port und die USB-Buchse zum Programmieren. Zum Anschluss der Sensoreinheit dient eine 12-polige SUB-D-Buchse, die intern mit den passenden Ports des Arduinos verdrahtet ist. So kann die komplette Sensoreinheit sehr einfach angeschlossen und ausgetauscht werden, ohne umständlich Rumlöten zu müssen.

Strauchie-Bot Anschluss Sensoreinheit

Insgesamt habe ich zwei Sensoreinheiten gebaut. Sie sind jeweils in einem kleinen Kunststoffgehäuse untergebracht und unterscheiden sich durch ihre LED-Statusanzeige und den Bodenfeuchtigkeitssensor. Das 12-adrige abgeschirmte Kabel ist mit einer Zugentlastung mit Knickschutz aus dem Gehäuse geführt, um Kabelbruch zu vermeiden.

Strauchie-Bot Knickschutz Sensoreinheit

LED-Ampel-Anzeige

In der ersten Sensoreinheit kommen drei LEDs in Ampelform als Statusanzeige zum Einsatz. Sie signalisieren, ob die Pflanzenbedingungen optimal sind (Grün), sich im kritischen Bereich befinden (Gelb) oder mindestens ein Parameter von den Minimalanforderungen für die Pflanze abweicht (Rot). Die zweite Sensoreinheit enthält eine einzelne RGB-LED, die je nach Zustand die entsprechende Farbe annimmt. Das bietet mehrere Vorteile: Denn die RGB-LED kann mehrere Farben darstellen und so weitere Zustände beispielsweise beim Hochfahren des Sensors oder bei einem Fehler der Internet-Verbindung anzeigen. Außerdem ist die einzelne LED weit oben im Gehäuse untergebracht und damit bei Blumentöpfen mit hohem Rand gut erkennbar. Im Gegensatz dazu sind die LEDs bei der Ampelform untereinander angeordnet, sodass die untere grüne LED unter Umständen schlechter zu sehen ist.

Strauchie-Bot Sensoreinheiten

Zu beachten ist, dass die drei LEDs mit verschiedenen Spannungen arbeiten. Zum direkten Anschluss an den Arduino Mega, dessen digitale Ausgänge +5 Volt liefern, benötigt man entsprechende Vorwiderstände. Das gilt auch für die drei Farbkanäle der RGB-LED. Die Datenblätter der LEDs geben Auskunft über die Arbeitsspannung und Stromaufnahme, sodass man die Widerstandswerte einfach berechnen kann. Der Anschluss der RGB-LED erfolgt über drei Anoden an je einem digitalen PWM-Ausgang und über eine gemeinsame Kathode an Masse. Durch Pulsweitenmodulation wird dem jeweiligen RGB-Kanal ein Helligkeitswert zugewiesen, um die gewünschte Farbmischung zu erzielen.

Strauchie-Bot Anzeige-LED

Bodenfeuchtigkeit und -temperatur

Die erste Sensoreinheit besitzt einen einfachen Bodenfeuchtigkeitssensor, der im Wesentlichen aus einer Forke mit zwei Elektroden besteht, die man in die Erde steckt. Solche fertigen Sensoren kosten nur wenig mehr als zwei Euro. An ihnen ist eine Spannung angelegt, die je nach Wassergehalt im Boden höher oder niedriger ausfällt. Der Arduino Mega wertet die Spannung über einen analogen Eingang aus. Im Sketch wird die Spannung in einen prozentualen Bodenfeuchtigkeitswert überführt. Diese Art Feuchtigkeitssensor hat aber einen Haken: Die Spannung zwischen den beiden Elektroden führt im Boden zur Elektrolyse, sodass sich die Metallbeschichtung zersetzt und mit der Zeit zu fehlerhaften Messwerten führt.

Strauchie-Bot zersetzte Elektroden

Um das zu vermeiden, steckt in der verbesserten zweiten Sensoreinheit ein kapazitiv arbeitender Bodenfeuchtigkeitssensor mit ATtiny441 Mikroprozessor. Solche kapazitiven Sensoren sind schon für knapp neun Euro erhältlich. Andere Alternativen, wie beispielsweise die Bodenfeuchtigkeit über die Verdunstungsfeuchtigkeit mit einem preiswerten Luftfeuchtesensor in einem Röhrchen zu messen, lohnen deshalb nicht.

Strauchie-Bot Vergleich Bodenfeuchtigkeitssensoren

Der kapazitiv arbeitende Sensor besitzt ebenfalls Mess-Elektroden und muss in den Boden gesteckt werden. Er arbeitet allerdings berührungslos und die mit Lack überzogenen Elektroden kommen nicht in Kontakt mit der umgebenden Erde. Zur Elektrolyse kommt es deshalb nicht, die Elektroden bleiben unbeschädigt und der Sensor liefert verlässliche Daten und hält länger.

Strauchie-Bot Elektroden Bodenfeuchtigkeitssensor

Das Prinzip der kapazitiven Bodenfeuchtigkeitsmessung basiert auf der Veränderung der Dielektrizitätszahl in Abhängigkeit des leitenden Materials, das die Elektroden umgibt. Dabei spielt in die Karten, dass die Dielektrizitätszahl von Wasser im Vergleich zu trockener Erde mit 80 zu 3,9 deutlich höher ausfällt. Der Feuchtigkeitsgehalt kann deshalb recht genau bestimmt werden. Die Kapazitätsänderung misst ein Oszillator. Die Frequenz des Oszillators gibt Kapazitätsänderungen fein abgestuft wieder, optimal also für eine genaue Bestimmung der Bodenfeuchtigkeit.

Strauchie-Bot Detail Elektronik Bodenfeuchtigkeitssensor

Das Auslesen der Daten mit dem Arduino erfolgt über den I2C-Bus des Bodenfeuchte-Sensors. Zum Anschluss an den Arduino werden lediglich vier Leitungen benötigt: +5 Volt, Masse, SDA und SCL. Für den Arduino-Sketch benötigt man die Funktionsbibliothek I2CSensor_Std, die einfache Funktionen enthält, um Bodenfeuchtigkeit in Prozent und zusätzlich die Bodentemperatur in Grad Celsius zu bestimmen, denn der verwendete Sensor enthält zusätzlich ein Temperaturmessmodul. Ein THT-Widerstand als Thermistor misst knapp unterhalb der Bodenoberfläche die Temperatur.

Strauchie-Bot Bodentemperatursensor

Um möglichst genaue Werte zu erhalten, muss man beide Module gegebenenfalls kalibrieren. Das sollte mit einem geeichten Bodenfeuchtigkeitsmessgerät und einem Thermometer geschehen. Im Projekt war die Abweichung allerdings so gering, dass keine Anpassung notwendig war. Ansonsten muss man im Sketch entsprechende Differenzfaktoren einbauen.

Luftfeuchtigkeit und -temperatur

Die Lufttemperatur und Luftfeuchtigkeit spielen für das Wohlfühlklima einer Pflanze eine entscheidende Rolle. Beide lassen sich sehr einfach mit dem Sensor DHT22/AM2302 erfassen, der schon für weniger als drei Euro zu haben ist. Um ihn korrekt auslesen zu können, ist nur noch ein 10 k Widerstand nötig. Für den Arduino existiert mit der Funktionsbibliothek DHT eine einfache Option zum Auslesen der Sensordaten. Die werden seriell über eine Datenleitung an einen digitalen Port des Arduino übertragen. Der DHT22/AM2302 arbeitet neben einer Spannung von 3,3 auch mit der im gesamten Projekt genutzten Spannung von 5 Volt. Die Toleranz beträgt bei der Luftfeuchtigkeit etwa +/- 2 %, bei der Temperatur muss man mit einer Abweichung von +/- 0,5 °C rechnen. Zum Kalibrieren benutzt man entsprechende Messgeräte und baut passende Differenzfaktoren im Sketch ein.

Strauchie-Bot Luftfeuchtigkeit- und Lufttemperatursensor

Helligkeit

Zur Helligkeitsmessung setzt man einen Fotowiderstand mit 50 kΩ zusammen mit einem etwa gleich großen Widerstand in einer Spannungsteiler-Schaltung ein. Die daran abfallende Spannung ändert sich je nach Lichteinfall. Die Spannungsänderung wird über einen analogen Eingang (A1) des Arduino Mega abgefragt. Die Kalibrierung des Sensors erfolgt mit einem Lux-Meter. Die analogen Werte müssen dabei umgerechnet werden, um halbwegs genaue Ergebnisse in Lux zu erhalten. Die Helligkeit wertet Strauchie-Bot für einen kompletten Tag-Nacht Zyklus über 24 Stunden aus. So kann festgestellt werden, ob die Pflanze im Tagesdurchschnitt genügend Licht bekommen hat.

Strauchie-Bot Lichtsensor

Ermittlung der Messwerte und Abstimmung auf die Pflanze

Um die genaue Uhrzeit für ein regelmäßiges Abfragen der Messwerte zu erhalten, besitzt Strauchie-Bot ein RTC-Modul DS3231 mit Pufferbatterie. Die Uhr geht allerdings recht ungenau, sodass täglich ein Abgleich über das Internet mit einem Zeit-Server erfolgt. Das DS3231 hängt ebenfalls am I2C-Bus. Damit es zu keinen Kollisionen mit den Daten des Bodenfeuchtigkeitssensors am gleichen Bus kommt, müssen beide Module unterschiedlich adressiert sein. Die ebenfalls notwendigen Pull-Up-Widerstände bringen Uhrenmodul und Bodenfeuchtigkeitssensor bereits mit.

Strauchie-Bot RTC mit Pufferbatterie

Der Arduino-Sketch fragt im 15-Minuten-Takt die Messwerte ab und vergleicht sie mit den minimalen und maximalen Wohlfühlwerten der Pflanze. Im Sketch sind sie als Konstanten für Boden- und Lufttemperatur, Boden- und Luftfeuchtigkeit sowie Helligkeit als Referenz hinterlegt. Befinden sich die Messerwerte außerhalb dieser Wohlfühlwerte, dann ändert sich die LED-Anzeige. Außerdem wird ein passender Text zusammengestellt, der einen Hinweis auf die Abweichung und die notwendige Aktion wie beispielsweise Gießen enthält. Zusätzlich sind alle Messwerte aufgelistet. Morgens und abends erstellt Strauchie-Bot automatisch eine Zusammenfassung mit dem aktuellen Pflanzenstatus.

Strauchie-Bot Sensoreinheit geöffnet

E-Mail-Benachrichtigungen via SMTP2GO

Die Pflanze soll mitteilen können, wenn ihr etwas fehlt. Das funktioniert am einfachsten per Push-E-Mail an ein Mobiltelefon. Damit das klappt, ist Strauchie-Bot über ein Ethernet-Shield mit dem Internet verbunden. Das Shield benutzt den SPI-Bus (MOSI (51), MISO (50) und SCK (52)) zur seriellen Kommunikation mit dem Arduino, blockiert ansonsten aber keine weiteren Anschlüsse.

Strauchie-Bot Basis geoeffnet

Um möglichst einfach und ohne große Ressourcen E-Mails versenden zu können, kommt der SMTP-Dienst SMTP2GO zum Einsatz. Der Dienst ist in der Basisvariante kostenfrei. Bis zu 25 E-Mails pro Stunde und 1000 E-Mails pro Monat können damit versendet werden. Das reicht problemlos für Strauchie-Bot aus. Ausfälle gab es im Betrieb keine. Im Schnitt versendet Strauchie-Bot nicht mehr als vier E-Mails pro Tag.

Strauchie-Bot E-Mail Benachrichtigung

Im Sketch müssen lediglich die verschlüsselten Zugangsdaten zum Dienst und die Empfänger- und Absender-E-Mail-Adresse angeben werden. Die Verschlüsselung der Zugangsdaten erfolgt über Base64 Encode. E-Mail-Betreff und -Inhalt generiert Strauchie-Bot selbst aus den Messergebnissen und den ermittelten Bedürfnissen der Pflanze.

Arduino-Sketch

Den Sketch überträgt man mit der Arduino-Software via USB auf den Arduino Mega 2560. Der Sketch ist noch nicht final und wird ständig verbessert. Wer mitarbeiten möchte, ist herzlich dazu eingeladen, ihn zu optimieren.

Bauteilliste Strauchie-Bot

Bauteile für Strauchie-Bot gibt es günstig im China-Handel wie beispielsweise MiniIn the Box. Aber Vorsicht: Überschreitet die Bestellung 22 Euro, dann sind Einfuhrumsatzsteuer und Zollgebühren fällig.

  • 1 x Arduino Mega 2560
  • 1 x Arduino Ethernet Shield
  • 1 x RTC-Modul DS3231
  • 1 x RGB-LED 5 mm
  • 1 x DHT22/AM2302
  • 1 x I2C FT-Sensor
  • 1 x Fotowiderstand 50 kΩ
  • 1 x Widerstand 49,9 kΩ
  • 1 x Widerstand 10 kΩ
  • 2 x Widerstand 200 Ω
  • 1 x Widerstand 100 Ω
  • 1 x Gehäuse für Basis
  • 1 x Gehäuse für Sensoreinheit
  • 1 x SUB-D Stecker 12-polig
  • 1 x SUB-D Buchse 12-polig
  • 1 x Zugentlastung
  • 1 x Kabel 12-polig
  • Kabel, Steckerleisten, Schrumpfschlauch, Platinenhalter, Heißkleber

Fazit und Ausblick auf weitere Funktionen

Strauchie-Bot überwacht bereits seit mehr als einem Jahr fehlerfrei meinen selbst gezogenen Ficus, der durch die kontinuierliche Überwachung optimale Bedingungen für sein Wachstum erhält. Die Kosten halten sich mit etwa 50 Euro in Grenzen. Zwei Erweiterungen sind in Arbeit: So soll die Pflanze zukünftig je nach Zustand, Tageszeit und andere Umstände selbst auf lustige Weise twittern. Das funktioniert bereits im Ansatz, hat aber noch deutliches Verbesserungspotenzial.

Strauchie-Bot Warnlampe rot

Die zweite Erweiterung betrifft das Gießen. Es ist zwar hilfreich, dass Strauchie-Bot darauf hinweist, dass die Pflanze gegossen werden muss, aber wenn man den Hinweis beispielsweise im Urlaub erhält und nicht zu Hause ist, kann man doch nichts machen. Deshalb ist eine automatische Bewässerungsfunktion im Aufbau. Dabei steht im Vordergrund, dass die Pflanze optimal mit Wasser versorgt wird, ohne dabei die Wohnung zu überschwemmen.

Strauchie-Bot Basis angeschlossen