Wetterstation über Funk 868 MHz

To top

Wetterstation U02-WX

Bei Funkamateuren wird meist die Wetterstation WS2300 (oder baugleiche) benutzt, da diese eine serielle Schnittstelle hat wo man die Wetterdaten abholen und nach APRS weitersenden kann. Bisher haben wir ein WlAN-Interface benutzt um die Wetterdaten nach APRS zu senden  Nachdem es keine Ersatzteile für diese Geräte gibt und außerdem die Anzahl der Sensoren erhöht werden sollte, war die Idee zum Selbstbau geboren.

Die neue U02-Wetterstation muss viele Sensoren verarbeiten können um außer Innen- und Außentemperatur auch z.B. den Taupunkt im Keller zu messen, die Heizung zu überwachen, die Shack-Temperatur  und vieles andere mehr.

Die Präsentation der Wetterdaten erfolgt in jedem beliebigen Web-Browser.

Außerdem sollen an unserem Relaisstandort am Großen Arber (DB0ARB) die Wetterbedingungen gemessen und über das Internet einsehbar sein.

Die neue U02-Wetterstation besteht aus Sensoren (min.1 bis max. 63 Stück) und einem Empfänger mit Webserver auf Basis eines Mini-Computers (Raspi, Odroid usw).

Benötigte Teile:

* 1 bis max. 63 Sensoren
* FSK Empfänger (USB)
* Einplatinencomputer (Raspi, Odroid … mit Linux)
* zur Präsentation irgendein PC, Tablet, Smartphone.

Maximalausbau:

der maximale Ausbau ist durch das Datenformat begrenzt und könnte später noch erweitert werden. Die derzeitigen Grenzwerte sind:

max. Anzahl der Sensoren: 63
max. Anzahl an Sensortypen: 16
(als Typ zählt: Temperatur, Luftdruck, Wind usw. Ein einzelner Sensor (zählt als „ein“ Sensor) kann gleichzeitig maximal 16 verschiedene Typen auf seiner Platine haben.)

Anforderungen:

an den Mini-Computer werden keine besonderen Anforderungen gestellt, sodass jeder alte Rapi oder ähnliches benutzt werden kann.
Das Betriebssystem muss Linux sein (Ubuntu, Raspbian oder andere).

Sensoren:

Jeder Sensor besteht aus folgenden Teilen:
* ein bis max. 16 Sensorchips bzw. externen Sensoreingängen
* Micropower Microcontroller zur Datenverarbeitung
* Sender auf 868,15 MHz mit ca. 5mW

Jeder Sensor befindet sich im Schlafzustand bei minimalem Stromverbrauch (eine uA). Alle ca. 10 Minuten wird er geweckt und führt dann folgende Aktionen aus:
* Messung des Batteriezustands
* Messung der Sensoren
* Aussenden der Daten
* zurück in den Schlafzustand

Eine Aussendung dauert < 0,5s, bei dem 10 Minuten Sendeintervall beträgt die Sendeaktivität also 0,083% der Zeit. Das ist so kurz, dass der Stromverbrauch des Senders kaum auf die Batterielebensdauer Einfluss hat.

Empfänger:


Als Empfänger kann jeder Linux PC, Minicomputer o.ä. benutzt werden. Es wird ein USB Anschluss benötigt.

Der Funkempfänger ist eine kleine Platine mit einem Mipot-20001270 Empfänger zusammen mit einem FT232RL Seriell/USB Wandler. Diese Platine wird in einen freien USB Anschluss des Computers gesteckt.


Der Funkempfänger wandelt die Sensorsignale in einen seriellen Datenstrom um welcher von der Software im Computer gelesen und in Log-Dateien gespeichert wird.


In diesem Linux Computer läuft der Apache-Webserver, welcher bei allen Linuxinstallationen zum Standard gehört. Für diesen Webserver gibt es in Javascript programmierte Webseiten. Diese lesen die Log-Dateien mit den Wetterdaten aus und erzeugen die Bilder und Texte welche dann als Webseite präsentiert werden.


Zur Anzeige kann jedes beliebige Gerät mit Webbrowser (getestet mit Firefox) benutzt werden.

Wenn man im Router (z.B.: Fritzbox) den Port 80 (TCP) auf diesen Computer umleitet, so sind die Wetter-Webseiten weltweit einsehbar.


Der Empfänger besteht aus folgenden Teilen:


* Linux-Computer (Raspi, Odroid, Orange-Pi …. usw. oder jeder Desktop Linux PC)

* Funkempfänger 868,15 MHz FSK mit seriell-USB Wandler

* Empfängersoftware

* Webseiten-Software


Abschätzung der Batterielebensdauer:


Ein 10-Minuten (600 Sekunden) Intervall teilt sich auf in:

0,5s … Aktiver Zustand mit 15 mA Stromaufnahme

599,5s … Schlafzustand mit 5uA Stromaufnahme


