Wie feucht ist denn der Boden?

Ein weiteres Kernelement dieses Projekts ist natürlich die automatische Bewässerung der Pflanzen. Dafür benötigen wir allerdings auch Sensoren, die überprüfen können, wie feucht das Substrat ist und hinten dran auch eine Auswertung, die bei Bedarf die Bewässerung startet. Zu diesem Zweck hab‘ ich vorab schonmal einen kapazitiven Bodenfeuchtigkeitssensor organisiert.

Was macht der Sensor also genau?

Der Sensor ist vom Prinzip her aufgebaut wie ein einfacher Kondensator – nur, dass hierbei als Dielektrikum das Pflanzsubstrat dient, welches bei höher Feuchtigkeit anders leitend wirkt, als bei niedriger Feuchtigkeit. Und entsprechend dieser Leitfähigkeit gibt der Sensor einen analogen Wert zurück, der sich mittels Controller auswerten lässt. Nachteil hierbei ist allerdings in Bezug auf den Raspberry Pi, dass dieser keine analogen Signale direkt verarbeiten kann (im Gegensatz zu einem Arduino). Demnach benötigen wir zur Auswertung noch eine Hilfsplatine. In unserem Fall habe ich mich zu Testzwecken erstmal für eine ADS1115-Platine (Analog-Digital-Umsetzer) entschieden. Dieses Erweiterungsmodul verfügt über 4 Analogeingänge und wertet diese aus. Anschließend wandelt die Platine den Wert in einen 16bit-Wert um, der wiederum vom Raspberry Pi verwendet werden kann.

Dem geneigten Leser fällt nun bestimmt auf, dass hier ein paar unbekannte Abkürzungen zu finden sind – so z.B. SCL oder SDA. Diese Anschlüsse stehen in Verbindung mit dem I²C-Bus, dem Inter-Integrated Circuit Bus. Dabei handelt es sich um einen seriellen Datenbus, der hauptsächlich Geräteintern zwischen einzelnen Bauteilen verwendet wird, so beispielsweise bei OLED-Displays. Hier wird der Bus verwendet, um die Daten vom ADS1115 auf den Raspberry Pi zu übertragen. Allerdings ist es notwendig hierzu auf dem Raspberry Pi die entsprechende Einstellung vorzunehmen, damit die GPIO-Pins 2 und 3 die Funktion der Busübertragung zugeordnet bekommen. Die Abkürzung SCL steht für Serial CLock (also den Bus-Takt, der vom Controller vorgegeben wird), die Abkürzung SDA dagegen für Serial DAta.

Schlussendlich bleibt in Gänze jetzt zu beachten, dass wir über das Programm nicht direkt auf den Sensor zugreifen können, sondern stets nur auf den ADS1115. Folglich muss das Programm darauf angepasst werden, was wie so ziemlich immer mit genau einem deutlichen Punkt zu tun hat: Bibliotheken.

Im Falle des ADS1115 benötigen wir die adafruit-circuitpython-ads1x15 Bibliothek – und diese wird wie immer mit Hilfe von PIP installiert.

Bei der Verwendung der Bibliothek ist ein leicht anderes Vorgehen nötig, als bisher bekannt. Natürlich muss die Bibliothek generell eingebunden werden, allerdings muss explizit auch eine Funktion eingebunden werden, die sich hierarchisch an einer anderen Stelle der installierten Bibliothek befindet. Zusätzlich muss bei der Verwendung des ADS1115 noch die busio Schnittstelle mit eingebunden werden.

Über die zweite oben gezeigte Zeile Zeile wird der „Treiber“ des entsprechenden ADS abgerufen, da innerhalb der Bibliothek mehrere Varianten gemäß den zugehörigen ADS vorhanden sind. In der dritten Zeile geht es explizit um eine Klassen-Funktion, die in der Bibliothek vorhanden ist, die nun mit einem entsprechenden Funktionsnamen eingebunden wird.

Um nun den entsprechenden Analogen Eingang abzufragen, wird zunächst eine Busverbindung aufgebaut und anschließend die Adressierung des entsprechend eingebundenen ADS mit der Schnittstelle P0 abgefragt, dessen Wert einer Variablen (hier chan0) zugewiesen wird.