Der Sommer ist da, die Sonne brennt. Schon im Frühjahr gab es ungewöhnlich frühe Hitzewellen und im Juli über 35 ° C in weiten Teilen Deutschlands. In einzelnen Gemeinden musste sogar die Nutzung des Trinkwassers eingeschränkt werden. Was können wir also tun, damit zum Beispiel unsere Bienen, für die wir uns als Unternehmen besonders einsetzen, auch in dieser Zeit noch Nahrung und nicht nur verdorrte Steppe vorfinden? Hier eine Idee, die mit ein wenig Programmierwissen kostengünstig umzusetzen ist und gerne nachgeahmt werden darf!
Um Trinkwasser zu sparen, können wir Regenwasser in einem IBC (Intermediate Bulk Container) sammeln und zum Bewässern des Gartens nutzen. Dieser fasst in der Regel 1000 Liter und ist in gebrauchtem und gereinigtem Zustand vergleichsweise günstig zu beschaffen.
Das Regenwasser lässt sich mit einem Regendieb vom Fallrohr abzweigen und in den IBC leiten; bei kleineren Dachflächen kann der gesamte Regen auch direkt aus dem Fallrohr in den IBC geschleust werden.
Nun wollen wir aber auch wissen, wie es um den Wasserstand in unserem IBC bestellt ist. Kann ich heute noch wässern oder muss ich gar den Zulauf vom Fallrohr abdrehen, damit der Container nicht überläuft? Es muss also ein Wasserstandssensor her.
Ein Sensor für den Wasserstand
Unser Wasserstandssensor basiert auf einem Ultraschallsensor, den wir im IBC oberhalb des Wasserstands anbringen. Dieser Ultraschallsensor sendet einen für uns unhörbaren Ton senkrecht nach unten in den Container aus, der an der Wasserfläche (oder dem Boden des IBC) reflektiert wird. Dieses Echo fängt der Ultraschallsensor mit einem Mikrofon wieder ein. Er misst dabei die Laufzeit, die der Ton benötigt, um vom Lautsprecher als Echo zurück zum Mikrofon zu kommen. Da wir die Schallgeschwindigkeit kennen (ca. 340 m/s), können wir auch leicht ausrechnen, welche Strecke der Ton in dieser Zeit zurückgelegt hat.
Die Basis unseres Sensors bildet ein Ultraschallsensor vom Typ HC-SR04, der für weniger als 5 EUR zu bekommen ist. Ansteuern und Auslesen können wir den Sensor mit einem ESP8266 Microcontroller-Board, das zwischen 5 und 10 EUR kostet. Ein solches Board vom Typ NodeMCU oder D1 Mini bringt einen Micro-USB-Port mit, über den wir das Board ganz einfach mit Strom versorgen und auch programmieren können. Außerdem besitzt es ein WLAN-Modul, sodass wir unseren Sensor später per WLAN abfragen können.
Zunächst müssen wir den Sensor auf geeignete Weise mit dem Microcontroller verbinden. Wie das funktioniert, zeigt folgende Grafik:
Wenn wir die Schaltung fertig haben, geht es ans Programmieren. Zur Programmierung nutzen wir die verbreitete Arduino IDE sowie die Programmiersprache C++ (hier geht’s zum Code).
Zunächst müssen wir die beiden Pins definieren, über die wir mit dem Ultraschallsensor kommunizieren. Das ist einerseits der TRIGGER_PIN, über den wir den Ton senden können und der an GPIO 12 angeschlossen ist. Außerdem der ECHO_PIN an GPIO 14, über den der Sensor signalisiert, wenn er das Echo empfangen hat. Der TRIGGER_PIN wird als Output, der ECHO_PIN als Input konfiguriert.
In der Methode distanceInMillimeters() setzen wir den TRIGGER_PIN kurz auf low, dann für 10 µs auf high und anschließend wieder auf low. Dieser klare, kurze Impuls auf high startet die Messung. Der Sensor meldet dann durch einen „high“-Impuls am ECHO_PIN, wenn er das Echo empfangen hat. Die Methode pulseIn wartet und misst die Zeit in µs, bis der Impuls eintrifft. Aus der gemessenen Zeit können wir nun einfach die Entfernung bis zur Wasseroberfläche berechnen: 340 m/s entsprechen 0,34 mm/µs und weil der Ton hin und auch wieder zurück muss, halbieren wir die Distanz noch.
Nun kann es immer einmal passieren, dass ein äußerer Effekt unsere Messung beeinflusst und der Sensor einen falschen Wert liefert. Daher rufen wir in der Methode messen() diese Messung 11-mal nacheinander auf und sortieren die Ergebnisse in einem Array. Das Element 5 aus diesem Array ist schließlich der Median; Ausreißer nach oben oder unten können wir so ignorieren.
Die Hauptmethode loop() ist nun sehr kurz: Wir rufen die messen()-Methode auf und geben das Ergebnis über den Serial-Monitor der Arduino IDE aus. Weil die reine Distanz noch nicht zu aussagekräftig ist, rechnen wir die ermittelte Distanz in den Füllstand um und geben diesen aus. Anschließend warten wir 5 Sekunden und dann beginnt das Spiel wieder von vorn.
Um den richtigen Füllstand zu berechnen, muss unser Sensor noch kalibriert werden. Dazu müssen wir einmal die Distanz messen, wenn der IBC leer ist und den Wert bei min_distance eintragen. Genauso messen wir die Distanz bei vollem IBC und tragen den Wert bei max_distance ein.
Diese Programmierung ist zunächst nur ein simpler Startpunkt, den man in verschiedene Richtungen erweitern kann:
- Nutzung des WLANs für die Abfrage der Daten ohne Kabel
- Ein kleiner Webserver, der die Daten hübsch als Website aufbereitet, sodass sie einfach mit einem Browser abgefragt werden können
- Nutzung des MQTT-Protokolls, um Messungen aktiv an einen anderen Server zu senden
Auch die Schaltung kann man noch erweitern: Der ESP8266 hat noch einige freie GPIO-Pins, an denen man weitere Sensoren anschließen kann. Beispielsweise könnte man noch Sensoren zur Messung von Temperatur, Luftfeuchtigkeit oder Luftdruck ergänzen.
Auch wenn es nur ein kleiner Beitrag ist: Bei den zeitweise heftigen Regenfällen, die zwischen den trockenen, heißen Tagen auftreten, ist es gut, wenn zumindest ein Teil des Wassers nicht direkt vom Dach in die Kanalisation geleitet, sondern im Container zurückgehalten wird und später im Garten versickern kann.
Unser selbst gebauter Sensor zeigt uns immer aktuell, wie viel Wasser noch im Container vorhanden ist. Wenn wir uns merken, wie der Wasserstand nach dem gestrigen Gießen war, können wir auch leicht die Frage beantworten, ob und wie viel es heute bereits geregnet hat und ob wir wieder gießen müssen. So bekommen unsere Pflanzen ausreichend Wasser und unsere Bienen auch im Sommer genug Nahrung, um leckeren Honig zu produzieren.
Schon gewusst? Bienen liegen uns ganz besonders am Herzen. Deshalb hat adesso insurance solutions ein eigenes Bienenvolk und unterstützt das Projekt 2028 – mit dem Ziel, die Bienenpopulation innerhalb der nächsten 10 Jahre um 10 Prozent wachsen zu lassen. Und kleine Beiträge wie diese helfen dabei, dieses Ziel zu erreichen!
Sie haben Fragen oder Anmerkungen? Dann hinterlassen Sie uns gerne einen Kommentar.