Stacja Pogodowa

By | Marzec 23, 2020

Poniżej przedstawiam opis 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://tech4.pl/SQ9MDD/?p=626
http://tech4.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.

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.

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

#define SEALEVELPRESSURE_HPA (1013.25)

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("*");
  Serial.print(bme.readPressure() / 100.0F);
  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_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 ##################################################

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 doinstalowanego pakiety pyserial. Aby to naprawić należy go doinstalować używając komendy:

sudo pip install pyserial

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.