DIY Stacja Meteo, wersja wypasiona
Był sobie człowiek (konkretnie ja), co lubił statystyki, wykresy i zabawki. Własne statystyki, wykresy i zabawki. Z potrzeby robienia statystyk i wykresów (a także z praktycznego punktu widzenia) stworzył pierwszą generację zabawki zwanej stacją meteo, która notabene opisana jest tutaj. Obsługiwała oryginalnie temperaturę, ciśnienie i wilgotność. Po drodze została rozbudowana o czujnik oświetlenia. Działało to całkiem ładnie przez półtora roku, co jest całkiem niezłym wynikiem zważywszy na kompletnie odsłonięte ścieżki na PCB i sposób na zamocowania elektroniki. I w sumie dalej jest sprawne, ale po około siedmiu miesiącach knucia, kombinowania i kolejnych trzech generacjach tego projektu, z której jeno ostatnia została użyta (a dwie inne upłynniły się do ludzi chcących mieć taką zabawkę), powstała broń ostateczna. Którą pewnie w połowie serii, jak w anime, czeka jeszcze jakiś upgrade. Ale niech przedstawię, moja DIY stacja meteo, wersja 3.0:
- Płytki PCB wykonane na zamówienie przez odpowiednią do tego firmę, zysk z braku użycia żelazka jest spory - głównie metalizacja i maska lutownicza;
- Potężny CPU*, był onegdaj ATmega328p (ten sam co na fuj fuj Arduino), po drodze awansował na ATmegę64/128 (te się rozpłynęły), a skończył na STM32F103, który poza tym, że jest 32-bit, to rozpędza się do 72 MHz (ale pracuje na 64 MHz, bo tak);
- Zintegrowane zasilanie prawie PoE, poprzedni model wymagał dodatkowego rozdzielacza do zasilania jednym kablem, ten potrzebuje tylko wpięcia kabelka do gniazda eth, sam sobie rozdzieli co trzeba. A prawie PoE, bo obsługuje tylko napięcia do 16 V, preferowalnie 12V. Choć jeśliby zmienić kondensatory na wejściu, to nawet 40 V (ale wciąż mniej niż PoE wymaga), chyba że by zmienić układ zasilania na wersje HV... Tylko w sumie po co?
- Obudowa jest wspaniała (chyba że okaże się, że ma jakąś wadę konstrukcyjną :D), no ale nie jest zrobiona z podstawków pod doniczki, łatwiej się rozbiera, lepiej chroni płytę główną przed warunkami atmosferycznymi, i ma specjalizowane otwory montażowe na potrzebne czujniki;
- W pierwszym modelu, z uwagi na niedostatki pamięci, obsługa czujników musiała odpowiadać faktycznie podłączonym czujnikom, aktualnie można wkompilować wszystko, a soft sam sobie rozpozna co jest do niego podłączone (o ile może) lub skorzysta z konfiguracji zapisanej w EEPROM;
- Mamy więcej złącz, które pozwalają na więcej;
- Bootloader umie w DHCP, wcześniej tę sztukę posiadała tylko główna aplikacja;
- Wspominałem bardzo ładne płytki PCB:
Niestety znalezienie gniazda RJ45 ze zintegrowanym transformatorem PoE (i preferowalnie mostkami prostowniczymi) to jakiś cyrk, nie lepiej jest z poszukiwaniem takiego, który ma wbudowany zwykły transformator i wyprowadzone piny par zapasowych na zewnątrz. Znaczy, da się znaleźć w katalogach producentów, ale ogrzej z ich dostępnością. A nawet jak są dostępne to kosztują jakieś radosne kwoty typu 40 zł. Dlatego też użyłem normalnego gniazda RJ45 i zewnętrznego transformatora. Generacja druga mogła używać transformatora PoE, ale stwierdziłem, że w sumie nie ma po co go montować. Jest duży, a do zasilania wystarczą pary zapasowe. Z gorszych wiadomości, STM32 nie ma wbudowanego EEPROMu, więc minus jest taki, że trzeba go gdzieś wsadzić****, plus taki, że taki osobny, w przeciwieństwie do AVRowego, ma znacznie wyższą odporność na cykle zapisów. A skoro już daliśmy EEPROM, to jest jeszcze miejsce na dataflash do przechowywania czcionek, plików, czy czegoś. Zaraz, po co czcionki? Stacji po nic, ale na tym samym projekcie bazuje to:
Czyli kolejna iteracja mojego miernika energii elektrycznej. I to jest odpowiedź na pytanie "czemu nie zintegrowałeś czujników w płycie głównej", znaczy - jedna z odpowiedzi, bo jest jeszcze kilka innych powodów. Zastosowany do komunikacji sieciowej ENC424J600 się grzeje, nie tak bardzo jak jego starszy brat ENC28J60, ale jednak. Pomyśleć można, że w stacji meteo to nie do pomyślenia, gdyż zafałszuje wyniki. Ale nie, ma to zalety i nie wpływa na pomiary. Czujniki, których wyniki zależą od temperatury (wilgotność, i co zrozumiałe - temperatura) są umieszczone w dolnej części obudowy, ciepłe powietrze, jak wiadomo, unosi się. A, że w okolicy elektroniki panuje zawsze nieco wyższa temperatura niż w otoczeniu, to nie bardzo ma jak dochodzić w tej wewnętrznej obudowie do kondensacji pary wodnej przy wilgotności na poziomie 100%. A poza tym, zintegrowane czujniki utrudniłyby wymianę ich, bądź samej płyty głównej. A tak, używając chińskich modułów, można użyć praktycznie dowolnego sensora. (Poza tym, głupia sprawa, taniej kupić cały moduł niż sam chip.)
Czujniki
A właśnie, sensory, software na chwilę obecną obsługuje:
[list] [item]AS3935 - wykrywa burze do około 40 km, jeszcze nie testowany, burze są wredne i się nie pojawiają od czasu, jak mam prototyp. Dedykowany dla niego jest konkretny port (I2C-1), bo potrzebuje zjeść jedno przerwanie. Wymaga kalibracji anteny na 500kHz, software robi to automatycznie, jeśli tylko go wykryje. Zamontowany na autorskich płytkach modułów; ***[/item][item]BH1750 - czujnik oświetlenia, podaje wyskalowany w lx wynik i jest niewrażliwy na podczerwień. Minus jest taki, że może zmierzyć wartości tylko do 100 klx, a to stanowczo za mało do bezpośredniego pomiaru światła słonecznego, ale jeśli się go schowa za filtrem o znanej przepuszczalności, to i temu zadaniu podoła. Potem zostaje tylko podzielić wynik przez 685, i mamy moc promieniowania słonecznego w Watach; **[/item][item]BME280 - "Czujnik środowiskowy", temperatura, wilgotność, ciśnienie. Całkiem niezłe rozwiązanie, ale poniżej zera spada dokładność pomiaru wilgotności względnej. Te czujniki są w stacjach, które się rozpłynęły;[/item][item]BMP085/180 - Ciśnienie i temperatura, dokładność pomiaru temperatury jest taka sobie, ale dokładnie mierzy ciśnienie; **, ***[/item][item]DS18B20 - Czujnik temperatury na 1‑Wire, chyba najczęściej używany przeze mnie czujnik; **, ***[/item][item]HMC5883L - Pole magnetyczne. Gdyby ktoś pytał po wafla mi pomiar siły pola magnetycznego - z ciekawości, ot chciałbym zobaczyć czy, kiedy i jak się zmienia, o ile się zmienia. Podaje wyniki w Gauusach, ale przeliczenie na Tesle to żaden problem; ***[/item][item]MAX44008 - Kolejny czujnik oświetlenia, mierzy poziomy do 83 W/m2, więc jak BH1750 wymaga przesłony. Ale za to podaje wartości dla światła widzialnego, podczerwieni i składowych RGB. Po wafla mi RGB? Z tego można wyliczyć temperaturę światła, a z tego ustalić stan pokrywy chmur. Niestety do 10 rano stacja pozostaje w cieniu, więc pomiary są poprawne dopiero po ~10. Z trzeciej strony, po samej temperaturze da się stwierdzić czy stacja jest w cieniu, czy mamy do czynienia z chmurami (albo zachodem słońca). Ale te dane będą dostępne dopiero w nowym webowym UI; **, ***[/item][item]ML8511 - Analogowy czujnik promieniowania UV, z tego mamy Indeks UV; ***[/item][item]MLX90615 - Bezdotykowy czujnik temperatury działający na podczerwień. A tak, do mierzenia rzeczy, których nie można dotykać. Albo takich, które można, ale chcemy bardzo szybko uzyskać dokładny pomiar, bo w przeciwieństwie do klasycznych czujników dotykowych, nie musi się ogrzać aby pokazać to co powinien. No i dzięki temu może mierzyć dużo cieplejsze obiekty niż reszta;[/item][item]PMS3003 - Laserowy czujnik mierzący pył zawieszony. Podaje dane dla PM 1.0, PM 2.5 i PM 10. Wskazania PM1 to raczej dla zabawy, bo jego dokładność w tym zakresie to 50%, ale dla PM 2.5 i 10 dokładność wskazań sięga 98%. Ma jednak dwie wady. Dane przesyła portem szeregowym, co wymusiło zmiany w sprzęcie. Poza tym, poziomy logiczne co prawda ma na 3v3 (czyli kompatybilne), ale do zasilania potrzeba 5 V. Przez co musiałem uzupełnić projekt o układ podbijający napięcie z 3v3 na 5 V; Poza tym wydaje się działać w miarę poprawnie, przynajmniej względem niedalekich stacji pomiarowych mierzących poziom PM; ***[/item][item]PPD42 - Podczerwony, analogowy czujnik pyłu. Działać - działa, ale wyniki są dalekie od idealnych. Tak czy inaczej, da się używać po małej kalibracji z pomocą PMS3003. Mam generalnie wrażenie, że o ile PPD42 powinien być skalibrowany przed opuszczeniem fabryki, tak często nie bywa. Ah i aby współpracował z elektroniką stacji musi być podłączony przez konwerter zasilania i formatu danych. Jak PMS jest zasilany z 5 V, ale że jego wyjścia też operują na 5 V, nie bardzo można go podłączyć bezpośrednio;[/item][item]Si7021/HTU21D - Wilgotność i temperatura. Oba są prawie identyczne, włączając adres na I2C i część poleceń. Ale bywają różnice. Chociażby takie, że Si7021 ma pokrywę chroniącą przed wodą, HTU niekoniecznie, oraz z Si da się odczytać temperaturę po konwersji RH, a z HTU nie. Oryginalnie używałem HTU, aktualnie zainstalowany jest Si; **, ***[/item][item]TSL2561 - ponownie czujnik oświetlenia, podaje Ir+Widzialne, ale jest bardziej zajmujący dla CPU niż BH. Bo o ile BH podaje wynik w lx, tak dane z TSL trzeba przeliczyć magiczną formułą;[/item][item]Czujnik przepływu cieczy. Tak, planuje mierzyć temperatury i przepływ wody wodociągowej. A jak znajdę sensowne elektrozawory, to nawet automatyczną regulację na zadaną temperaturę. :D[/item][list]
Poza czujnikami różnej maści, elektronika potrafi rozmawiać z wyświetlaczami opartymi o ILI9341. Ale to na kiedy indziej. A w planach jest jeszcze ten nieszczęsny wiatr (i może deszcz?).
Obudowa
Obudowa w przeciwieństwie do poprzedniczki, jest ładniejsza, nieco większa, lepiej chroni elektronikę i ma dziury we właściwych miejscach. Poprzedniczka służyła dzielnie, ale się nieco zużyła.
I w związku z tym jak została wykonana, znaczy - jaką metodą, trudno by było dorobić uszkodzony element.
W nowej wystarczy dodrukować brakujący element z ABSu, i polakierować. Niestety polakierować, gdyż najwyraźniej plastiki używane do produkcji filamentów nie są całkowicie stabilne w świetle UV. Nikt mi nie był w stanie powiedzieć co się z nimi może stać, ale podejrzewam, że mogą silnie żółknąć. Tak czy inaczej, ostatni, dolny poziom pozostawiłem bez lakieru, zobaczymy po jakimś czasie co się stanie. A co do tych dziur, zakrytych osłonkami wykonanymi z PET:
Teraz czujnik oświetlenia jest na górze (wraz z UV). Był na dole i mierzył światło odbite z otoczenia. Działało to całkiem nieźle, bo znając różnicę miedzy słońcem a odbitym da się określić poziom promieniowania bez problemu większego, chociaż, no dobra, z problemami. Pomiar temperatury kolorów jest całkiem fałszywy, oraz póki mamy nie‑zimę, a właściwie nie‑śnieżną-pogodę... Już się domyślasz? Śnieg odbija z milion razy więcej światła, przez co pomiar natężenia światła był z tylca wzięty w razie obecnego na ziemi śniegu. Z innych nowości, sam moduł z elektronika:
Jest wsuwany, także nie trzeba rozbierać wszystkich poziomów jak w poprzedniej, aby go wyjąć. No i z uwagi, że to takie pudełko, chroni plecy płytki od wszystkiego co się może ewentualnie przedostać przez pierścienie. Całość składa się z 10‑12 segmentów, każdy ma po dwa pierścienie. Skręcone są za pomocą śrub imbusowych, łączących po cztery poziomy każda. Dzięki czemu śrub jest mniej niż w oryginale, a poza tym łatwiej się je wykręca, bo obudowa skręcona jest w przeciwną stronę, przez co trzeba tylko wykręcić śruby, a nie zdjąć nakrętki, kolejny poziom, dystanse i dopiero same śruby. Poza tym mój pierwszy projekt przy użyciu Blendera:
Całość montowana na szczycie masztu 22 mm (bo akurat taki mam na antenę), dwa dolne moduły mocowane są na maszcie. A poza tym, że otwór montażowy jest wystarczająco ciasny, to w na miejscu trzyma jeszcze wkręt do płyt GK. Rozwiązane sprawdzone w poprzedniej stacji, nawet bez kołnierzy trzymających stację na miejscu, sama śruba dała radę. A dzięki temu, że podstawa jest odłączalna, można ściągnąć całą elektronikę bez potrzeby ingerencji w podstawę.
Komunikacja
Stacja, jak nie trudno zauważyć, używa Ethernetu. Konkretniej UDP. Własny protokół. Niby można by dodać serwer WWW, ale w zasadzie po wafla. Interface ten i tak mógłby najwyżej pokazać aktualne dane, a ja pragnę czegoś więcej. Danych historycznych. Dlatego tez elektronika czujników sama niczego nie pokazuje, choć...
Na tej samej elektronice działają takie panele, same mogą zbierać dane z pomieszczeń, a poza tym komunikować się miedzy sobą (w planie są takie panele działające na wyświetlaczach e‑ink). Z nimi wszystkimi komunikuje się demon uruchomiony na NASie, który odpytuje wszystkie czujniki w sieci o dane, i te dane, w zależności jakie są ustawienia dla konkretnego sensora, wrzuca do bazy danych. Z tą bazą danych komunikuje się paskudny interfejs WWW, z którego można pośmiać się tu. Najpiękniejszy nie jest, ale w opracowaniu jest jeszcze plugin dla WordPressa, który odstawi całą magię i ułatwi konfigurację. Ale, że wszystkie formaty danych (poza wyładowaniami) są kompatybilne, to na szybko dodałem obsługę nowych wskazań do starego interfejsu, a w wolnej chwili popracuję sobie nad nowym. A ten niestety rodzi się bólach od trzech miesięcy, bardzo długi poród.
Podsumowanie
No, mam nadzieje, że w tej nie zrobiłem większych błędów i będzie działać lepiej niż poprzedniczka. Choć poprzedniczka awarie miała tylko ze 3 razy, ale za to sama wracała do życia po pewnym czasie. Moduły są na tyle uniwersalną platformą, że można do nich podłączyć wiele rzeczy. Nie są najbardziej ekonomicznie zaprojektowane (czasem potrzebują konwerterów formatu danych, miernik składa się w sumie z 2 MCU atmega+stm32), ale oj tam, oj tam. 7 miesięcy grzebania, dumnym. ;)
* - Nie wiem po co, bo m64 był wystarczający... A nie, wiem po co, chciałem nauczyć się programować ARMy; Ale one są nawet zabawniejsze niż AVRy... ot tych co mam interface I2C nie działa po resecie, trzeba go 2 razy zresetować ręcznie (koniecznie dwa razy) i wtedy działa normalnie, magia; ** - te były oryginalnie; *** - te są zainstalowane obecnie; **** - Wiem, mógłbym użyć wewnętrznego flasha zamiast EEPROMu, ale nie, nie lubię takich rozwiązań, flash jest do czegoś innego;