0100110110110001001110010100110111000010101010111011110102                               42                                   

Gewächshaus mit dem Raspberry Pi automatisieren

Datum: 9. Mai / 2016
http://www.raspberry-pi-geek.de/Magazin/2014/05/Gewaechshaus-mit-dem-Raspberry-Pi-automatisieren
Der Raspberry Pi als Gärtner

Gerade im Hochsommer dürfen Gewächshäuser nicht überhitzen, weswegen sie alle über eine oder mehrere Luken auf dem Dach verfügen. Der Aufbau einer Mechanik, die die Dachfenster elektrisch öffnet, stellt jedoch keine triviale Aufgabe dar und erfordert zudem das eine oder andere teure Bauteil. Daher setzen wir zur Klimatisierung handelsübliche PC-Lüfter ein. Ob diese im rauen Klima eines Gewächshauses langfristig überleben, muss sich erst noch zeigen. Immerhin kosten uns die Lüfter keinen Cent, denn sie lagen noch in der Bastelkiste.

Zum Erfassen von Messdaten dienen einfache serielle Sensoren, die der RasPi über die GPIO-Schnittstelle ausliest. Die Lüfter steuert er über den PWM-Port des GPIO-Interfaces an. Einige Ports bereiten wir zum Schalten einfacher Verbraucher vor, etwa zum Steuern der Beleuchtung oder für Pumpen zur Bewässerung.

Als Steuersoftware verwenden wir simple PHP-Skripte. Sie schreiben die Messwerte in eine MySQL-Datenbank, sodass wir sie später grafisch aufarbeiten können. Ein Apache-Webserver fungiert als Frontend, eine Reihe von Cronjobs übernimmt das zeitgesteuerte Ausführen der Aufgaben.

Ökostrom für den RasPi

Im ersten Schritt widmen wir uns dem Thema Energieversorgung. Ein Raspberry Pi, der ja nur rund 3,5 Watt aufnimmt, müsste sich eigentlich vollständig mit Solarstrom versorgen lassen.

Mit der Sonne ist das allerdings so eine Sache: Im Sommer, bei 10 und mehr Sonnenstunden pro Tag, stellt das Versorgen eines RasPi kein Problem dar. Bei trübem Schmuddelwetter im sonnenarmen Winter sieht das schon ganz anders aus. Daher erhebt sich zwangsläufig die Frage: Wie lange soll die Steuerung des Gewächshauses komplett ohne Sonneneinstrahlung auskommen?

Unser Ansatz zur Auslegung der solargestützten Stromversorgung besteht darin, dass die Anlage auch im tiefsten Winter und bei tagelangem Regenwetter einsatzbereit bleiben muss. Zusätzlich sollen genug Energiereserven für weitere Projekte bleiben. Die von uns angenommenen Werte sind nicht in Stein gemeißelt, bei Bedarf passen Sie diese für Ihre Anlage ein wenig nach oben oder unten an.

Wir gehen davon aus, dass der Raspberry mit allen angeschlossenen Extras und Verlusten 12 Watt benötigt – vermutlich liegt der reale Wert etwas niedriger, aber mit 12 Watt lässt sich gut rechnen, weil der Akku eine Spannung von 12 Volt bereitstellt. Bei einem Strom von 1 Ampere ergibt sich also eine Leistung von 12 Watt. Die folgende Liste zeigt, dass wir mit den geschätzten 12 Watt ziemlich dicht an die realen Werte herankommen:

  • Raspberry Pi: 3,5 W
  • Lüfter (im Betrieb): 6 W
  • Verluste der Anlage: 2 bis 3 W

Generell muss man stets 20 bis 30 Prozent der Gesamtleistung einer Anlage als Verlust annehmen (Kasten "Leistungsverluste"). Zudem nimmt die Lebensdauer eines Akkus mit der Tiefe der Entladung rapide ab. Daher ist es sinnvoll, den Akku etwas größer zu dimensionieren, als es die Auslegung rein rechnerisch erfordert. Die Formel P = U*I dient zur Berechnung der Leistung (P, in Watt) aus Spannung (U, in Volt) und Strom (I, in Ampere).

Leistungsverluste

In allen Kabeln geht Leistung verloren, in unserem Fall jedoch nicht sehr viel. Die Verluste nehmen bei kleineren Leitungsquerschnitten zu.

Die Akkus tragen durch Selbstentladungen zu den Verlusten bei. Bei zu schneller oder zu tiefer Entladung entsteht am Akku zudem Abwärme.

Linear arbeitende Laderegler verbrennen regelrecht die Energie, die der Akku gerade nicht aufnehmen kann. Mit einem Mikrocontroller ausgestattete PWM-Regler arbeiten deutlich effizienter.

Auch lineare Spannungswandler erhitzen sich stark und verlieren dadurch viel Leistung. Ein Schaltregler wandelt die Leistung dagegen mit einem Wirkungsgrad um die 80 Prozent.

Aus der Zeit, die der Raspberry Pi ohne einen Sonnenstrahl auskommen soll, ergibt sich direkt die erforderliche Kapazität des Akkus. Ein 12-Volt-Akku mit 100 Ah Kapazität gibt über 100 Stunden hinweg einen Strom von 1 Ampere ab, liefert also über 100 Stunden die benötigten 12 Watt. Bei vollständiger Dunkelheit ergibt sich für das System also eine Gangreserve von mehr als vier Tagen – das sollte genügen.

Die erforderliche Leistung der Solarzelle ergibt sich aus den Sonnenstunden, die zum Laden des Akkus zur Verfügung stehen. Eine 120-Watt-Solarzelle liefert bei maximaler Sonneneinstrahlung bei 12 Volt Spannung 10 Ampere pro Stunde. Das Panel könnte also einen Akku mit 100 Ah Kapazität in knapp 10 Stunden vollständig aufladen. Mit der Formel W=P*t lässt sich die Arbeit (W, in Ah) aus Leistung (P, in Watt) und Zeit (t, in Stunden) berechnen.

Der bei Solarzellen angegebene Wert Wp beziffert die sogenannte Peak-Leistung, also die maximal erreichbare Leistung unter optimalen Bedingungen. Im Regelbetrieb fallen bis zu 20 Prozent weniger Leistung an. Allerdings muss der Laderegler den theoretischen Wert ebenfalls verkraften können.

Nach gründlicher Recherche entschieden wir uns für eine 100-Watt-Solarzelle mit einem 80 Ah starken Akku und einen einfachen PWM-Laderegler – noch kleinere Akkus und Solarzellen kosten in der Regel mehr als solche für Haus-Solaranlagen gedachte Bauelemente.

Mit diesen Bauteilen hoffen wir, die Anlage durch den Winter zu bekommen und für ein komplettes Jahr die Temperaturentwicklung aufzeichnen zu können. Sobald die Außentemperatur sinkt, sollten die Lüfter kaum mehr Energie brauchen, sodass auch bei geringer Sonneneinstrahlung die erzeugte Leistung für den Betrieb des RasPi ausreichen müsste.

WARNUNG

12 Volt stellen für den menschlichen Körper keine Gefahr dar. Lassen Sie bitte dennoch Vorsicht walten: Der Akku liefert bei einem Kurzschluss einige Hundert Ampere Strom – aus diesem Grund verfügen leistungsstarke Akkus auch immer über sehr dicke Anschlussklemmen. Die beim Kurzschluss auftretenden Stromstärken können Gabelschlüssel zum Glühen bringen, und auch das Innere des Akkus erhitzt sich im Kurzschlussfall stark. Es besteht dann die Gefahr, dass die Säure austritt oder das Gehäuse platzt. Schließen Sie den Akku daher bitte immer vorsichtig und richtig gepolt an.

Bei der Verkabelung der Solaranlage achten wir darauf, Leitungen mit einem Mindestquerschnitt von 2,5 mm2 zu verbauen. Die Belegung der Anschlüsse entnehmen wir der Anleitung des gewählten Ladereglers. Diesen schützen wir wiederum mit einem wasserdichten Gehäuse vor Regen und Unwettern.

Nachdem nun die Energieversorgung steht, bauen wir die Hardware für die Gewächshaussteuerung zusammen.

 

Gewächshaussteuerung

Damit der Raspberry durch das Klima im Gewächshaus keinen Schaden nimmt, packen wir ihn wie die Ladeelektronik in ein wasserdichtes Gehäuse. Die Handvoll Elektronikbauteile finden aufgelötet auf einer handelsüblichen Europlatine ihren Platz. Die auf der Heft-DVD enthaltenen Schaltpläne geben einen Überblick, wie alles zusammengehört.

Da die 3,3 Volt der GPIO-Schnittstelle nicht ausreichen, um die MOSFETs zum Schalten zu bewegen, bauen wir eine kleine, über Optokoppler realisierte Vorstufe ein. Diese rettet dem RasPi zudem das Leben, falls es in den Endstufen zu einer Überspannung kommen sollte. Die MOSFETs montieren wir auf Kühlkörper, da sie im PWM-Betrieb sehr viel Hitze entwickeln – im reinen Schalterbetrieb würden sie ohne eine Kühlung auskommen.

Zur einfacheren Montage im Gewächshaus führen wir alle Verbindungspunkte auf eine Klemmleiste. Die Spannungsversorgung übernimmt dann entsprechend den Ausführungen im Kasten "Aus 12 mach 5" ein DC-DC-Wandler. Abbildung 1 zeigt den nun vollständigen Aufbau unserer intelligenten Gartenhaussteuerung fertig montiert in den wasserdichten Gehäusen.

Abbildung 1: So sieht die komplett aufgebaute Platine für die Gewächshaussteuerung aus.

Aus 12 mach 5

Um aus den 12 Volt der Solaranlage die für den Raspberry Pi benötigten 5 Volt zu gewinnen, nutzen wir einen DC-DC-Konverter TSR 1-2450 der Firma Traco Power [5]. Er überzeugt durch deutlich geringere Verluste als ein linearer Spannungsregler. In unserem Fall würde ein linearer Regler mehr Leistung in Wärme verwandeln, als der RasPi zum Betrieb benötigt. Der TSR 1-2450 erzielt in unserer Schaltung einen Wirkungsgrad von über 90 Prozent und entwickelt kaum Hitze. Zum Thema Spannungsversorgung: Der Raspberry Pi lässt sich auch über Pin 2 (+5 Volt) und Pin 6 (0 Volt) der GPIO-Schnittstelle mit Spannung versorgen, dadurch entfällt das USB-Kabel.

Beim Umsetzen Ihrer eigenen Anlage sind Ihren kreativen Ideen keine Grenzen gesetzt. Denken Sie jedoch auch an Triviales wie etwa einen Ein-/Ausschalter: Dieser darf nicht fehlen, da der Raspberry Pi selbst über keinen verfügt und wir den Mini-Rechner fest mit der Spannungsversorgung verbinden. Abbildung 2 zeigt die Pinouts aller verwendeten Halbleiter.

Abbildung 2: Die Pinouts helfen beim Bestücken der Platine ungemein.

Bei den Sensoren fiel die Wahl auf einen Feuchtigkeits- und Temperaturfühler des Typs DHT22 [1](entsprechend dem Schaltplan gartenhaus_2.sch auf Heft-DVD angebunden). Die Entlüftung des Gewächshauses übernehmen, wie schon erwähnt, handelsübliche PC-Lüfter. Für das Bewässern der Pflanzen sorgt eine einfache 12-Volt-Tauchpumpe aus dem Baumarkt. Während des Testbetriebs ersetzt ein Labornetzteil Akku und Solarzellen.

Nachdem damit nun die Hardware steht, kümmern wir uns im nächsten Schritt um die Software.

Einrichten der Software

Als Software-Basis dient ein aktuelles Raspbian, das wir wie üblich auf einer SD-Speicherkarte installieren. Um langfristig ausreichend Platz für Anwendungen und Daten sicherzustellen, sollte diese mindestens über eine Kapazität von 8 GByte verfügen. Nach dem Einrichten des Systems spielen wir sämtliche Updates ein und installieren einen Apache-Webserver mitsamt MySQL-Datenbank und Tools zum Kompilieren von Programmen (Listing 1). Beim Einrichten des Datenbankservers müssen Sie ein eigenes Root-Passwort für MySQL setzen – bitte merken Sie es sich gut.

Listing 1

$ sudo apt-get update && sudo apt-get dist-upgrade
$ sudo apt-get install apache2 mysql-server php5-mysql build-essential git-core

Nach der Installation der Server-Komponenten spielen wir nun die Wiring-Pi-Bibliothek [2] ein (Listing 2). Sie erlaubt das Auslesen der GPIO-Schnittstelle mit einem einfachen Kommando. Das Kompilieren der Programme nimmt auf dem nicht gerade blitzschnellen RasPi eine Weile in Anspruch. Nach Abschluss des Builds rufen Sie mit gpio readall in einem ersten Test die Daten des GPIO-Ports ab (Listing 3).

Listing 2

$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

Listing 3

$ gpio readall
+----------+-Rev2-+------+--------+------+-------+
| wiringPi | GPIO | Phys | Name   | Mode | Value |
+----------+------+------+--------+------+-------+
|      0   |  17  |  11  | GPIO 0 | IN   | Low   |
|      1   |  18  |  12  | GPIO 1 | IN   | Low   |
|                      [...]                     |
|     19   |  30  |   5  | GPIO10 | ALT2 | Low   |
|     20   |  31  |   6  | GPIO11 | ALT2 | Low   |
+----------+------+------+--------+------+-------+

Als Nächstes benötigen wir für den Temperatur- und Feuchtigkeitssensor DHT22 einen Treiber. Diesen ziehen wir uns aus dem Github des Entwicklers [3] und bauen ihn entsprechend Listing 4. Auch dieser Build-Prozess nimmt wieder eine längere Zeit in Anspruch. Nach dessen Ende lesen Sie die zwei verbauten DHT22-Sensoren mit loldht aus (Listing 5), wozu Sie Root-Rechte benötigen.

Listing 4

$ git clone https://github.com/technion/lol_dht22
$ cd lol_dht22
$ ./configure
$ sudo make install

Listing 5

$ sudo loldht 8
$ sudo loldht 9

An dieser Stelle definieren wir Sensor 8 schon einmal für den Innenraum des Gewächshauses und Sensor 9 als Sensor für die äußere Umgebung. Zum Steuern der Lüfter verwenden wir den PWM-Ausgang des RasPi. Dieser lässt sich zwar nicht ganz so einfach konfigurieren, das soll uns aber nicht daran hindern, es trotzdem zu probieren (Listing 6). Der Pin 12 ist für PWM-Betrieb vorgesehen.

Listing 6

$ gpio mode 1 pwm
$ gpio pwm-bal
$ gpio pwmr 100000
$ gpio pwm 1 14000

Bei den von uns genutzten Lüftern ergeben sich Werte im Bereich von 14*000 bis 17*000. Diese Werte unterscheiden sich jedoch von Lüfter zu Lüfter. Probieren Sie daher am besten jetzt schon aus, wo bei den von Ihnen eingesetzten Lüftern die untere und obere Grenze liegt. Die Werte müssen Sie später in den von uns vorgestellten Skripten eintragen.

 

