O projekcie
Witaj na stronie sieci amatorskich stacji Meteo KBPROGRAM!
Dlaczego?
W sieci istnieje wiele serwisów, w których można sprawdzić aktualną pogodę, ba nawet każdy smartfon posiada obecnie jakiś pogodowy widżet. Jednak z moich obserwacji wynika, że często podawane w nich dane mocno rozmijają się z rzeczywistością. Sytuacja ma się lepiej w dużych miastach, lecz na wsiach niezgodności są zazwyczaj największe. To jeden z powodów, dla którego postanowiłem wykonać własną, na początku pojedynczą, stację meteo. Oczywiście można odczytywać wartości pomiarów "analogowo" wychodząc na zewnątrz i zerkając na termometr, jednak w takiej sytuacji nie będziemy mieć historii odczytów z całego dnia. No chyba, że ktoś będzie co 5 minut wychodził na zewnątrz z notesem :)
Drugą sprawą jest chyba wrodzone zainteresowanie elektroniką i informatyką. Realizacja projektu tej niewielkiej sieci stacji metego pozwala mi rozładować pokłady energii ukierunkowanej na obcowanie z technologią i budowę własnych urządzeń. Przy okazji mogę podświadomie mogę sobie tłumaczyć, że to co robię jest potrzebne i przydatne dla innych :)
Jak?
Działanie Meteo KBPROGRAM dzieli się na dwie kategorie: części fizycznej, składającej się z urządzeń pomiarowych oraz części webowej prezentującej publicznie te dane, czyli miejsca, w którym właśnie czytasz ten artykuł :) Przez pojęcie stacji należy rozumieć zarówno urządzenia znajdujące się na zewnątrz jak i np zegary z funkcją pomiaru temperatury, które dostarczają danych z pomieszczeń, w których się znajdują. Dlatego też występuje podział na stacje publiczne, z których odczyty mogą oglądać wszyscy odwiedzający stronę, jak i prywatne, do obejrzenia których niezbędne jest zalogowanie się.
Czujniki
Każda stacja może posiadać inny zestaw czujników wykorzystywanych do pomiaru parametrów meteorologicznych. Jednak najczęściej są to jedne z poniższych:
BME280 / BMP180 - temperatura, ciśnienie i wilgotność
DHT22 / AM2320 - temperatura, wilgotność
DS18b20 - temperatura gruntu
BH1750 - nasłonecznienie
INA219 - pomiary napięcia, prądu i mocy
Deszczomierz korytkowy
Wiatromierz czaszowy
Procesor
Każda ze stacji działa w oparciu o mikrokontroler ESP8266 lub ESP32. Posiadają one łączność WiFi więc podłączone do domowej sieci są w stanie przesyłać wyniki pomiarów na serwer. Oprogramowanie dla tych mikrokontrolerów zostało napisane przy wykorzystaniu Arduino i dostępnych dla tej platformy bibliotek ułatwiających korzystanie z czujników.
Obudowa
Ważnym elementem stacji pogodowej jest obudowa radiacyjna. Pozwala ona ochronić czujniki przed deszczem jednocześnie zapewniając możliwość swobodnej wymiany powietrza, tak by pomiary były w ogóle możliwe. Kolejnym ważnym aspektem takiej obudowy jest osłona przed słońcem, które nagrzewając elementy obudowy mogłoby prowadzić do zafałszowania wyników. Z tego względu obudowa posiada biały kolor, odbijający możliwie jak najwięcej promieniowania słonecznego.
W swoim projekcie zastosowałem obudowę radiacyjną wykonaną na drukarce 3D. Jej projekt nie został wykonany przeze mnie lecz pochodzi z portalu thingiverse.com. Składa się ona z pięciu elementów w kształcie spodka z czego cztery posiadają pośrodku otwór na czujniki, natomiast piąty stanowi "dach" konstrukcji. Dodatkowo w obudowie znajduje się podstawa i uchwyt do montażu obudowy oraz czujników. Całość skręcona jest trzema gwintowanymi prętami ze stali nierdzewnej. Wkrótce postaram się dodać kilka zdjęć samej obudowy jak i całości stacji.
Pozostała część stacji - jej procesor, akumulatory i inne układy niebiorące bezpośrednio udziału w pomiarach schowane są w osobnej, hermetycznej obudowie. Pozwala to uchronić je przed szkodliwym wpływem warunków atmosferycznych, które powodują korozję metalowych złącz czy ścieżek na płytkach drukowanych.
Aplikacja webowa
Strona www Meteo KBPROGRAM została napisana w Pythonie z wykorzystaniem frameworku Django. Była to dla mnie okazja by nauczyć się czegoś nowego (nigdy wcześniej nie programowałem w Pythonie). Finalnie powstał niewielki system CMS, który oprócz prezentacji danych pozwala na logowanie użytkowników, publikowanie aktualności czy ich komentowanie.
Wykresy danych metego są chyba najciekawszą formą prezentacji zebranych pomiarów. Do ich generowania wykorzystałem JavaScript oraz bibliotekę Highcharts. Dane są pobierane asynchronicznie z wykorzystaniem AJAX, dzięki czemu nie wymagane jest przeładowanie całej strony do odświeżenia wykresów np. po zmianie zakresu czasu.
Dla wygodnego wpisywania dat podczas przeglądania archiwalnych pomiarów zastosowałem narzędzie DateRangepicker, które pozwala na wyświetlenie graficznego kalendarza. Możliwe jest wybranie predefiniowanych zakresów czasu jak i wybranie własnego klikając na wybrane dni w wyświetlonym kalendarzu.
Dodatkową funkcjonalnością jest podgląd lokalizacji stacji na mapie Google Maps. Dzięki wykorzystaniu Google Maps API na stronie wyświetlana jest mapa z naniesionymi znacznikami reprezentującymi konkretne stacje.
Współpraca
Jeśli chcesz dołączyć do mojego projektu i dołożyć swoją cegiełkę, zapraszam do kontaktu. Jestem otwarty na propozycje i z miłą chęcią obserwowałbym wzrost liczby stacji biorących udział w projekcie. Zainteresowane osoby wspomogę w uruchomieniu własnej stacji wraz z integracją jej z istniejącym systemem. Być może w projekcie tym drzemie potencjał, który razem pomożecie mi ujawnić :)
Równie cenne będą również wszelkie wskazówki osób bardziej doświadczonych ode mnie, które zauważą błędy lub zechcą podzielić się swoją radą. Tak jak wspomniałem, Pythona i Django uczyłem się podczas tworzenia tego projektu, więc na pewno jest wiele rzeczy, które mógłbym zrobić lepiej! Niestety brakuje mi również zdolności projektowania estetycznego i ergonomicznego interfejsu użytkownika, więc również i w tym zakresie każda wskazówka będzie na wagę złota :)