Stacja pogodowa na Raspberry Pi

Stacja pogodowa na Raspberry Pi
Pobierz PDF Download icon
Fundacja Raspbery Pi wysłała do szkół na całym świecie ponad 10 tysięcy stacji pogodowych opartych na module HAT z zestawem potrzebnych sensorów. Teraz każdy w domu może skonstruować taką stację pogodową na bazie zaproponowanych modułów z sensorami lub po prostu samodzielnie łącząc układy scalone z komputerem jednopłytkowym Raspberry Pi.

Opisywany projekt stworzony został przez Fundację Raspberry Pi, jako prezentacja ciekawego wykorzystania tego komputera jednopłytkowego. Każdy może skonstruować zaprezentowaną stację pogodową lub też wykorzystać poszczególne elementy, aby zintegrować je ze stacją pogodową własnego projektu. Projekt pokazuje, jak podłączone i oprogramowane są poszczególne sensory, więc nadaje się także dla osób, które wcześniej nie miały zbyt wielkiego doświadczenia z Raspberry Pi, programowaniem w Pythonie czy systemem operacyjnym Linux.

Co będzie potrzebne

Na rynku dostępnych jest wiele sensorów, które można wykorzystać do konstrukcji stacji meteorologicznej. Nie ma konieczności wykorzystywania dokładnie tych samych układów, jakie użyte są w tym projekcie, jednakże, jeżeli zmienimy wykorzystywane sensory, może wystąpić konieczność wprowadzenia zmian do bibliotek i programów napisanych w Pythonie, które zaprezentowane są poniżej.

O wyborze konkretnych sensorów w tego rodzaju projektach decyduje szereg cech, takich jak dostępność, koszty, wsparcie dla Linuksa i Pythona (które przekłada się na łatwość implementacji) oraz niezawodność i dokładność pomiaru. Nie oznacza to, że elementy wymienione poniżej są najtańsze albo najdokładniejsze - to kompromis pomiędzy tymi cechami, ze szczególnym uwzględnieniem prostoty implementacji i dobrego wsparcia dla Raspberry Pi. Jeżeli w naszym projekcie co innego jest najważniejsze, to możemy dobrać inne sensory.

W tym projekcie wykorzystano następujące sensory:

  • Scalony sensor ciśnienia, temperatury i wilgotności BME280.
  • Termometr elektroniczny DS18B20 (jako zewnętrzna sonda do pomiaru temperatury gruntu).
  • Anemometr, anemoskop, pluwiometr z wyjściem RJ11 i pasujące gniazdka.
  • Przetwornik analogowo-cyfrowy MCP3008.

Oprócz wymienionych powyżej elementów przydatna będzie wodoszczelna obudowa - tę dobrać można we własnym zakresie, aby zmieścił się w niej moduł Raspberry Pi wraz z wszystkim modułami. Wszystko uzależnione jest od tego, jakie sensory wykorzystamy i w jaki sposób podłączymy je z używanym komputerem.

Oprogramowanie

Korzystać będziemy z części skryptów zawartych w pakiecie Oracle Raspberry Pi Weather Station. Nie musimy go w żaden sposób instalować, wystarczy sklonować repozytorium z GitHuba - w terminalu Linuksa na Raspberry Pi wpisujemy:

Skrypt z listingu 1, po uruchomieniu w Pythonie 3, powinien co sekundę w terminalu podawać aktualną wilgotność, ciśnienie i temperaturę. Aby sprawdzić, czy mierzone są one poprawnie, wystarczy np. chuchnąć na sensor, aby zobaczyć, czy prezentowane dane zmieniają się zgodnie z oczekiwaniem.

Teraz możemy zmienić while True: w skrypcie, na def read_all(): czyli definicję funkcji read_all(), która odpowiedzialna będzie za odczyt z sensora. Aby funkcja zwracała dane, zamiast drukować je w terminalu print(...), zamieniamy na return humidity, pressure, ambient_temperature. Usuwamy także pauzę z końca skryptu.

Temperatura gruntu

BME280 będzie podawać temperaturę powietrza, ale może być ona zupełnie inna niż temperatura gruntu. Powietrze może być np. znacznie cieplejsze niż grunt, szczególnie jeśli jest zmrożona. Sonda do pomiaru temperatury, wetknięta w glebę, jest przydatnym dodatkowym sensorem w stacji meteorologicznej i może być wykorzystana do wskazania np. obecności lodu/mrozu w zimie. Do pomiaru temperatury wykorzystano czujnik DS18B20. Występuje on w wielu wersjach, w tym w wersji z wodoodporną sondą termiczną. Taki właśnie czujnik zastosować możemy w budowanej stacji pogodowej.

