Bauvorschlag Wetterstation


#1

Ich hatte ja schon mal angekündigt, dass ich meinen Vorschlag für eine Wetterstation hier veröffentliche. Das soll nun auch geschehen.

Im Wesentlichen handelt es sich um ein Sensor-Board, auf das fertige Module gesteckt werden. Diese kann man für wenig Geld bei Aliexpress bestellen. Eine Teileliste folgt in einem nächsten Posting. Wenn alle Teile voll bestückt sind, kann das Sensorboard folgende Werte liefern:

  • Lufttemperatur
  • Luftfeuchte
  • Luftdruck
  • Windgeschwindigkeit (inkl. Böen etc.)
  • Windrichtung
  • Regenmenge
  • UV-Intensität
  • Lichtintensität
  • Bodentemperatur
  • Feinstaub
  • Echtzeituhr (batteriegepuffert)

Darüber hinaus können weitere Sensoren angeschlossen werden. Dazu ist der I2C-Bus durchgeschleift und es sind noch 3 analoge Ports am A/D-Wandler (16bit!) frei. Ebenso steht noch ein bidirektionaler Pegelwandler zur Verfügung, der von 3.3 auf 5V (und umgekehrt) wandelt. Zusätzlich ist eine Anzeige auf 7-Segment-LED Basis vorgesehen (8 Ziffern), LCD-Displays scheiden im Außenbereich wegen der Temperaturproblematik ja leider aus.

Die Wetterstation ist so entworfen, dass sie sowohl an einem Raspberry Pi (alle Versionen, am besten aber Zero W(H) oder Version 3, wegen WLAN) als auch an einem NodeMCU/ESP8266 laufen kann. Beide arbeiten mit 3.3V, ein Betrieb an 5V (Arduino oder ähnliche) ist nicht vorgesehen.

Was die Software angeht, werde ich meine Entwicklungen bei github hochladen, sobald ich da etwas vorzeigbares habe. Man muss im Hinterkopf behalten, dass man sich entscheiden sollte, ob man einen Raspberry Pi oder einen NodeMCU als Computer nutzen möchte. Entsprechend fällt die Software dazu aus. Der Pi hat den Vorteil, dass man noch weitere Aufgaben an ihn stellen kann, z.B. den Betrieb einer Webcam an der Wetterstation. Das scheidet beim NodeMCU aus.

Im nächsten Teil gibt es den Schalt- und Bestückungsplan für das Sensorboard.


#2

Das Sensorboard ist auf einer 08/15 Lochrasterplatine aufgebaut. Den Plan für die Bauteilseite und die Löstseite findet ihr anbei. Um einen Eindruck davon zu bekommen, wie das fertige Teil aussehen kann, füge ich auch noch Fotos vom fertigen Board hinzu

Alle Module sind gesockelt, d.h. die stecken auf Sockelleisten und können bei einem Defekt leicht ausgetauscht werden. Alle Anschlüsse, die zum Computer gehen, oder an die man ggf. weitere Geräte anstecken kann, sind als Stiftleisten herausgeführt. An den Schraubblock kommen die Kabel der Sensoren, die nicht auf dem Sensorboard angeordnet sind:

  • Windrichtung
  • Windgeschwindigkeit
  • Regenmenge
  • Bodentemperatur

Der Feinstaubsensor wird nicht an das Sensoboard angeschlossen, sondern direkt mit dem NodeMCU oder Raspberry Pi verbunden. Hier würden die Signale nur durchgeschleift, was keinen Mehrwert bringt.

Die Widerstände am Schraubblock dienen als Pull-Up Widerstände für die einzelnen Pins, um einen definierten Pegel anliegen zu haben, wenn die Kontakte an den Sensoren geöffnet sind, oder um den vom OneWire-Protokoll geforderten Pegel im Ruhezustand bereitzustellen.

Die Kondensatoren wiederum dienen dem Entprellen der Kontakte an den Sensoren. Hier sind günstige Reed-Kontakte verbaut, die leider die Eigenschaft haben, beim Schließen und Öffnen zu “flattern”. Das führt dazu, dass statt einem Impuls gerne mal 4-5 gezählt werden, was zu falschen Ergebnissen bei der Berechnung der Windgeschwindigkeit oder der Regenmenge führt.

