Raspberry-Pi Empfänger
Verfasst: 05.10.2016, 20:52
Bau und Entwicklung der Raspberry Wetterstation
Alles begann mit dem Kauf meiner WS2000 im Jahr 2003 bei Conrad Elektronik. Diese brachte bereits einen Temperatur/Feuchtesensor, einen Regensensor und einen Windsensor mit. Sie wurde auf dem umgebenden Grundstück unseres frisch gebauten Haus aufgestellt und dank dem WS7000-13 PC-Funkinterface welches nicht ausgelesene Daten in einen Ringspeicher speichert, konnten alle Daten lückenlos gespeichert und beliebig am Computer ausgelesen werden. 2005 wurde die Wetterstation durch eine WS2500 ergänzt. Hier war der Helligkeitssensor neu, aus dessen Werten die verwendete Software WsWin von Werner Krenn, sogar die Sonnenscheindauer und Einstrahlungsleistung/m² berechnen konnte. Es gingen einige Jahre ins Land und die Station wurde beständig um Sensoren erweitert. So dauerte es nicht lange, bis Bodentemperatursensoren dazu kamen, wie auch Temperatursensoren in verschiedenen Höhen zwischen 0 und 2m. 2008 dann die Hiobsbotschaft. ELV stellt die Produktion der WS2xxx Reihe ein. Es gab immer seltener Restposten zu ergattern, zu immer höheren Preisen. In Wetterforen kam die schnell die Frage auf, warum gerade ein Wetterstationsmodell, welches so gut auf die Bedürfnisse von Hobbymeteorologen zugeschnitten ist, unbedingt aus dem Programm genommen werden muss. Denn inzwischen haben sich im hobbymeteorologichen Sektor die Kombisensoren verbreitet, wo oft Wind, Regen und Temperatursensor in eine Einheit verbaut sind. Im meteorologischen Sinne sehr unsinnig, da nach WMO-Norm der Wind in 10m und die Lufttemperatur in 2m Höhe gemessen wird. Der Regensensor hingegen ist so anzubringen, dass er stabil steht und kein Spritzwasser vom Boden abbekommt. Des weiteren darf er nicht im Windschatten umliegender Gebäude stehen, weswegen er häufig auf einem kurzen Holzpfahl auf der Wetterwiese platziert wird. All dies macht ein Kombisensor unmöglich, da man sich für einen Sensor entscheiden muss, den man Normgerecht unter bringt, die übrigen Sensoren liefern entsprechend falsche Werte. Auch die Vantage Wetterstationen kamen nicht in Betracht, da diese von ihren Anschaffungskosten her schlicht zu wuchtig für meine Verhältnisse waren. 2010 dann noch einmal ein kleiner Lichtblick. ELV gab seine für Garantiefälle gelagerten Ersatzgeräte zum Verkauf frei. Somit wurden noch einmal defekte Sensoren und Geräte ausgetauscht. Dennoch geschah es, dass 2011 der Temperatur- Feuchtesensor auf Grund falsch eingelegter Batterien den Hitzetod fand. Für ein ¾ Jahr konnte meine Wetterstation keine korrekten Daten liefern. Abhilfe schaffte erst ein von Helmut Bayerlein in seiner Freizeit erstellter Sensor. Er hatte sich der Thematik WS2000/WS2500 Sensoren schon deutlich früher angenommen und durch Entschlüsselung des Funkprotokolls war es ihm möglich eigene Sensoren zu entwickeln. 2014 gelang dann auch mir der Durchbruch. Im Frühjahr 2014 schaffte ich es, durch einen alten, ausgeschlachteten WS2xxx-Repeater, die Funksignale zu dekodieren. Der Repeater wurde seinem Sendemodul beraubt und am Daten-Sendepin (Eingang des Sendemoduls) habe ich die Interruptpins meines AVR-Mikrokontrollers angelötet. Dieser Mikrokontroller wertete nun die Zeit zwischen High/Low bzw Low/High Flanken aus und zählte in der Zwischenzeit eine Variable hoch.
Die genaue Kodierung der Sensortelegramme ist hier zu finden.
Damit war es mir nun möglich meine ersten eigenen Sensoren zu bauen. Es wurden Experimente mit Temperaturabhängigen Widerständen, als auch mit digitalen Temperaturgebern wie dem DS18S20 gemacht. Letzterer erwies sich als deutlich zuverlässiger, da hier die Messerwerte bereits von dem Sensorelement selbst erfasst und digital über das OneWire Interface übertragen werden. Da lohnt sich der Aufwand die temperaturabhängigen Widerstände mittels Spannungsteiler auf korrekte Werte abzugleichen, kaum. Zumal diese oft trotz allem, bei kalten Temperaturen zu größeren Fehlmessungen neigen. Der neue +5cm Sensor wurde entsprechend mit einem DS18S20 Sensor realisiert, während ein Attiny44 hier als Prozessor verwendet wurde. Im Juli 2014 wurde ich dann auf den Raspberry Pi aufmerksam, mit welchem ich endlich meine eigene Wetterstation auf Basis der WS2xxx Reihe von ELV realisierte
Hier sind der Raspberry Pi, sowie die kleine Empfängerschaltung zu sehen. Auf der Rückseite der Empfängerplatine befindet sich die Empangsplatine „Aurel 4mm5 RX“ an deren Antennenanschluss und GND ein Antennenkabel angelötet ist. An der anderen Seite des Antennenkabels befindet sich eine Dipolantenne. Beide Dipole bestehen aus einem 4mm Messing-Vollmaterialstab und sind je 32,6cm lang. Dadurch wird der Empfang nochmals deutlich gesteigert.
Der Empfänger:
Hierbei handelt es um einen Atmega16, welcher über seine Interruptpins die Daten des Aurel 4mm5 RX auswertet. Int0 ist auf steigende Flanke eingestellt, Int1 auf fallende. Löst Int0 aus, so wird ein Timer gestartet, welcher eine Variable hoch zählt. Löst nun Int1 aus, so wird der Timer gestoppt und die Variable ausgewertet. Entspricht die gemessene Zeit der Bedingung für eine log. 1 (+Fehlertoleranz), so wird das erste Bit einer Datenvariable auf log. 1 gesetzt. Entspricht sie der Bedingung einer log. 0, so wird das Variablenbit auf log. 0 gesetzt. Entspricht die gemessene Zeit selbst mit Fehlertoleranz keiner von beiden Bedingungen, so wird einfach nichts gemacht.
Als Präambel (Startzeichen, das jetzt ein Datentelegramm vom Sensor kommt) werden 7-10 mal log. 0 gefolgt von einer logischen 1 gesendet. Es muss also mind. 7 mal der Zustand 0 gefolgt von log. 1 empfangen werden. Auf die Art wird ein Bit nach dem anderen der Datenvariable gesetzt. Da die Funksensoren im 4 Bit Modus senden, ist die erste Datenvariable nach 4 Bits bereits fertig. Nach einem Trennbit, welches immer log. 1 ist, folgen dann die Bits für die zweite Datenvariable. Im Programm gibt es daher auch für den log. 0 Zustand eine Zählvariable. Ist diese größer gleich 7 UND das letzte empfangene Bit ist log. 1, dann beginnt gerade ein Sensortelegramm. Alles weitere wurde oben bereits genauer beschrieben.
Danach folgt als erstes der Sensortyp, wovon es 6 gibt. 0= Temperatursensor (Nur WS2000), 1= Temperatur und Feuchtesensor, 2=Regensensor, 3=Windsensor, 4=Innensensor mit Temperatur, Feuchte und Luftdruck (Nur WS2000), 5=Helligkeitssensor (nur WS2500). Gefolgt von der Sensoradresse. Bei den Temperatursensoren kann diese mittels Steckbrücken eingestellt werden, während sie bei Regen, Wind, Helligkeit und dem Innensensor fest verlötet sind und auf 7 stehen. Nach diesen beiden ersten „Bytes“ (Anführungszeichen-Zeichen daher, da ja nur 4, statt wie üblich 8 Bit) kommen nun die eigentlichen Daten. Nach jedem „Byte“, also jedes 5. Bit, ist eine log. 1 als Trennzeichen.
Diese Daten fasst der Atmega16 zu Zahlenwerten zusammen, verarbeitet sie und gibt sie letztlich alle 5 Minuten über seine UART Schnittstelle aus, welches dann wie folgt aussieht:
Das Semikolon stellt hierbei das Datenrennzeichen dar und ist damit kompatibel zu dem CSV Standart, welcher bei MS Excel Anwendung findet.
Alles begann mit dem Kauf meiner WS2000 im Jahr 2003 bei Conrad Elektronik. Diese brachte bereits einen Temperatur/Feuchtesensor, einen Regensensor und einen Windsensor mit. Sie wurde auf dem umgebenden Grundstück unseres frisch gebauten Haus aufgestellt und dank dem WS7000-13 PC-Funkinterface welches nicht ausgelesene Daten in einen Ringspeicher speichert, konnten alle Daten lückenlos gespeichert und beliebig am Computer ausgelesen werden. 2005 wurde die Wetterstation durch eine WS2500 ergänzt. Hier war der Helligkeitssensor neu, aus dessen Werten die verwendete Software WsWin von Werner Krenn, sogar die Sonnenscheindauer und Einstrahlungsleistung/m² berechnen konnte. Es gingen einige Jahre ins Land und die Station wurde beständig um Sensoren erweitert. So dauerte es nicht lange, bis Bodentemperatursensoren dazu kamen, wie auch Temperatursensoren in verschiedenen Höhen zwischen 0 und 2m. 2008 dann die Hiobsbotschaft. ELV stellt die Produktion der WS2xxx Reihe ein. Es gab immer seltener Restposten zu ergattern, zu immer höheren Preisen. In Wetterforen kam die schnell die Frage auf, warum gerade ein Wetterstationsmodell, welches so gut auf die Bedürfnisse von Hobbymeteorologen zugeschnitten ist, unbedingt aus dem Programm genommen werden muss. Denn inzwischen haben sich im hobbymeteorologichen Sektor die Kombisensoren verbreitet, wo oft Wind, Regen und Temperatursensor in eine Einheit verbaut sind. Im meteorologischen Sinne sehr unsinnig, da nach WMO-Norm der Wind in 10m und die Lufttemperatur in 2m Höhe gemessen wird. Der Regensensor hingegen ist so anzubringen, dass er stabil steht und kein Spritzwasser vom Boden abbekommt. Des weiteren darf er nicht im Windschatten umliegender Gebäude stehen, weswegen er häufig auf einem kurzen Holzpfahl auf der Wetterwiese platziert wird. All dies macht ein Kombisensor unmöglich, da man sich für einen Sensor entscheiden muss, den man Normgerecht unter bringt, die übrigen Sensoren liefern entsprechend falsche Werte. Auch die Vantage Wetterstationen kamen nicht in Betracht, da diese von ihren Anschaffungskosten her schlicht zu wuchtig für meine Verhältnisse waren. 2010 dann noch einmal ein kleiner Lichtblick. ELV gab seine für Garantiefälle gelagerten Ersatzgeräte zum Verkauf frei. Somit wurden noch einmal defekte Sensoren und Geräte ausgetauscht. Dennoch geschah es, dass 2011 der Temperatur- Feuchtesensor auf Grund falsch eingelegter Batterien den Hitzetod fand. Für ein ¾ Jahr konnte meine Wetterstation keine korrekten Daten liefern. Abhilfe schaffte erst ein von Helmut Bayerlein in seiner Freizeit erstellter Sensor. Er hatte sich der Thematik WS2000/WS2500 Sensoren schon deutlich früher angenommen und durch Entschlüsselung des Funkprotokolls war es ihm möglich eigene Sensoren zu entwickeln. 2014 gelang dann auch mir der Durchbruch. Im Frühjahr 2014 schaffte ich es, durch einen alten, ausgeschlachteten WS2xxx-Repeater, die Funksignale zu dekodieren. Der Repeater wurde seinem Sendemodul beraubt und am Daten-Sendepin (Eingang des Sendemoduls) habe ich die Interruptpins meines AVR-Mikrokontrollers angelötet. Dieser Mikrokontroller wertete nun die Zeit zwischen High/Low bzw Low/High Flanken aus und zählte in der Zwischenzeit eine Variable hoch.
Die genaue Kodierung der Sensortelegramme ist hier zu finden.
Damit war es mir nun möglich meine ersten eigenen Sensoren zu bauen. Es wurden Experimente mit Temperaturabhängigen Widerständen, als auch mit digitalen Temperaturgebern wie dem DS18S20 gemacht. Letzterer erwies sich als deutlich zuverlässiger, da hier die Messerwerte bereits von dem Sensorelement selbst erfasst und digital über das OneWire Interface übertragen werden. Da lohnt sich der Aufwand die temperaturabhängigen Widerstände mittels Spannungsteiler auf korrekte Werte abzugleichen, kaum. Zumal diese oft trotz allem, bei kalten Temperaturen zu größeren Fehlmessungen neigen. Der neue +5cm Sensor wurde entsprechend mit einem DS18S20 Sensor realisiert, während ein Attiny44 hier als Prozessor verwendet wurde. Im Juli 2014 wurde ich dann auf den Raspberry Pi aufmerksam, mit welchem ich endlich meine eigene Wetterstation auf Basis der WS2xxx Reihe von ELV realisierte
Hier sind der Raspberry Pi, sowie die kleine Empfängerschaltung zu sehen. Auf der Rückseite der Empfängerplatine befindet sich die Empangsplatine „Aurel 4mm5 RX“ an deren Antennenanschluss und GND ein Antennenkabel angelötet ist. An der anderen Seite des Antennenkabels befindet sich eine Dipolantenne. Beide Dipole bestehen aus einem 4mm Messing-Vollmaterialstab und sind je 32,6cm lang. Dadurch wird der Empfang nochmals deutlich gesteigert.
Der Empfänger:
Hierbei handelt es um einen Atmega16, welcher über seine Interruptpins die Daten des Aurel 4mm5 RX auswertet. Int0 ist auf steigende Flanke eingestellt, Int1 auf fallende. Löst Int0 aus, so wird ein Timer gestartet, welcher eine Variable hoch zählt. Löst nun Int1 aus, so wird der Timer gestoppt und die Variable ausgewertet. Entspricht die gemessene Zeit der Bedingung für eine log. 1 (+Fehlertoleranz), so wird das erste Bit einer Datenvariable auf log. 1 gesetzt. Entspricht sie der Bedingung einer log. 0, so wird das Variablenbit auf log. 0 gesetzt. Entspricht die gemessene Zeit selbst mit Fehlertoleranz keiner von beiden Bedingungen, so wird einfach nichts gemacht.
Als Präambel (Startzeichen, das jetzt ein Datentelegramm vom Sensor kommt) werden 7-10 mal log. 0 gefolgt von einer logischen 1 gesendet. Es muss also mind. 7 mal der Zustand 0 gefolgt von log. 1 empfangen werden. Auf die Art wird ein Bit nach dem anderen der Datenvariable gesetzt. Da die Funksensoren im 4 Bit Modus senden, ist die erste Datenvariable nach 4 Bits bereits fertig. Nach einem Trennbit, welches immer log. 1 ist, folgen dann die Bits für die zweite Datenvariable. Im Programm gibt es daher auch für den log. 0 Zustand eine Zählvariable. Ist diese größer gleich 7 UND das letzte empfangene Bit ist log. 1, dann beginnt gerade ein Sensortelegramm. Alles weitere wurde oben bereits genauer beschrieben.
Danach folgt als erstes der Sensortyp, wovon es 6 gibt. 0= Temperatursensor (Nur WS2000), 1= Temperatur und Feuchtesensor, 2=Regensensor, 3=Windsensor, 4=Innensensor mit Temperatur, Feuchte und Luftdruck (Nur WS2000), 5=Helligkeitssensor (nur WS2500). Gefolgt von der Sensoradresse. Bei den Temperatursensoren kann diese mittels Steckbrücken eingestellt werden, während sie bei Regen, Wind, Helligkeit und dem Innensensor fest verlötet sind und auf 7 stehen. Nach diesen beiden ersten „Bytes“ (Anführungszeichen-Zeichen daher, da ja nur 4, statt wie üblich 8 Bit) kommen nun die eigentlichen Daten. Nach jedem „Byte“, also jedes 5. Bit, ist eine log. 1 als Trennzeichen.
Diese Daten fasst der Atmega16 zu Zahlenwerten zusammen, verarbeitet sie und gibt sie letztlich alle 5 Minuten über seine UART Schnittstelle aus, welches dann wie folgt aussieht:
Code: Alles auswählen
02.08.2014;01:15;20.1;79.4;259;14.2;135;1014;0#
Datum;Zeit;Temperatur2m;Feuchte2m;Zählerstand Regensensor;Windgeschwindigkeit;Windrichtung;Luftdruck;Helligkeit#
Das Semikolon stellt hierbei das Datenrennzeichen dar und ist damit kompatibel zu dem CSV Standart, welcher bei MS Excel Anwendung findet.