Projekt 'Wetterstation' (Basismodell)

Inhalt:


!!!!!! In Bearbeitung !!!!!!!!

Das Wetterprogramm -einmal gestartet- arbeitet im Multitasking mit anderen Programmen. Beispielsweise kann parallel dazu mit WSJT-X (FT8) Amateurfunk betrieben werden.


Bei diesem Projekt geht es um das Verständnis des Systems - nicht um die elegante Programmierung mit Python. Das Script ist einfach und 'linear' aufgebaut, teilweise ohne komplizierte Funktionsaufrufe mit Rückgabewerten. Wer Lust hat, kann eine Optimierung selber bewerkstelligen.

Basismodell

Stand 20. Mai 2019


Realisierte Funktionen des Basismodells:

- 6 Threads (Telprogramme) für 3 Wetter-Sensoren, 1 LED, Temperatur CPU, 1 Gas-Sensor
- 1 Sensor DHT22 Temperatur-/Feuchtigkeit - Aussenbereich, mit Kabel verbunden
- 1 Sensor DHT22 Temperatur-/Feuchtigkeit - Innenbereich 1
- 1 Sensor BMP280 Luftdruck (und Temperatur) - Innenbereich 2 an der Station
- 1 Gas-Sensor Figaro TGS2600 (Diverse Gase wie Methan)
- 24h Minimum/Maximum-Anzeige
- Tendenz-Anzeige miitels Canvas
- Anzeige/Manuelle Rücksetzung des csv-Speichers
- Anzeige CPU-Temperatur (linker Frame, unten)
- Midnight Reset: 00 Uhr
- LED-Ansteuerung
- Button für Web-Zugriff (Bio-Wetter)
- Protokollierung im Terminal
- 4 Demo-Plots (History) als Beispiele
- Eingabe eines einfachen Memos
- Web Uhr/Wecker aus dem Internet
- VNC Uebertragung über Internet

Daten:
Stromverbrauch bei 5V: 0.25 A -> ca. 8.8 kWh/Jahr
Dies entspricht etwa Fr. 2.-- Stromkosten pro Jahr
Auslastung CPU: ca. 1% (ohne Webcam)

Kurzbeschreibung
Bei Programmbeginn starten 6 Threads (Teilprogramme), die unabhängig voneinander arbeiten. Diese sind einfach und linear programmiert, was die Uebersichtlichkeit verbessern soll.

Im Thread 1 und 2 werden die Sensoren DHT22 (Temperatur/Luftfeuchtigkeit) je zweimal ausgelesen, In Thread 4 wird der Sensor BMP180 (Druck/Temperatur) einmal ausgelesen. Threas 5 liest die CPU-Temperatur des Rechners aus und zeigt sie auf dem linken 'Control-Panel' an. Dort sind Schieberegler zur Steuerung der Abfrageintervalle vorhanden. Thread 6 steuert den Gas-Sensor.
Alle Sensor-Daten werden als aktuelle Werte im Display (Panel) angezeigt und als historische Daten in einem seriellen Speicher (csv) gespeichert.

Thread 1: Abfrage Aussensensor DHT22
- Definition lokaler Variablen
- Auslesen Aussensensor via GPIO (Run 1)
- Ausgabe an Terminal und Display
- Delay
- Auslesen Aussensensor via GPIO (Run 2)
- Ausgabe an Terminal und Display
- Bestimmung des Trends
- Bestimmung des heutigen Maxima/Minima
- Rücksetzung um Mitternacht
- Speicherung der Daten mit Zeit in einem csv-File zwecks Realtime-Plotting

Thread 2: Abfrage Innensensor
- analog Aussensensor

Thread 3: Kurzes Abfrageintervall
- Diverses
- Mitternachts-Rückstellung des Speichers

Thread 4: Luftdruckmessung
- Definition lokaler Variablen
- Auslesen des I2C Bus
- Kalkulationen von Druck und Temperatur
- Delay
- Ausgabe der Resultate
- Bestimmung des Trends
- Bestimmung des heutigen Maxima/Minima
- Rücksetzung um Mitternacht
- Delay

Thread 5: CPU Temperatur
- Auslesen aus Pi
- Anzeige im Display (links unten)

Thread 6: Gas-Sensor
- Kalibrierung an der Umgebungsluft
- Analog/Digitalwandler (ADC) in 16 Stufen
- Anzeige im Display
- Alarmsirene

csv File als Speicher für Temperatur und Zeit

Schritt für Schritt Bauanleitung Basismodell