Vor dem Einbau der Echtzeituhr müssen die auf dem Modul eingelöteten Pull-Up Widerstände ausgelötet werden. Das Modul ist eigentlich für den Betrieb an 5V gedacht und wird deshalb auch mit 5V betrieben. Würde man die Widerstände nicht auslöten, würde das Uhrenmodul diese Spannung auf den I2C-Bus geben und den Raspberry Pi oder den NodeMCU mit allen angeschlossenen Sensoren in’s Nirvana befördern. Auch auf einem weiteren Sensormodul muss ein kleiner Lötpunkt gesetzt werden, um einen Adressenkonflikt auf dem I2C-Bus zu vermeiden. Beide Lötarbeiten beschreibe ich aber noch einmal separat mit Fotos.



#3

Hier mal die Teileliste. Ich hoffe, ich habe nichts vergessen. Links zu AliExpress füge ich noch ein.

1x BME280 Modul (Luftfeuchte, Luftdruck, Lufttemperatur)
1x TSL2561 Modul (Lichtintensität / Helligkeit)
1x VEML6070 Modul (UV-Intensität)
1x RTC1307 Modul (Echtzeituhr)
1x Level-Shifter Modul, 4-fach, bidirektional
1x 4-fach A/D-Wandler Modul, 16 Bit, I2C
1x DS13B20 im Edelstahlgehäuse (Bodentemperatur)
1x Terminalblock 8-Pin
1x 40-Pin Stiftleiste
1x 40-Pin Sockelleiste
3x Widerstand 1K, 1/4W
2x Widerstand 3K3, 1/4W
1x Widerstand 4K7, 1/4W
1x Widerstand 75K, 1/4 W
2x Kondensator 1nF
1x Kondensator 10nF

"Große Sensoren":

1x Sparkfun Sensor-Set (gab es auch mal bei Conrad und bei weiteren Händlern, wer eine günstige Quelle für das Zeug auftut, bitte hier reinschreiben) - https://www.sparkfun.com/products/8942
1x SDS011 Feinstaubsensor

Für die Platine:

  • Lochrasterplatine (30 Reihen, 24 Spalten)
  • Silberdraht (für Brücken und Leiterbahnen)
  • Lötzinn

Werkzeug:

  • Lötkolben (inkl. feine Lötspitze für Arbeiten an den Modulen)
  • Lötbesteck
  • Elektronikseitenschneider
  • Zwei Zangen
  • Ggf. Entlötlitze und Entlötpumpe (wenn mal was schief läuft)
  • Multimeter

Computer:

1x Raspberry Pi 2, 3 oder Zero W(H)
1x NodeMCU und Breakout-Board
1x Dupont-Kabelset (m/m, m/w und w/w)

Display

1x Max7219 Modul mit 8x 7-Segment-Anzeige
1x Druckschalter (zum Umschalten der Anzeige)

Stromversorgung

1x Steckernetzteil, 5V, Standard Barrel-Connector


#4

Das sieht echt cool aus, kann man sowas mal zusammen bauen ?
@maz evt. bei euch im Büro in Hattingen? :slight_smile:


#5

Mega gut. Und ich finde auch immer noch, dass wir das Thema viel größer aufmachen sollten - evtl. kann man damit auch größere Partner ins Boot holen…?


#6

Beim Anschluss an ein NodeMCU habe ich noch ein paar weitere Erkenntnisse gesammelt. Das Board schreit ja förmlich danach, als Controller für die Wetterstation verwendet zu werden, da es WLAN bereits eingebaut hat und man nicht mit irgendwelchen Add-On Modulen hantieren muss.

Nun ist es aber so, dass die GPIO-Pins nicht so leicht zu verwenden sind, wie bei einem Raspberry Pi oder einem Arduino-Board. Viele Pins haben mehrere Funktionen, und sobald man an einige “besonders zickige” Ports was anschließt, bricht gleich die Hölle los. Entweder das Board hängt sich auf, Daten im Flash werden zerstört oder - und das ist besonders hinterhältig - alles läuft… bis zum nächsten Neustart. Dann friert das Board ein und man wundert sich, warum nichts mehr geht.

Nach einiger Recherche-Arbeit habe ich das Problem isolieren können und habe eine lauffähige Variante gefunden, um das Sensor-Board an den NodeMCU-Controller zu klemmen. Hintergrund ist, dass einige GPIO-Pins beim Booten mit ihren Signalpegeln bestimmen, ob aus dem Flash-Speicher, einer SD-Karte (hat das Teil gar nicht) oder über die serielle Schnittstelle gestartet wird. Schließt man jetzt eine ungünstige Kombination von Sensoren mit Pull-Up Widerständen an, sagt man dem Teil, dass es von der SD-Karte starten soll - und nichts passiert.

Hier mein Vorschlag für die Belegung am NodeMCU:

NodeMCU (GPIO) ----> Sensor-Board (Hinweis)
D0 (16) ----> SCL (Kein Interrupt bei Pegelwechsel)
D1 (5)  ----> SDA
D2 (4)  ----> OneWire
D3 (0)  ----> Regensensor (muss beim Booten auf High liegen, wird über Pull-Up auf Sensor-Board garantiert)
D4 (2)  ----> Windgeschwindigkeit (muss beim Booten auf High liegen, wird über Pull-Up auf Sensor-Board garantiert)
D5 (14) ----> LV1 (SPI CLK)
D6 (12) ----> LV2 (SPI CS)
D7 (13) ----> LV3 (SPI MOSI)
D8 (15) ----> Taster (muss beim Booten auf Low liegen, Pull-Down in NodeMCU eingebaut)

An die Anschlüsse des Pegelwandlers (von LVx auf HVx) wird das Anzeigemodul mit dem MAX7219 angeschlossen. Hierbei gilt:

HV1 ----> CLK
HV2 ----> CS
HV3 ----> DIN

Die beiden Anschlüsse RX und TX sind für den Feinstaubsensor reserviert, der ja freundlicherweise über eine serielle Schnittstelle kommuniziert. Man muss aber beachten, dass diese Pins parallel zum USB-Anschluss geschaltet sind. Kommuniziert man also mit dem NodeMCU über USB, muss der Feinstaubsensor abgestöpselt werden - und umgekehrt.

5V, 3.3V und GND gibt es in größerer Menge auf dem NodeMCU Break-Out Board. Hier einfach an die entsprechenden Anschlüsse auf dem Sensor-Board anstecken.

Und hier noch Bilder vom Breakout-Board (einmal mit, einmal ohne NodeMCU), damit ihr wisst, wovon ich spreche :wink:


#7

Ach ja, eine wichtige Frage ist noch offen: Welche Plattform für den Controller sollten wir favorisieren? NodeMCU oder Raspberry Pi Zero W? Die Kosten unterscheiden sich nicht großartig.

Mit dem Raspberry Pi hat man aber zusätzlich die Möglichkeit, eine Webcam anzuschließen (über USB oder den eigenen Kamera-Anschluss), außerdem hat er noch einige Ports mehr, falls man noch was dranklemmen will. Der NodeMCU ist bis auf den letzten Anschluss voll.

Andererseits muss man beim Raspberry Pi wieder aufpassen, dass man sich mit Firewall etc. rumschlägt, da das Teil ja mit Linux (würg) schon wieder viel zu mächtig ist und ratzfatz in einem Bot-Netz landet, wenn man nicht aufpasst. Die Chancen hierfür sind beim NodeMCU eher gering, wenn man keinen physischen Zugriff auf das Teil hat.

Ideen? Vorlieben?


#8

Mal ein Screenshot von der aktuellen Firmware. Noch frühes Stadium, aber WLAN, Bodentemperatur, Windgeschwindigkeit und Regen funktionieren schon mal und die Sensoren am I2C-Bus werden erkannt.

Der Upload der Daten erfolgt demnächst als JSON an eine Web-API, das JSON-Dokument kann man in der letzten Zeile sehen. Eine solche Zeile pro Minute wird erzeugt und hochgeladen. Damit man auch mehrere Stationen an den Server koppeln kann, bekommt jede Station ein Upload-Token beim anmelden und wird über die “Unique ID” unterschieden (die errechnet sich aus der MAC-Adresse des Microcontrollers).

Und noch ein Foto vom Chaos auf meinem Tisch. Bis auf Feinstaub ist jetzt alles angeschlossen.


#9

Ob man das auch an eine HTTP-API Pushen könnte?


#10

Das sollte “wurscht” sein, solange ich die Daten mit HTTP GET oder POST irgendwo abladen kann. Können wir gerne ausprobieren, ich kann ja schon mal die Daten während des Bastelns zum Testen hochladen. Sind zwar noch nicht aussagekräftig (außer die Bodentemperatur, die gibt im Moment an, wie warm es bei mir im Arbeitszimmer ist :wink: Wind und Regen bediene ich im Moment noch von Hand bzw. ich puste auf den Windsensor…


#11

Gerne, ich PM Dir die Zugangsdaten für die DB.
Ich find das immer schöner, wenn man sich von Anfang an nicht auf irgendwelche externen
Dienste zurückgreifen muss, und unkomplizierte Self-Hosted Dienste nutzen kann :slight_smile:


#12

Gibt es denn hier Mal ein Update?