bezogen auf 1 Stunde ergibt das:

3s mit 15mA

3597s mit 5 uA


der Batterieverbrauch ist also: 3597*5e-6/3600 + 3*15e-3/3600 = 0,017mAh

Die CR2032 Knopfzelle hat 240mAh, also ist die Batterielebensdauer 240 / 0,017 = 571 Tage oder ca. 2 Jahre. Bei Einsatz von zwei AA Zellen ist die Laufzeit länger als die Selbstentladung der Batterie.



 

 

Details

To top

Funkübertragung:


Sender (auf jeder Sensorplatine):


  • Sender-Chip: Texas Instruments TDA5150 programmiert auf 868,15 MHz und ca. 5mW Ausgangsleistung.

  • Frequenzkonstanz mit 13 MHz Quarz wurde mit ca. 200 Hz gemessen.

  • Hub: 35 kHz

  • Datenrate: 9600 bps

  • Antenne: Lambda/4 Antenne: Draht mit ca. 75mm Länge


Empfänger (USB):


  • MIPOT 20001270 Funkmodul, eingestellt auf 868,15 MHz

  • FT232RL Seriell-USB Wandler

  • Versorgung aus der USB 5 Volt


Datenformat:


es hat sich gezeigt, dass nur ein 32 Bit CRC eine sehr gute Übertragungsqualität bringt. Ein 16 bit CRC hat hin und wieder Fehlübertragungen zugelassen.


Ein Datensatz hat dieses Format:


Byte 0 … 0x55 (Preamble, hilft dem RX zu synchronisieren)

Byte 1 … Bit 0-5: SensorID 0 bis 63, Bit 6,7: fortlaufende Framenummer 0,1,2 oder 3

Byte 2 … Bit 0-3: MSB der Sensordaten, Bit 4-7: Sensortype

Byte 3 … Bit 0-7: LSB der Sensordaten

Byte 4 und folgende: Für jeden weiteren Sensor 2 Byte, so wie Byte 2 und 3.

Byte x … Länge der Nutzdaten in Byte, beginnend bei 1 bis inkl. dem Längenbyte

Byte x+1 ... CRC 32 MSB
Byte x+2 ... CRC 32
Byte x+3 ... CRC 32
Byte x+4 ... CRC 32 LSB, (CRC von 1 bis inkl. Länge)

Scrambling:


es erfolgt ein primitives Scrambling indem jeder Wert XOR 0x39 genommen wird.


Der fertige Datensatz wird dann seriell mit 9600 Bd, 2-Stopbits, über Funk übertragen. Jeder Datensatz wird 6x übertragen um die Chance zu erhöhen dass er einmal richtig ankommt. Mehrfachübertragungen sortiert der Empfäner aus, was er anhand obiger Framenummer (Byte 1) erkennen kann.


Empfängersoftware:


vom Empfänger werden laufend Daten geliefert, auch wenn gerade kein Sensor sendet, denn das normale Empfängerrauschen erzeugt zufällige Empfangsdaten. Diese Daten werden von der Software „pcif“ empfangen und durch einen Puffer geschoben.

Dabei wird nach jedem empfangenen Byte geprüft, ob eventuell ein gültiger CRC vorliegt. Sobald ein korrekter CRC gefunden ist, wird der Datensatz zur Weiterverarbeitung freigegeben.


Die Software liest Sensor-ID, Sensortyp und die Messdaten und legt diese in verschiedenen Log-Dateien ab. Diese Log-Dateien werden direkt in das Verzeichnis des Webservers geschrieben.


Die Logdateien sind:


wx.txt … komplettes Log mit allen Sensoren und allen Messdaten. Diese Datei dient nur der Archivierung und wird sonst nicht mehr benötigt.


Dateien zur Anzeige des aktuellen Messwerts haben den Dateinamen:


axxyy.txt

xx … Sensor ID

yy … Sensor Typ

der Inhalt der Datei ist der Messwert, also z.B. die aktuelle Temperatur. Für jeden Sensor und jeden Sensortyp wird eine eigene Datei angelegt.


Dateien zur Anzeige des Diagramms haben den Dateinamen:


sxxyy.csv

xx … Sensor ID

yy … Sensor Typ

diese Dateien werden fortlaufend beschrieben, werden also im Laufe der Zeit immer größer. Sie enthalten sämtliche Messwerte eines Sensors und eines Sensortyps.

Der Inhalt der Datei ist im CSV Format (Komma getrennte Werte):

Datum Uhrzeit, Messwert, Mittelwert über 3 Stunden


Durch das CSV Format kann diese Datei auch einfach in Excel importiert werden um z.B. irgendwelche falschen Werte zu korrigieren, wie sie zum Beispiel beim Batteriewechsel entstehen könnten.


Sensor ID:


das ist eine beliebige Nummer zwischen 1 und 63 welche beim Flashen der Sensoren vergeben wird. Jeder Sensor muss eine eigene Nummer haben, daher kann man max. 63 Sensoren betreiben.


Zur besseren Lesbarkeit wird jeder Sensornummer ein Klartext-Name zugeordnet. Das macht man in der Datei „sensornamen.txt“. Hier steht zuerst die Sensornummer gefolgt von einem Leerzeichen und danach der Name.


Beispiel:

1 Wohnzimmer
2 Terrasse
3 Keller
4 Gartenlaube

usw. bis max 63

Sensor Typ:


jeder Sensor kann bis zu 16 verschiedene Messwerte liefern.

Derzeit sind definiert:

Typ 0 … Temperatur

Typ 1 … Luftdruck

Typ 2 … Luftfeuchtigkeit

Typ 3 … Batteriespannung


weitere folgen….



Sensor – Schaltungsbeschreibung:


Contoller, Schlaf/Wach-Betrieb:

Das Herz der Schaltung ist ein Atmel ATmega88PA Microcontroller. Das ist ein Pico-Power Controller der mit wenigen uA Strom im Sleep-Betrieb auskommt. Während der Schlaf-Phase tickt im Controller ein Micro-Power-Taktgenerator welcher den Controller alle 10 Minuten aufweckt.


Batteriemessung:

Als erste Aktion wird die Batteriespannung gemessen. Da diese nicht direkt gemessen werden kann wird ein Umweg eingeschlagen. Der Atmel Controller hat eine interne Referenzspannung. Leider ist diese nicht genau genug und muss zunächst kalibriert werden. Das wird gemacht indem die externe Präzisionsspannungsquelle, LM4120, über die EN Leitung aktiviert wird. Durch Messung dieser Präzisionsspannung kann der Controller seinen eigenen Fehler ermitteln.

Jetzt wird die Batteriespannung gemessen und der vorher bestimmt Fehler berücksichtigt. Damit lässt sich die Spannung der Batterie auf 1/100 Volt genau bestimmen.


Temperatur:

Als nächstes wird über den Transistor T9 die Versorgungsspannung zu den Sensoren und den Sender freigegeben. Die erste Messung erfolgt im TMP112 Präzisions-Temperatursensor. Die Daten werden über den I2C Bus ausgelesen. Dieser TMP112 ist grundsätzlich immer vorhanden und die Mindestbestückung einer Sensorplatine.


Luftdruck und -feuchtigkeit:

Jetzt wird geprüft ob der BME680 Sensor bestückt ist, wenn ja, dann wird Temperatur, Luftdruck und Feuchte ausgelesen. Die Temperaturmessung dieses Sensors ist nicht besonders genau, sie wir ausschließlich zur Kalibrierung von Druck und Feuchte benutzt, da alle Sensoren auf dem gleichen Chip sitzen. Der BME680 gibt die Daten in einem sehr komische Rohformat aus. Sie müssen jetzt im Microcontroller umgerechnet werden, was ca. 80% des ganzen Flash-Speichers belegt. Bosch hat hier beim BME680 die ganze Rechenarbeit ausgelagert und dem Anwender überlassen.


Weitere Messungen:

die Sensorplatine hat noch zwei digitale Eingänge, zwei analoge Eingänge und eine serielle Schnittstelle zum Anschluss von externen Sensoren. Diese werden bei Bedarf jetzt bearbeitet.


Senden der Daten:

Jetzt wird der TDA5150 Sender aktiviert und die Daten als FSK Signal mit 9600 bps ausgesendet. Die Anpassschaltung zwischen TDA5150 und Antenne wurde dem Datenblatt entnommen und für die Lamda/4 Drahtantenne optimiert.


Jetzt ist alles erledigt, die Versorgungsspannung wir ausgeschaltet und der Contoller geht für die nächsten 10 Minuten in den Schlafzustand.


Empfänger - Schaltungsbeschreibung:


Zum Empfang der seriellen Daten wird ein Funkmodul des Herstellers MIPOT benutzt, das 20001270. Dieses FSK Modul empfängt die Daten und wandelt sie in ein serielles Signal um. Um den Anschluss an einen Computer so einfach wie möglich zu machen wurde das Empfängermodul mit einem FT232RL seriell/USB Wandler ergänzt.


Im Computer meldet sich das Modul als seriellen Device ttyUSB0 (oder anderer Nummer) an und kann dort einfach ausgelesen werden.


Auf der Platine befinden sich noch umfangreiche Entstör-Tiefpässe damit die unvermeidlichen Computer-Störungen nicht zum Funkmodul gelangen.


Die Versorgung der Platine erfolgt über die USB 5 Volt.


Diese Website nutzt ausschließlich technisch erforderliche Cookies. Wir benutzen keine Cookies, die eine Einwilligung erfordern würden. Weitere Informationen finden Sie in unserer Datenschutzerklärung. X