Schritt 1
Raspberry Pi Desktop installieren
Unter Einstellungen-Raspberry Pi Konfiguration-Schnittstellen:
- SSH aktivieren
- VNC aktivieren
- I2C aktivieren
Internet anschliessen (WLAN oder LAN)
Raspbian Stretch auf Updates prüfen


Schritt 2
Terminal öffnen und folgende Programme installieren:
- Adafruit
git clone https://github.com/adafruit/Adafruit_Python_DHT.git && cd Adafruit_Python_DHT
sudo python setup.py install


Dieses Script ermöglicht uns, Sensoren auf einfache Art zu testen.
Später werden im Hauptprogramm die Daten damit eingelesen

Matplotlib
Dieses Programm benötigen wir zum plotten von Diagrammen:
Laden über die Paketinstallation des Pi
(mehrere Pakete)

Nun starten wir den Pi erneut:
sudo reboot


Schritt 3
Anlegen/Löschen eines Ordners auf dem Raspberry Pi:
cd (Gehe in die Ausgangsstellung Verzeichnis)
cd /home (Wechsle in das Verzeichnis „home“)
sudo mkdir PRIG (Anlegen des Ordners „PRIG“)
ls (Kontrolle durch den Befehl „List“ )

Anschliessend noch die Berechtigung Schreiben/Lesen erteilen:
sudo chmod 777 /home/PRIG

Damit können wir das Script unseres Projektes in einem eigenen Ordner bearbeiten und starten.
Dort werden später auch die csv-Speicher durch das Hauptprogramm angelegt.

Schritt 3

Erstellung des Programm-Ordners 'PRIG'



Schritt 4

Download von 3 Files von der Website PRIG:
- provisorische Programm-Version: mai13.py [57 KB] - mp3 Audio-File .... (Alarm-Ton)
- GIF-File als Bild zum Benutzer-Panel
Nun mit 'copy und past' die 3 Files vom Download-Ordner in den neu erstellten Ordner 'PRIG' kopieren


Schritt 5
- Aus dem Ordner PRIG mit der rechten Maustaste das Programm mit Geany öffnen
oder
- Geany öffnen und das Programm .... im PRIG-Ordner öffnen

- Starten mit F5
Nun sollte das Wetterprogramm auch ohne Sensoren starten, gibt allerdings beim Drücken einiger Tasten Fehlermeldungen auf dem Terminal aus.

Basismodell

Stand 20. Mai 2019



Schritt 6

Nun werden die Snsoren einer nach dem andern installiert und getestet:

Installation DHT22 für Aussensensor (Outdoor)
Der linke Pin des Sensors wird an 3V3 von Pi (Pin1) angeschlossen, der zweite Sensor Pin über einen Pull-Up Widerstand (4.7k – 10kΩ) mit einen freien GPIO des Raspberrys (bei mir GPIO4, Pin7) und der rechte Senior Pin kommt an GND (Pin6) vom Pi. Der zweite Pin von rechts des Sensors bleibt frei.

Der Sensor für Innen (Indoor) wird an GPIO22 angeschlossen

Installation des DHT22


Testen mit Adafruit
mit ...
cd
cd Adafruit_Python_DHT

gelangen wir in den Ordner 'Adafruit', wo wir verschiedene Testroutinen finden:
cd examples

Mit dem Befehl ....
sudo ./AdafruitDHT.py 22 4

... können wir nun den Sensor auslesen

Testen des Sensors DHT22


Installation des Gas-Sensors TGS2600
Der Sensor wird normalerweise mit 5 Volt beheizt (Pins 1 und 4). Wir verwenden aber die Logikspannung von 3.3 Volt von einem kleinen Speisegerät auf dem Breadboard. Damit wird der GPIO des Raspberry Pi entlastet







Gas-Sensor Figaro TGS2600


Pin 3 (+ Elektrode) und 4 (Heater) werden folglich an 3.3 Volt gelegt. Pin 1 (Heater) wird an Ground geschaltet.

Montage des Gas-Sensors


Pin 2 (- Elektrode) ist Mittelpunkt eines Widerstandsnetzwerkes, das als Analog/Digital-Wandlers dient. Siehe dazu folgende Abbildung.

Der Widerstand RL muss so gewählt werden, dass das Programm auf Level 2 oder 3 bei frischer Luft kalibrieren kann.
20 kOhm sollten in etwa richtig sein. Dazu aber mehr etwas später.

Anschluss des Sensors


Nun schliessen wir im nächsten Schritt den kombinierten Sensor BMP220 über des I2C.Bus an


Schritt 7