Rysunek 2. Sposób podłączenia termometru DS18B20 do Raspberry Pi

Sensor DS18B20 ma trzy wyprowadzenia - masę, zasilanie i dane. Najprościej jest podłączyć go, wykorzystując płytkę stykową lub płytkę uniwersalną, tak jak pokazano na rysunku 2, czyli zasilając układ z napięcia 3,3 V i podciągając linię danych do zasilania. Linię danych oczywiście łączymy z Raspberry Pi.

Sensor temperatury wykorzystuje do komunikacji interfejs 1-wire. Jest to szeregowy interfejs komunikacyjny, wykorzystujący zaledwie jedną linię danych. Jest on obecny w Raspberry Pi, ale domyślnie nie jest włączony. Aby to zmienić, otwieramy z pomocą dowolnego edytora plik konfiguracyjny /boot/config.txt i dodajemy na jego końcu, w nowej linijce dtoverlay=w1-gpio. Następnie dodajemy w pliku /etc/modules moduły do obsługi interfejsu 1-wire, które mają być załadowane podczas startu systemu operacyjnego: w1-gpio w1-therm. Możemy teraz zresetować komputer, aby wprowadzone zmiany weszły w użycie.

Teraz możemy skorzystać ze skryptu, który pobraliśmy wcześniej z GitHuba. Powinien on znajdować się tutaj: /home/pi/weather-station/ds18b20_therm.py. Uruchamiamy go z pomocą IDLE3 lub bezpośrednio (po wejściu do folderu z plikiem) wpisując w linii komend:

Fotografia 3. Przejścówka do podłączenia RJ11 do Raspberry Pi

W prezentowanym projekcie wykorzystano zestaw firmy Argent Data Systems numer 80422, który składa się z anemometru do pomiaru prędkości wiatru, anemoskopu do pomiaru jego kierunku i pluwiometru do pomiaru ilości opadów atmosferycznych. Urządzenia te wyposażone są we wtyczki RJ11; dlatego też, aby podłączyć je do Raspberry Pi, zastosować możemy przejściówki, takie jak pokazano na fotografii 3 lub po prostu obciąć wtyki i podłączyć kable bezpośrednio do pinów komputera lub poprzez płytkę uniwersalną.

Anemometr, jaki wykorzystany jest w tym projekcie, jest niezwykle prosty. Ma on trzy ramiona z czaszami na końcu. Są one popychane przez wiatr, co powoduje, że cała konstrukcja obraca się wokół własnej osi. W obracającym się elemencie anemometru zainstalowany jest magnes stały, a w jego podstawce znajduje się kontaktron. Zwiera się on w momencie, gdy magnes zainstalowany w wiatraku, znajdzie się w odpowiedniej pozycji. Na jeden pełny obrót wiatraka przypadają dwie takie pozycje.

Z punktu widzenia elektrycznego, kontaktron zachowuje się tak samo, jak np. przycisk. Dlatego też sygnały z anemometru monitorować można jak naciskanie przycisku. Aby mierzyć prędkość wiatru wystarczy mierzyć ile razy na sekundę do wejścia GPIO w Raspberry docierają impulsy z kontaktronu. Anemometr wyprowadzony jest na pinach 3 i 4 złącza RJ11. Podłączamy jeden z nich do masy, a drugi do wejścia GPIO 5 w Raspberry Pi. Do odczytu stanu układu wykorzystywać będziemy pythonową bibliotekę gpiozero. Potrzebny jest nam prosty skrypt; tworzymy plik w /home/pi/weather-station/wind.py, w którym wpisać możemy nasz program przedstawiony na listingu 2.

Teraz pozostało jedynie sprawdzać co ustalony czas wartość licznika i wyliczać na podstawie tego prędkość wiatru. Karta katalogowa anemometru podaje, że jeden impuls na sekundę oznacza wiatr wiejący z prędkością 2,4 km/h. Uśrednianie prędkości wiatru w dużych odstępach czasu nie jest jednak najlepszym pomysłem - zupełnie ignoruje to szybsze podmuchy wiatru - nie wieje on jednostajnie. Dlatego też dodać można skrypt obliczający nie tylko średnią, ale też maksymalną prędkość wiatru w danym okresie. Do skryptu z listingu 2 dopisujemy zawartość listingu 3.

Anemoskop jest bardziej skomplikowanym urządzeniem. Ruchomy element anemoskopu także wyposażony jest w magnes stały, ale w podstawie znaleźć można aż osiem kontaktronów, które przełączają oporniki. W zależności od kierunku wiatru inna będzie rezystancja układu.

Rysunek 4. Podłączenie anemoskopu i przetwornika MCP3008 do Raspberry Pi