MySQL-Datenbank

Die durch die Sensoren erhobenen Daten sichern wir in einer MySQL-Datenbank, sodass sich diese später auch wieder einfach auswerten und grafisch aufbereiten lassen. Die Datenbank richten Sie am besten über die von uns auf der Heft-DVD mitgelieferten oder im Internet vorgehaltenen SQL-Datei datalogger.sql ein: So ersparen Sie sich viel Tipparbeit.

Listing 7

$ wget http://linux-user.de/###FIXME###/datalogger.sql
$ mysql -u root -p < datalogger.sql

Mit wget aus dem Netz geladen und per mysql ausgeführt (Listing 7), legt das SQL-Skript automatisch einen Benutzer namens datalogger mitsamt gleichnamiger Datenbank und gleichlautendem Passwort an. Parallel erzeugt es in dieser Datenbank die Tabellen datalogger und history. Beachten Sie bitte, dass mysqlnicht das Root-Passwort des Betriebssystems abruft, sondern das bei der Installation des MySQL-Servers vergebene Passwort des Root-Datenbankbenutzers. In den Tabellen protokollieren wir dann über unsere Skripte die fünf Werte zeitpunkt, sensor, temperatur, luftfeuchte und pwm.

Die beiden Tabellen datalogger und history unterscheiden sich lediglich in der letzten Spalte pwm. Diese benötigen wir nur in datalogger für den Regelalgorithmus der Lüfter. Aus der Tabelle history generieren wir Graphen mit dem Verlauf der Temperatur und Luftfeuchtigkeit – für diese benötigen wir die PWM-Daten nicht.

Apache mit PHP aufsetzen

Als Webserver unseres Gewächshauses dient Apache. Bevorzugen Sie leichtgewichtigere Server, dann greifen Sie ruhig zu Lighttpd oder Cherokee. Der Webserver muss lediglich in der Lage sein, PHP-Skripte auszuführen. Haben Sie sich an unserer Vorgabe orientiert, dann erfolgte die Installation von Apache schon zusammen mit MySQL.

Um zu prüfen, ob die Installation von Apache und PHP erfolgreich war, erzeugen Sie mit der Zeile ausListing 8 ein kleines PHP-Testskript. Über die URL http://RasPI-IP/phpinfo.php kontrollieren Sie danach die Installation. Die IP-Adresse verrät Ihnen entweder ipconfig oder zur Not die Bildschirmausgabe beim Booten des Raspbian-Systems.

Listing 8

$ echo '<?php phpinfo();?>' | sudo tee -a /var/www/phpinfo.php

 

Skripte und Cronjobs

Zum Abschluss gilt es nun, das Zusammenspiel aller Komponenten zu orchestrieren. Die Arbeit übernehmen einige durch Cronjobs getriggerte PHP-Skripte, die Sie auf der Heft-DVD finden und von dort nach/var/www/ kopieren. Alternativ holen Sie sich die Skripte per wget aus unserem Download-Bereich und entpacken sie direkt in das Datenverzeichnis des Webservers (Listing 9).

Listing 9

