Solarbetriebene Wetterstation!

Es ist inzwischen mehr als ein halbes Jahr her, dass mir die Idee kam, als nächstes Projekt eine Wetterstation zu bauen, die zudem mit einer weiteren Station am Teich im Garten meiner Eltern kommunizieren können sollte und die gesammelten Daten zur Auswertung an den Server schicken sollte, auf dem sich auch diese Homepage befindet. Der Weg bis zur fertigen, funktionierenden Station war steiniger als erwartet, aber dafür habe ich auch wieder einmal sehr viel gelernt. Und das Endprodukt kann sich sehen lassen!

Dieser Artikel dreht sich um die Wetterstation, die Werte zur Temperatur, Luftdruck, Luftfeuchtigkeit und Belichtungsstärke aufnehmen können sollte und diese per WLAN ins Internet schicken sollte. Außerdem sollte ein Funkmodul die Verbindung zur zukünftigen Teichstation ermöglichen, damit auch deren Werte ins Internet geschickt werden können. All das ist mit der oben abgebildeten Wetterstation gelungen, die zudem auch über eine Solarzelle mit Strom versorgt wird.

Ursprünglich war allerdings auch angedacht, dass die Wetterstation über ein Display und drei Taster verfügt, mit denen sich mehrere Einstellungen (z. B. das Messintervall) vornehmen lassen. Außerdem sollten die Daten auch auf einer SD-Karte gespeichert werden. Beides hat am Ende aus unterschiedlichen Gründen nicht geklappt: Das SD-Kartenmodul wird genauso wie das Funkmodul nRF24L01 über eine SPI-Verbindung angesprochen und wenn beide gleichzeitig über SPI angesprochen werden sollen, behindern sich die Module leider gegenseitig. Es gibt einen Hack, der jedoch für meine Lötfähigkeiten nicht infrage kam. Später zeigte sich, dass eine SD-Karte auch gar nicht notwendig ist, weil die Daten sowieso auf dem Server gespeichert werden… Ebenfalls später zeigte sich, dass ich mir viel zu wenig Gedanken über den Stromverbrauch gemacht hatte. Die erste Version der Wetterstation verfügte über ein Display, drei Taster, mehrere Einstellungsmenüs und arbeitete im Zentrum mit einem Arduino Nano, an den ein ESP8266-01 angeschlossen war. Leider verfügen beide nicht über einen DeepSleep-Modus (abgesehen von einem wiederum schwierigen Hack), sodass insbesondere der ESP viel zu viel Strom verbrauchte und die angeschlossenen Batterien nach einem halben Tag leer waren. Ganz davon abgesehen war die Kommunikation zwischen ESP und Arduino per AT-Kommandos (übertragen über einen SoftwareSerial) absolut unzuverlässig und sorgte dauernd für Probleme, obwohl die Spannungsversorgung des ESP mit Kondensatoren stabilisiert war…

Im Laufe der Tüftelei an einer Wetterstation fand ich jedoch auch die solarbetriebene Wetterstation vom Youtuber Bitluni, die ich mir für die zweite Version zum Vorbild nahm. Im Zentrum steht hier ein Wemos D1 mini, der sozusagen ein erweiterter ESP8266-01 (mehr Pins!) ist und sich über die Arduino IDE programmieren lässt. Im Vergleich zu meiner ursprünglichen Version ist der D1 mini eine Kombination aus Arduino und ESP, der die lästige Kommunikation zwischen den beiden Modulen überflüssig macht. Da die Spannungsversorgung direkt auf dem Board geregelt wird, muss man sich damit auch nicht mehr herum ärgern. Und ganz wichtig: Mit einem sehr leichten Hack, den Bitluni vorstellt, verfügt der D1 mini über einen DeepSleep-Modus, sodass er insgesamt sehr wenig Strom verbraucht!

Schaltplan zur Wetterstation

Ich habe also an den D1 mini per I²C-Verbindung einen BME280 sowie einen BH1750 angeschlossen. Ersterer misst die relative Luftfeuchtigkeit, den Luftdruck und die Temperatur, letzterer die Lichtstärke (bei dem BH1750 funktioniert das genauer und zuverlässiger als mit einem LDR). Außerdem schloss ich das Funkmodul nRF24L01 an, das sich jedoch mit der im Link vorgestellten Bibliothek nicht vernünftig ansprechen ließ. Letztlich funktionierte es aber mit der klassischen RF24-Bibliothek zuverlässig (außerdem gibt’s dazu eine exzellente Dokumentation).

Ein paar Überlegungen erforderte nun noch die Spannungsversorgung, die ich von Bitluni übernahm. Im Zentrum steht dabei der regelbare Spannungsregler LM317, der über 3 Pins verfügt. An den Input-Pin wird das 5V Potential von der Solarzelle angeschlossen, an den Output-Pin wird das 3,3V Potential des D1 mini angeschlossen. Die Regulierung von 5V auf 3,3V wird mit einem Spannungsteiler vorgenommen, der an den Output-Pin, den Adjust-Pin und GND angeschlossen wird.

LM317 typical schematic.svg
By Peter S. May; contains schematic symbols from Fritzing (Fachhochschule Potsdam) – Created personally (with Fritzing and Inkscape), CC BY-SA 3.0, Link

Das Material des LM317 weist eine Bandlücke auf, die sich als Referenzspannung nutzen lässt und unter normalen Umständen stets 1,25V beträgt. Diese Referenzspannung V_ref liegt zwischen OUT und ADJ am LM317 an und damit auch am Widerstand R_H. Zwischen V_out und GND soll eine Spannung von 3,3V eingestellt werden – kurz: V_out=3,3V, da GND stets als Nullpotential dient. Aufgrund des Spannungsteilers gilt:

V_out / V_ref = (R_H+R_L) / R_H  => V_out = V_ref ( 1 + R_L/R_H).

Ehrlich gesagt, kamen die dadurch berechneten Werte bei mir nicht genau hin, aber der Rest ließ sich durch Drehen an dem Poti, das ich für den Spannungsteiler verwendet habe, experimentell herausfinden.

Nun fehlt nur noch der Code, der jedoch recht einfach ist. Die WLAN-Verbindung wird gestartet, die Sensorwerte eingelesen, zu einem String zusammengefasst und per http-Post Funktion an den Server geschickt. Alles befindet sich im setup(), weil sich der D1 mini nach dem Aufwachen aus dem DeepSleep-Modus resettet und wieder mit dem setup anfängt. Daher übernimmt der setup praktisch die Rolle des loops(). Ich habe noch einige #ifdef-Abfragen eingefügt, damit sich ganz oben durch ein entsprechendes Aus-/Einkommentieren von SERIALON oder TEICHFUNK einstellen lässt, ob die zugehörigen Befehle ausgeführt werden oder nicht. Auf dem Server liegt dann noch ein kleines PHP-Skript, das den übermittelten Datenstring entgegennimmt. Die Auswertung erfolgt durch ein R-Skript, das ich nicht selbst geschrieben, sondern von einem Freund übernommen habe. Dadurch werden die Daten graphisch dargestellt und können vom Handy aus abgerufen werden.

Ausschnitt aus den visualisierten Wetterdaten

Falls ich nun das Interesse geweckt haben sollte, selbst einmal eine Wetterstation zu bauen, dann dürfen meine Dateien inklusive aller .stl-Dateien für den 3D-Drucker gerne als Vorlage genutzt werden, so wie ich es auch mit den Dateien von bitluni gemacht habe: Wetterstation-Dateien.zip.

Viel Spaß beim Tüfteln!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.