Do pomiaru rezystancji przez Raspberry Pi wykorzystany zostanie dzielnik napięcia oraz przetwornik analogowo-cyfrowy MCP3008, którego zadaniem będzie digitalizacja napięcia wyjściowego z dzielnika. Dzielnik w tym przypadku zasilany jest napięciem 3,3 V i składa się z opornika 4,7 kOhm i anemoskopu. MCP3008 wyposażony jest w interfejs SPI, który podłączony jest do Raspberry Pi, jak pokazano na rysunku 4. Układ obsługiwany jest przez bibliotekę gpiozero, dzięki czemu korzystanie z niego jest bardzo proste. Z pomocą prostego skryptu (listing 4) sprawdzamy, czy układ działa poprawnie.

Program ten będzie cały czas mierzył wartość napięcia. Powinniśmy być w stanie wykryć 16 stabilnych wartości ADC - tyle jest możliwych pozycji anemoskopu i tyle jest wypadkowych rezystancji tego urządzenia. Możemy teraz stworzyć program, który będzie podawał nam, jaki jest dokładnie kąt ustawienia anemoskopu (listing 5).

Pluwiometr do pomiaru ilości opadów deszczu

Pluwiometr to urządzenie służące do pomiaru ilości opadu deszczu w milimetrach na danym obszarze, zazwyczaj na powierzchni jednego metra kwadratowego. Istnieją różne urządzenia tego typu, wykorzystujące rozmaite sensory do realizacji opisanego pomiaru. Zaprezentowany pluwiometr Argent Data Systems jest prostym mechanizmem, pozwalającym na szybkie pomiary ilości deszczu. Wykorzystuje on niewielki element z dwoma zagłębieniami działającymi jak kołyska. Po zapełnieniu się jednego z nich, element ten przechyla się, opróżniając pojemnik i naciskając prosty przycisk. W tej pozycji, wodą napełnia się drugie zagłębienie i cały cykl się powtarza. Na fotografii 5 pokazano, jak wygląda wnętrze urządzenia.

Fotografia 5. Wnętrze wykorzystanego w projekcie pluwiometru

Do przechylenia zbiornika potrzebne jest, jak podaje karta katalogowa, 0,2794 mm deszczu. Tę wartość mnożymy razy liczbę impulsów, jaka została zliczona w jednostce czasu - podobnie jak realizowany był pomiar z anemometru. Wyjście pluwiometru podłączamy do GPIO 6 Raspberry Pi. Możemy teraz napisać prosty skrypt, który zapiszemy w /home/pi/weather-station/rainfall.py - listing 6.

Integracja wszystkich elementów programu

Finalny skrypt, obsługujący wszystkie elementy stacji pogodowej, przedstawiono na listingu 7.

Obsługa bazy danych

Ostatnim elementem systemu jest baza danych, do której zapisywane będą wyniki pomiarów stacji meteorologicznej. W powyższym skrypcie wyniki pomiarów są po prostu prezentowane w terminalu w postaci tekstowej. Aby móc zapisywać dane do bazy, konieczne jest jej skonfigurowanie. W tym celu w terminalu wpisujemy:

Następnie musimy dostać się do bazy danych, jaką utworzyliśmy. Przed główną pętlą programu dodajemy:

db = database.weather_database()

Aby zapisać dane do bazy, wystarczy jedna linijka kodu, którą umieszczamy zamiast print(...), który drukuje wyniki pomiarów:

db.insert(ambient_temp, ground_temp, 0, pressure, humidity, wind_average, wind_speed, wind_gust, rainfall)

Finalnie musimy dodać plik z danymi do logowania, który musi znaleźć się w tym samym folderze, co plik z programem - w naszym przypadku plik ten to /home/pi/weather-station/credentials.mysql. Zapisujemy w nim następujące dane; oczywiście, jeśli zmieniliśmy hasło, nazwę użytkownika albo nazwę bazy, musimy tutaj wpisać zmienioną nazwę:

{

Podsumowanie

Opisany powyżej projekt pozwala na budowę stacji meteorologicznej wykorzystującej Raspberry Pi. Można wzbogacić ją o własne sensory, tylko pomysłowość konstruktora jest tutaj ograniczeniem. System uzupełnić można o czujnik nasłonecznienia (np. fotodiodę lub fotoopornik), czujnik UV, monitor jakości powietrza etc.

Dane zapisywane przez system do bazy są łatwo dostępne, więc zaadaptować można dowolny system do prezentacji danych. Dowolny webowy front-end pozwoli na proste stworzenie strony, wyświetlającej zebrane przez nas dane.

Nikodem Czechowski

Źródło: http://bit.ly/2JsLNLa.

Artykuł ukazał się w
Elektronika Praktyczna
czerwiec 2019
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów