Projekt: Meteo station v2.0 (stacja pogody)
Od jakiegoś czasu mam w domu zrobiony testowy projekt (skonstruowany w grudniu 2013 roku), który ma docelowo służyć jako domowa stacja pogody (weather station). Z powodu małej ilości wolnego czasu większość moich projektów dość powoli idzie do przodu, ale co zrobić. Pobieram ze sterownika temperaturę powietrza na zewnątrz budynku oraz temperaturę w pokoju wewnątrz budynku. Był jeszcze jeden czujnik zakopany w ziemi na głębokości około 20 cm do badania temperatury gruntu, ale mrówki tydzień po montażu czujnika zaczęły budować sobie akurat w tym miejscu gniazdo więc czujnik wykopałem i nie zamontowałem już ponownie z racji, że to był tylko projekt testowy, a nie chciało się mi dalej ciągnąć kabli. Czas na to aby zmodyfikować projekt na taki z dostępem przez LAN i rozbudować go, bo samo pobieranie temperatury to za mało jak na stację pogody.
Nowa wersja “stacji” będzie wpięta do sieci LAN. Przez sieć LAN będzie można swobodnie pobierać ze sterownika wskazania poszczególnych czujników. Aktualnie planuję zamontować czujniki temperatury, czujniki wilgotności i czujniki ciśnienia. Jeden czujnik będzie zakopany w ziemi do badania temperatury gruntu, a pozostałe to będzie temperatura wewnątrz budynku oraz temperatura powietrza na zewnątrz, wilgotność wew. i zew. i ciśnienie. Zastanawiam się jeszcze nad opcją aby wewnątrz budynku także wstawić czujnik z pomiarem ciśnienia atmosferycznego żeby mieć pomiar ciśnienia na zewnątrz i wewnątrz. Stacja docelowo ma także mierzyć prędkość wiatru, ale z tym już nie jest tak prosto, bo anemometry trochę kosztują więc pewnie trzeba będzie samemu skonstruować takowy, który będzie podawał realną prędkość wiatru. Kiedyś już szukałem opisów i pomysłów jak to wykonać więc będę musiał do tematu wkrótce wrócić. Akurat z anemometrem trochę zabawy będzie. Przydałby się także pomiar opadów deszczu.
Dane mam zamiar odczytywać ze sterownika i zapisywać do bazy danych. Aktualny prototyp podłączony jest przez USB do mojego domowego serwera. Serwer co 5 minut pobiera ze sterownika aktualną temperaturę i zapisuje do bazy SQLite lokalnie oraz wysyła same wartości odczytu do serwera zdalnego gdzie ponownie one są zapisywane w bazie SQLite. W jednym kroku dane są zapisywane w praktycznie dwóch miejscach czyli u mnie lokalnie na serwerze oraz na serwerze zdalnym na którym umieściłem stworzony przeze mnie skrypt PHP z wyświetlaniem danych z bazy. W każdym momencie z dowolnego miejsca na ziemi mogę sprawdzić jaka jest temperatura w domu oraz przy domu na zewnątrz. Tyle, że obecny prototyp pozwala na odczyt tylko temperatury dlatego czas zbudować nową wersję stacji.
Do tego projektu potrzebne elementy to:
Do gromadzenia danych chcę wykorzystać tym razem bazę PostgreSQL aby serwer odpytywał stację, pobierał dane ze stacji i zapisywał dane do bazy danych. SQLite ma swoje plusy, ale w tym przypadku wprowadzę już pełnoprawną bazę danych do przechowywania danych i wykonywania zapytań. Opracuję webserwis do pobierania danych z bazy i tym samym zwiększę nieco bezpieczeństwo pobierania danych przez źródła zewnętrzne, a także będę mógł ustalić dostępy i uprawnienia. Będę mógł pobierać dane z bazy na serwerze w domu przy użyciu serwera zdalnego na którym będą skrypty pokazujące dane w przyjaźniejszej formie, a także może udostępnię zbierane dane gdzieś publicznie przez stworzenie prostego API.
Oczywiście można sterownik zrobić tak aby zapisywał dane na karcie SD/microSD. Tyle, że Arduino UNO z aktualnym moim kodem i wymaganymi bibliotekami już ma zajętą pamięć na poziomie 24 190 bajtów (max: 32 256 bajtów). Po dodaniu biblioteki SD zużycie pamięci wzrasta do 28 196 bajtów (tylko po samym include <SD.h>). Należałoby podpiąć także moduł RTC żeby w pliku zapisywać aktualną datę i godzinę pomiaru żeby wiedzieć o której i kiedy został wykonany pomiar. Zostaje pozornie mało miejsca na kod, ale jest to wykonalne aby takie coś zrobić. Wtedy sterownik może sam automatycznie zapisywać dane do pliku na karcie flash. Plik może mieć format pliku CSV i do takiego pliku może sterownik zapisywać dane co określony czas bez względu na to czy jest odpytywany przez serwer/użytkownika czy też nie. Można dodatkowo zaprogramować aby przy każdym pomiarze sterownik sam wysyłał na wskazany adres serwera dane z pomiaru (serwer może zapisywać dane do bazy)+ zapis do pliku na karcie flash. Przemyślę czy jest mi taka opcja potrzebna w sterowniku (przechowywanie historii przez sterownik). Może to się przyda jeśli by zrobić drugie urządzenie z wyświetlaczem, które będzie wyświetlać aktualne dane pogodowe bez pośrednictwa serwera. Docelowo wyświetlanie danych chce wpleść w panel zarządzania domem/automatyką czyli w ekran panelu na np. tablecie (wchodzi się rano do kuchni, otwierasz panel sterowania/zarządzania domem i na ekranie powitalnym są wyświetlone podstawowe dane). W przypadku tabletu nie bardzo jest tutaj potrzebny bezpośredni dostęp do sterownika ponieważ można pobierać dane z bazy danych, ale skoro sterownik będzie wpięty w sieć LAN to skrypt może też sam bezpośrednio pobierać dane ze sterownika. Opcji i możliwości właściwie jest wiele. Zależy od potrzeb, a moje potrzeby raczej pozostają takie, że serwer odpytuje sterownik i zapisuje dane do bazy danych, a później te dane przetwarzam i wyświetlam przy użyciu skryptów, programów. Muszę zaprojektować odpowiednio bazę danych. Myślę, że będzie potrzebna więcej niż jedna tabela. Przyda się pewnie stworzenie relacyjnej bazy danych. Muszę usiąść i zaprojektować potrzebne tabele.
wilk 17 listopada, 2015
Posted In: Meteo station v2.0
Tagi: arduino, meteo, pogoda, stacja, temperatura, weather