Stacja pogodowa
Stacja pogodowa zbudowana z kilka czujników podłączonych do mikrokontrolera ESP8266 NodeMCU v3. Dane wysyłane są co 5 minut do bazy danych, a następnie pobierane są na stronie żeby pokazać je w formie wykresów. Obecnie wszystko jest podłaczone na zaprojektowanej przeze mnie płytce PCB. Szczegółowy opis działania poniżej.
Czujniki i moduły:
- SPS30 - czujnik cząstek stałych, umożliwia pomiar cząstek PM1, PM2.5, PM4, PM10.
- BME280 - czujnik wilgotności, temperatury oraz ciśnienia.
- RTC DS3231 - zegar czasu rzeczywistego.
- Moduł czytnika kart SD
- Nettigo Air Monitor HECA - Moduł kontroli grzałki PTC
- Grzałka PTC 70C 12V
- Ogniwo 18650 Li-Ion Panasonic NCR-18650B 3400mAh
- TP4056 - Ładowarka 1-celowych akumulatorów litowo-polimerowych o napięciu 3,7 V.
- MT3608 - Przetwornica step up 5V - 28V DC 2A
- HLK-PM01 - Zasilacz 100V-240VAC / 5VDC - 0,6A
Funkcje ESP8266:
- Wysyła dane co 5 minut przez WiFi, jeśli nie ma połączenia z siecią to zapisuje dane na kartę SD
- usypia się na około 4 minut w zależności ile zajeło mu pobranie danych i ich wysłanie
- Pobiera dane ze strony w celu konfiguracji grzałki, synchronizacji czasu itd.
- Jeśli wystąpi jakiś błąd z czujnikiem to wysyła informacje do bazy danych.
- synchronizuje czas co tydzień pobierając go z serwera NTP
Opis działania:
Zacznę od zasilania. Mam dwa zasilacze HLK-PM01. Jeden jest do grzałki, która ciągnie prądu około 0.5A a drugi zasila całą reszte. Ważne było dla mnie, aby w zimie grzałka utrzymywała temperaturę w obudowię na plusie, żeby wydłużyć żywotność całej elektroniki, jedynie czujnik BME280 jest w radiacyjnej obudowie. Jak widać jest też bateria 18650, która zasila cały układ (opróćz grzałki) tylko wtedy jak padnie stałe zasilanie. Bateria potrafi zasilić układ na około 10 dni. Zasilacz ładuję również baterię poprzez moduł TP4056. Jeśli stałe zasilanie działa to Mosfet-P logic lvl odcina baterię od podawania zasilania po to, aby moduł TP4056 jednocześnie nie ładował baterii i nie podawał z niej prądu na całą resztę. Gdy padnie prąd to Mosfet odrazu przepuszcza zasilanie z baterii, dzięki czemu układ ma cały czas zasilanie. Prąd z baterii jest podwyższony dzięki przetwornicy step up.
ESP8266 budzi się co około 4 minut. Łączy się z siecią WiFi, dzięki czemu działa w trybie "online", jeśli nie uda mu się połączyć to przechodzi w tryb "offline" próbując co 4 sekundy połączyć się z siecią. Inicjalizuje wszystkie czujniki, jeśli wystąpi jakiś problem to mając połaczenie z siecią wysyła odpowiedni komunikat. Pobiera dane z czujników i w zależności od trybu zapisuję te dane na kartę sd lub wysyła je poprzez http POST na stronę php, gdzie skrypt zapisuję te dane do bazy MSQL. Czas jest cały czas sprawdzany poprzez moduł RTC, dzięki czemu każdy pomiar wysyła się dokładnie co 5 minut. Jeśli po wybudzeniu połączy się z WiFi to najpierw sprawdza czy jest plik z zapisanymi rekordami. Jeśli jest to wysyła wszystkie dane do bazy danych. Dane Wyświetlane są za pomocą PHP oraz Javascript. Javascript głównie odpowiada za wykresy i automatyczne odświerzanie danych. Strona z wizualizacją danych nie jest jeszcze w pełni gotowa, planuje ulepszyć wygląd wykresów oraz dodać więcej danych.
Tryb offline - Pobiera wszystkie dane z czujników i zapisuję je do pliku tekstowego na karcie sd. Często w nocy mam wyłączony router i cała noc zapisuję te dane do jednego pliku w formie 20|5.02|2...
Tryb online - Sprawdza i w razie potrzeby synchronizuje czas. Pobiera dane konfiguracyjne i ustawia grzałkę przy jakiej temperaturze ma grzać albo kiedy ma przestać grzać. SPS30 ma funkcję czyszczenia wentylatora, rozpędza wentylator na maksymalne obroty na 10s. Domyślnie czyści się raz w tygodniu, ale mogę zdalnie ustawić żeby to zrobił przy kolejnym wybudzeniu.
Moje spostrzeżenia po 2.5 roku działania stacji:
- Czujnik BME280 padł mi już dwa razy i po dłuższym czasie działania błędnie podaje wilgotność powietrza.
- Każdy dzień powinien liczyć 288 rekordów z danymi, ale niestety zawsze gdzieś jakiś ucieknie. Często moduł BME280 potrafi wyświetlać temperaturę 0 albo ciśnienie 9 i zanim to zauważe to przepada mi sporo rekordów, które muszę usunąć. Zrestartowanie zasilania pomaga i czujnik działa dobrze jakiś czas
- ESP usypia się i restartuje 288 razy w ciągu dnia. Każdy restart powoduje inicjalizacje wszystkich czujników i często miałem problem, że nie chciał współpracować moduł karty SD.
- Planuję przebudować kod w taki sposób żeby ESP działał bez usypiania a usypiał się tylko wtedy kiedy padnie główne zasilanie
- Chcę dodać czujnik wyładowań atmosferycznych - Lightning Sensor z czystej ciekawości jestem ciekaw jak to działa
- Po tym wszystkim zajmę się drugą częścią a mianowicie pomiar deszczu, kierunku wiatru i jego siły. Wszystko będzie umiejscowione na dachu. Całość będzie podłączona również do ESP i będzie zasilane prawodpodobnie z jakiegoś ogniwa solarnego.
Panel zarządzania
Po lewej widzimy panel zarządzania. Monitoruje temperaturę w obudowie. Grzałka radzi sobie z mrozami do około -5 stopni. Planuje wymienić zasilacz 5v na 12v żeby znacznie poprawić jej działanie. Istotną rolą tutaj jest również wartość time_sync, któa odpowiada za synchronizacje czasu. Miałem sporo problemów z czasem. Często po synchronizacji, moduł RTC miał błędną datę. Dzięki ustawieniu wartości 1 w tym polu. Zegar jeszcze raz się ustawi przy następnym wybudzeniu ESP. Obecnie Skrypt automatycznie ustawia tą wartość po wykryciu błędnej daty przesłanej z ESP. Mimo to miałem sporo błędnych synchronizacji. Po przyjrzeniu się bliżej okazało się, że kable połączeniowe były lekko luźne i do końca nie stykały. Obecnie mam to już na płytce PCB
Darmowy hosting zapewnia PRV.PL