$ wget ftp://ftp.raspi-geek.de/2014/05/raspi-greenhouse.tar.gz
$ sudo tar xzf raspi-greenhouse.tar.gz -C /var/www/
$ sudo www-data:www-dara /var/www/*.php

Die von uns entwickelten Skripte umfassen sensor.php, das jede Minute die Sensordaten ausliest und in die Datenbank schreibt. Ein zweiter Cronjob ruft alle fünf Minuten luefter.php zum Steuern der am Dach angebrachten Lüfter auf.

Der Algorithmus arbeitet nach einer recht einfachen Logik: Erreicht die Temperatur im Glashaus einen im Skript definierten maximalen Wert, starten die Lüfter auf Minimaldrehzahl. Liegt die Temperatur beim nächsten Durchlauf des Skripts immer noch zu hoch, steigern wir die Drehzahl der Lüfter. Sobald die Temperatur den unteren Grenzwert unterschreitet, stoppen wir die Lüfter komplett: Das Gewächshaus soll ja nicht unnötig auskühlen.

In luefter.php tragen Sie die PWM-Werte ein, die Sie zuvor beim Test der Lüfter ermittelt haben. Auch die kritische Temperatur, ab der die Lüfter anlaufen sollen, müssen Sie an die lokalen Gegebenheiten anpassen.

Damit die Pflanzen nicht verdursten, sorgen zwei weitere Cronjobs und die damit verbundenen Skripte für eine regelmäßige Bewässerung. Das allabendliche Ausführen von pumpean.php startet die Pumpe,pumpeaus.php stellt sie nach ein paar Minuten wieder ab. Damit unsere Greenhouse-IT nicht einfach nur stumm vor sich hin werkelt, bietet Ihnen die index.php eine Übersicht der aktuellen Klimadaten des Gewächshauses sowie eine kleine Historie mit den Daten des Vortags an.

Für Letzteres startet jede Nacht history.php durch einen letzten Cronjob. Das Skript schreibt für jede Stunde einen gemittelten Datensatz in die Datenbanktabelle history. Danach löscht es die ursprünglich minütlich gesammelten Daten. Dieses Verfahren reduziert das Datenaufkommen pro Sensor und Tag von 1440 auf 24 Datensätze, um den Speicherplatz im RasPi nicht zu überfluten.

Die genannten Cronjobs tragen Sie am besten gesammelt als raspi-greenhouse-cron unter /etc/cron.dein. Listing 10 lädt das Cron-Skript aus dem Netz, schiebt die Datei in den richtigen Ordner und macht sie ausführbar. Passen Sie die Schaltzeiten der Pumpe bitte an die Bedürfnisse Ihrer Pflanzen an. Die Wikipedia erklärt Ihnen sehr gut die Syntax eines Cronjobs [4].

Ein wenig eleganter wäre es, nicht für jeden Aufruf Root-Rechte zu nutzen, da nur loldht eine erhöhte Berechtigung erfordert. Diese Vereinfachung sei uns aber aufgrund der geringen Sicherheitsanforderungen an eine Gewächshaussteuerung vergeben.

Listing 10

$ wget ftp://ftp.raspi-geek.de/2014/05/raspi-greenhouse-cron
$ sudo mv raspi-greenhouse-cron /etc/cron.d
$ sudo chmod +x /etc/cron.d/raspi-greenhouse-cron

Ausblick

Nachdem nun Hard- und Software harmonieren und unser Raspberry Pi seinen grünen Daumen beweisen darf, machen wir uns Gedanken, in welche Richtung wir unser RasPi-Gartenhaus weiterentwickeln.

So ließe sich die Statusseite noch ein wenig schicker und informativer gestalten. Sicherlich wäre es auch keine schlechte Idee, die Drehzahl der Motoren zu überwachen und eine Warnung zu generieren, falls einer der Lüfter ausfällt. Eine Webcam könnte das Wachsen der Pflanzen von Tag zu Tag im Bild festhalten.

Ob wir den RasPi dazu bringen, Unkraut zu jäten und Schnecken zu jagen? Wer weiß – vielleicht fällt uns auch dazu etwas ein.

Infos

  1. DHT22: http://www.adafruit.com/products/385
  2. Wiring Pi: http://wiringpi.com
  3. DHT22/AM2302-Treiber: https://github.com/technion/lol_dht22
  4. Cronjobs erklärt: http://de.wikipedia.org/wiki/Cron
  5. Datenblatt TSR 1-2450: http://www.tracopower.com/datasheet_g/tsr1-d.pdf

 

http://www.raspberry-pi-geek.de/Magazin/2014/05/Gewaechshaus-mit-dem-Raspberry-Pi-automatisieren


Comments are closed.