Da der BMP220 Sensor über den I⊃2;C Bus arbeitet, muss dieser erst freigeschaltet werden, da er standardmäßig deaktiviert ist (falls du das bereits getan hast, kannst du zum nächsten Kapitel springen).

Wir bearbeiten dazu erst folgende Datei:

sudo nano /etc/modules

An das Ende der Datei werden diese beiden Zeilen hinzugefügt:

i2c-bcm2708
i2c-dev

Mittels STRG+O und STRG+X speichern und beenden wir.


Testen des I2C-Bus

Nun installieren wir noch drei benötigte Tools:

sudo apt-get install python-smbus i2c-tools git

und dann mit ...

i2cdetect -y 1

... kann die Adresse ausgelesen werden. Hier 77

Auslesen des I1C-Bus



Schritt 8

- Starten des Programms mit F5 unter Geany
- Nach ca. 20 Sekunden sollten die aktuellen Werte auf dem Panel angezeigt werden.
Ist dies nicht der Fall, müssen die Schritte 6 und 7 überprüft werden
- Die csv-Speicher werden erst nach einigen Minuten erstellt. Erst dann sind Plots von Temperatur, Luftfeuchtigkeit, ... aufzurufen

- Start des Programms im Terminal
cd /home/PRIG
sudo python test.py (test.py oder Name des Programms)

mit 'Kühler-Taste' und 'Canvas'


Schritt 9 Autostart

Cronjobs sind Skripte oder Aufgaben, die zu einem bestimmten Zeitpunkt automatisch vom System ausgeführt werden sollen.
- Crontab konfigurieren
Folgendes Beispiel führt unser Script beim Systemstart unter dem Benutzer root aus:

@reboot root /root/scripts/wetterprogramm.py

Es muss mit 'copy/past' eingegeben und gespeichert werden.

Noch nicht getestet .............

Crontab

Schritt 10

mmmmmmmmmmmmmmmmmmmmm
Sudo reboot

mmmmmmmmmmmmmmmm

1. Programm-Anpassungen
Anpassungen und Weiterentwicklung des Programms erfolgen am besten von einem PC aus via VNC. Auf dem Raspberry Pi ist der VNC Server bereits gesetzt. Dort muss man nichts machen.

Auf dem PC (Bild) muss noch ein VNC Viewer geladen werden.

Dies sieht dann etwa wie folgt aus:

VNC Viewer (hier Windows)



Für Anpassungen benutzt man am besten 'Geany' auf dem Pi selber. Die Programmelemente findet man auf der linken Seite:

Programm-Elemente

Beispiel: Plot


Geany speichert alle Aenderungen sofort.
Es ist deshalb von Vorteil, vor jeder Anpassung einen Back-up mit Datum im Programmordner abzuspeichern.


2. Höhe über Meer im Programm einsetzen

Die genaue Höhe über Meer kann in der Schweiz mit SwissTopo bestimmt werden
https://map.geo.admin.ch

Bei mir ist die Höhe 651.8m plus die Höhe über Boden, also total etwa 655m.
Diese Höhe muss im Programm (task4) am Anfang eingetragen werden

Höhe über Meer

Bei Wohnort mit der rechten Maustaste die Höhe ablesen



3. Anpassung der Systemfarbe

Durch Aenderung der Definition 'syscolor' kann das Erscheinungsbild geändert werden
Zum Beispiel sieht bei syscolor = "#585858" das Bild wie folgt aus:

syscolor = "#585858"

Freitag, 14. Juni 2019 - 12:59 Uhr
zu BMP280

guenstige Alternative

Montag, 20. Mai 2019 - 20:10 Uhr
zu Gas

Text
Kalibrierung zu 3 (offenes Fenster) und 4 (Fenster zu)
Kurzer Stoss von COOP Duftspray Richtung Sensor

Montag, 20. Mai 2019 - 19:33 Uhr
zu Gas-Sensor

Nominalspannung der Heizung ist 5 Volt, Der Sensor funktioniert aber auch mit 3.3 Volt. Ein separates Speisegeraet schuetzt den GPIO vor Beschaedigung.

Der Widerstand des Sensors betraegt zwischen 10 .. 90 kOhm in Luft
Fuer unser Projekt verwenden wir RL=47 kOhm. Somit betraegt die Spannung am Eingang von GPIO 23 etwa 1 Volt, also knapp ueber dem Treshold. Durch Zuschalten von 4 Parallewiderstaenden in 16 'Binaerkombinationen' wird die Spannung in diesen 16 Stufen reduziert.

Mit diesem Widerstandsnetzwerk kalbriert das System bei frischer Luft (offenes Fenster) zu Level 3.

Admin