Stacja Pogodowa cz.1 Podstawowe Parametry.

By | Czerwiec 29, 2020

Poniżej przedstawiam pierwszą część opisu prostej stacji pogodowej, która jest dodatkiem do już istniejącej instalacji Digi APRS opartego na oprogramowaniu APRX.

Dla kogo jest przeznaczona stacja pogody

Stacja pogodowa jest przeznaczona jako rozszerzenie funkcjonalności już istniejącej stacji domowej opartej o Raspberry Pi i APRX-a, której budowę opisywałem wcześniej w tych postach:
http://hamspirit.pl/SQ9MDD/?p=626
http://hamspirit.pl/SQ9MDD/?p=559

Elektronika.

Budowę podstawowej wersji stacji pogodowej rozpoczynamy od zakupu arduino nano, oraz czujnika temperatury, wilgotności i ciśnienia, BME280.

Czujnik temperatury,wilgotności i cisnienia.

Arduino nano.

Następnie łączymy za pomocą przewodu o długości 15cm czujnik BME280 z arduino, według schematu poniżej.

Łączymy:
– zasilanie 3,3V do Vin czujnika,
– GND arduino z GND,
– pin A4 arduino z pinem SDA czujnika
– pin A5 arduino z pinem SCL czujnika

Hardware.

W serwisie thingiverse.com znalazłem świetną obudowę do czujników, którą po wydrukowaniu montujemy, jak na zdjęciu poniżej. Zamiennie można też użyć białych podstawek pod doniczkę o odpowiedniej średnicy.

Wydrukowane elementy osłony czujnika.

Zmontowana osłona czujnika

Ważne by czujnik był oddalony od arduino tak by ciepło wydzielane przez pracujący układ nie podgrzewało czujnika i nie powodowało zafałszowania pomiarów. Dlatego moduł arduino montujemy w małej wodoszczelnej puszce, w pewnym oddaleniu od osłony czujnika.

Programowanie arduino.

Program do arduino znajduje się pod tym linkiem i jest to bardzo prosty skrypt, który po resecie urządzenia wysyła odczytane dane. Dane są wysyłane w formacie ascii na port szeregowy w postaci ciągu znaków gdzie poszczególne pola danych są oddzielone symbolem „*”, co pozwoli na późniejszą łatwą obróbkę tych danych za pomocą skryptu napisanego w Pythonie, który będzie przygotowywał zawartość ramki pogodowej.

Jako że w meteorologii używamy odczyty ciśnienia znormalizowane do poziomu morza to musimy jeszcze poprawnie skalibrować czujnik ciśnienia.
Przed wgraniem skryptu do arduino sprawdzamy na mapach wysokości położenie miejsca instalacji, dodajemy wysokość montażu czujnika nad gruntem i całą wartość w metrach wpisujemy w oznaczone miejsce w skrypcie. Możemy też tę wartość wpisać w pythonie wtedy wartość w skrypcie arduino powinna być zero. Chodzi o to by nie powielać informacji o wysokości w dwóch miejscach.

#define above_sea_lvl 125 //<-- kalibracja wysokosci montazu czujnika n.p.m.

Do sprawdzania wysokości n.p.m. używałem mapy pod adresem: http://www.wysokosc.mapa.info.pl

Poniżej kompletny kod który należy wgrać do arduino z podłączonym czujnikiem.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define SEALEVELPRESSURE_HPA (1013.25)
#define above_sea_lvl   125             //<-- kalibracja wysokosci montazu czujnika n.p.m.
Adafruit_BME280 bme;

void setup() {
  Serial.begin(9600);

  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
  delay(1000);
  Serial.print("WAAPS300");
  Serial.print("*");
  Serial.print(bme.readTemperature());
  Serial.print("*");
  float hPa_offset = float(above_sea_lvl) * 0.10933;
  Serial.print((bme.readPressure() / 100.0F) + hPa_offset );
  Serial.print("*");
  Serial.print(bme.readHumidity());
}

void loop() {
  delay(1000);
}

Konfiguracja APRX

Po podłączeniu za pomocą USB arduino nano do Raspberry Pi, musimy zmusić oprogramowanie APRX do wysyłki danych pogodowych. Jest to zadanie bardzo łatwe. W pliku konfiguracyjnym programu (/etc/aprx.conf) musimy dodać sekcję odpowiedzialną za wysyłkę danych przez radio. Używamy tutaj metody „beacon exec” co oznacza że APRX sam uruchamia wskazany skrypt co zadany interwał czasu. Znak i SSID użyty do wysłania danych pogodowych definiujemy w tym miejscu.

<beacon>
 beacon mode APRSIS
 cycle-size 10m
 beacon srccall SQ9MDD-5 exec /home/pi/wx.py
</beacon>

Programowanie w Pythonie

Po skonfigurowaniu APRX-a musimy ściągnąć skrypt pogodowy który znajdziemy w serwisie Github. Logujemy się do raspberry pi za pomocą protokołu ssh (programem putty) i używamy do tego celu komendy wget będąc w katalogu domowym:

wget -t0 -c https://raw.githubusercontent.com/SQ9MDD/WAAPS/master/wx.py

Następnie musimy dodać atrybut wykonywalności tak by skrypt działał jak program:

sudo chmod +x wx.py

Aktualna wersja skryptu generuje ramkę zawierającą dane które są odczytywane z czujnika BME280 oraz koordynaty i komentarz.  Konfigurujemy skrypt używając edytora nano do edycji pliku:

sudo nano /home/pi/wx.py

Po otwarciu pliku zobaczymy jego zawartość, skupiamy się na sekcji konfiguracyjnej, gdzie edytujemy koordynaty geograficzne naszej stacji, oraz komentarze.

################################### CONFIGURATION #######################################################
#                                                                                                   	#
wx_lat      	        = '5215.01N'                     	# coordinates APRS format           	#
wx_lon      	        = '02055.58E'                    	# coordinates APRS format           	#
wx_altitude             = '0'                                   # meeters above sea lvl                 #
wx_comment  	        = 'WAAPS300 WX station on tests'   	# beacon comment		        #
wx_err_comment 	        = 'No WX data'				# comment when no data avaiable		#
ardu_wx_modell          = 'WAAPS300'                        	# WAAPS300 - basic modell Temp.Rh.Baro  #
ardu_wx_seriall         = '/dev/ttyUSB0'                        # Where your WX is connected to         #
ardu_wx_speed           = 9600                              	# Serial port speed                     #
#										      	                #
######################## DO NOTE EDIT BELLOW THIS LINE ##################################################

Należy też wskazać tutaj port szeregowy pod którym znajdzie się nasza stacja pogodowa po podłączeniu. Można to łatwo sprawdzić wydając przed i po połączeniu komendę:

  ls -l /dev/tty*

Będzie widać czy po podłączeniu pojawił się jakiś nowy port.

Po zapisaniu zmian możemy wywołać skrypt, by skontrolować jego działanie:

sudo /home/pi/wx.py

Jeśli okaże się że zamiast spodziewanego wyniku otrzymamy komunikaty błędu to najprawdopodobniej nie mamy zainstalowanego pakietu pyserial. Aby to naprawić należy go doinstalować używając komendy:

sudo pip install pyserial

Lub jeśli pip jest nie zainstalowany to możemy użyć komendy:

sudo apt install python-seriall

Jeśli wszystko jest poprawnie zainstalowane to po uruchomieniu skryptu  powinniśmy zobaczyć coś podobnego do tego poniżej:

!5215.01N/02055.58E_…/…g…t075h27b10110 WAAPS300 WX station on tests

Stacja pogodowa, rozszerzenie do APRX działa poprawnie.

r.