Das Programm zur Steuerung des Bewässerungssystems besteht aus mehreren Teilprogrammen, deren Funktion im Folgenden kurz erläutert wird. Der vollständige und kommentierte Code ist in der beiliegenden Datei programm-gesamt.ino ersichtlich.
Auslesen der Sensormesswerte
Zum Auslesen der Sensormesswerte und zur Berechnung der Bodenfeuchtigkeit (entsprechend obiger Formel) wurde die Funktion measure geschrieben. Um den Energiebedarf der Sensoren zu senken und um Korrosionsprozessen an den Sensorelektroden entgegenzuwirken, wird die Spannungsversorgung über den jeweils festgelegten digitalen Ausgang des Arduinos nur für die Dauer der Messung zugeschaltet. Außerdem werden die Messungen in einem Intervall von 1 min durchgeführt.
Ansteuerung der Magnetventile
Die Ansteuerung der Magnetventile erfolgt auf der Basis der aus den Sensormesswerten berechneten Werte für die Bodenfeuchtigkeit. Sobald die Bodenfeuchtigkeit an einem Standort unterschritten wird (z.B. 30 %) und die festgelegte Zeitspanne seit der letzten Bewässerung (z.B. 5 h) überschritten wird, wird der entsprechende digitale Ausgang geschaltet.
Ausgabe der Messwerte auf das LCD-Display
Über das LCD-Display werden die einzelnen Messwerte in Form der berechneten Bodenfeuchtigkeit unter Verwendung der Bibliothek LiquidCrystal.h ausgegeben. Der SELECT-Button wird dabei als ON/OFF-Schalter verwendet und die UP/DOWN-Buttons zur Auswahl der gewünschten Sensoren.
Datenübertragung mittels Mobilfunk und MQTT
Das Programm zur Übertragung der Sensordaten über Mobilfunk und MQTT wurde unter Verwendung der Bibliotheken Adafruit_FONA.h, Adafruit_MQTT.h und Adafruit_MQTT_FONA.h geschrieben. Hierbei wurden mehrere Feeds auf dem MQTT-Server (Adafruit.io) angelegt, um die Daten der einzelnen Sensoren empfangen zu können. Die Übertragung der Sensordaten wird wie die Messung in einem Intervall von 1 min durchgeführt.