Rejestrator danych pogodowych

Rejestrator danych pogodowych

Witam! 

Jakiś czas temu zbudowałem internetową stację meteorologiczną przesyłająca dane do thingspeak. 

Niestety okazało się, że słaba jakość internetu u mnie w domu doprowadziła do porzucenia projektu jako, że często dane w ogóle nie docierały do serwera. 

W przypływie wolnego czasu (wakacje) postanowiłem przerobić projekt na  coś innego. I wybór padł na rejestrator danych pogodowych. 

Ogólna koncepcja jest taka, że jest to urządzenie które odczytuje dane z czujników a następnie zapisuje je na karcie pamięci. 

Szczerze mówiąc nie mam pojęcia w jaki sposób miałoby być to przydatne ale postanowiłem to zbudować (: 

 

Założenia projektowe :

  • Możliwie długi czas pracy na akumulatorze. 
  • Zbieranie danych co 20 sekund i zapisywanie ich na karcie micro SD.
  • Pomiar prędkości i kierunku wiatru. 
  • Pomiar ciśnienia. 
  • Pomiar temperatury i wilgotności. 
  • Pomiar opadów deszczu. 
  • Możliwość załadowania danych do exela / libre offica w celu dalszej analizy.

 

Elektronika 

Zasilanie 

Całość jest zasilana z akumulatora żelowego o napięciu nominalnym 6V i pojemności 12 Ah (koszt około 40 zł) Taka pojemność zapewnia czas pracy do około 2 miesięcy. Napięcie z akumulatora trafia przez bezpiecznik 0.5A do przetwornicy Step-down D24V5F3 https://botland.com.pl/przetwornice-impulsowe/3109-przetwornica-step-down-d24v5f3-33v-05a.html

Na wyjściu uzyskiwane jest stałe napięcie 3.3V. Co ciekawe sama przetwornica zużywa mniej niż 0.1mA.  Dla porównania regulator LD11173V3 który chciałem zastosować na początku zużywa około 3 mA nawet gdy nie jest obciążony. Poza tym przetwornica zapewnia sprawność około 80%. 

Dzięki temu natężenie prądu pobieranego z akumulatora waha się od około 15 mA w trybie pomiarowym do około 0.8 mA w trybie uśpienia. 

Pin sterujący przetwornicy jest domyślnie podciągnięty do masy przez rezystor 22k i podłączony do pinu sterującego mikrokontrolera. Jest on podciągany do 3.3V zaraz po uruchomieniu programu. Przycisk pomiędzy napięciem akumulatora a pinem sterującym daje możliwość włączenia układu (na krótko uruchamia zasilanie aby mikrokontroler mógł się uruchomić). Taka konfiguracja zapewnia możliwość wyłączenia układu z poziomu mikrokontrolera. Kondensator C19 i dioda D2 zapewniają pewne opóźnienie pomiędzy podciągnięciem pinu sterującego do GND a wyłączeniem układu. Zapobiega to wyłączeniu układu w razie resetu mikrokontrolera. Dioda chroni również pin mikrokontrolera przed napięciem wyższym od 3.3V.

Reszta układu zasilającego to standardowe kondensatory filtrujące tam gdzie to niezbędne. 

 

Sterowanie

Cały projekt jest oparty na mikrokontrolerze AVR Atmega328p. MIkrokontroler jest taktowany z zewnętrznego oscylatora kwarcowego 8MHz. 

Mikrokontroler ma standardowy osprzęt w postaci kondensatorów filtrujących. Do mikrokontrolera po interface SPI podłączona jest karta micro SD na której zapisywane są dane. 

Po I2C podłączony jest również moduł zegara RTC opartego na układzie PCF8563. Zapewnia on informację o tym kiedy dany pomiar został zrobiony.

Do pinu analogowego ADC0 podłączona jest przez dzielnik napięcia dodatnia klemra akumulatora. Zapewnia to możliwość pomiaru napięcia akumulatora przez mikrokontroler. Kiedy spadnie ono poniżej minimalnej wartości (5V dla akumulatora żelowego 6V), mikrokontroler wyłączy zasilanie aby chronić akumulator. 

Do sygnalizacji pracy służą dwie diody LED. Jedna służy do sygnalizacji aktywności, druga do sygnalizacji niskiego poziomu naładowania akumulatora.

 

Czujniki 

Jeśli chodzi o cyfrowe czujniki użyte w stacji to są to DHT22 (temperatura i wilgotność) i BMP180 (ciśnienie). 

Czujnik DHT22 komunikuje się za pomocą jednoprzewodowego interface. Linia ta jest podciągnięta do VCC za pomocą rezystora 10k.

Szyna I2C jest podciągnięta do VCC przez rezystory wbudowane w moduł barometru i w moduł zegara. 

Oba czujniki są umieszczone w zewnętrznej płytce umieszczonej w oddzielnej, przewiewnej obudowie. 

W projekcie zostały również użyte czujniki analogowe.

Czujnik kierunku wiatru zmienia wartośćrezystancji w zależności od kierunku wiatru. 

Natomiast czujnik prędkości wiatru oraz deszczomierz zawierają kontaktron który zwiera się przy pewnych warunkach. 

Szczegóły dotyczące odczytu danych z tych czujników opisałem tutaj : https://majsterkowo.pl/internetowa-stacja-meteorologiczna/

Dobre informacje posiada również nettigo : http://akademia.nettigo.pl/czujnik_wiatru/

Czujniki te można kupić np tutaj:

https://www.maplin.co.uk/p/maplin-replacement-wind-direction-sensor-for-n96fyn96gy-n81nf

https://www.maplin.co.uk/p/maplin-replacement-rain-gauge-for-n25frn96fyn96gy-n77nf

https://www.maplin.co.uk/p/maplin-replacement-wind-speed-sensor-for-n96fy-n82nf

Za około 80 zł. 

Firmware

Na początku miał to być projekt napisany całkowicie w C. Niestety o ile udało mi się uruchomić wszystkie czujniki to jednak przegrałem z kartą SD. (Dla chętnych mogę udostępnić kody które pozwoliły mi uruchomić zegar, czujnik BMP180 i DHT). 

Tak więc postanowiłem przenieść projekt do Arduino ale zachowując część napisaną w C.

Kod firmware stacji : 

Mam nadzieję, że dzięki komentarzom, program jest zrozumiały. 

Zewnętrzne biblioteki niezbędne do skompilowania kodu to :

W załączniku dołączyłem skompilowany program (main.hex). 

Można go wgrać do atmegi za pomocą AVRdude albo za pomocą arduino IDE wybierając płytkę arduino pro mini i procesor Atmega328p 3.3V 8MHz. 

Fusebity (w postaci argumentów do AVRDUDE) to : 

Działanie urządzenia 

Po podłączeniu zasilania i wciśnięciu przycisku włączającego, najpierw na 1 sekundę zapalą się obie diody sygnalizując poprawną inicjalizację wszystkich podzespołów. Jeśli zapali się tylko czerwona dioda (wywołanie funkcji die()) to oznacza awarię któregoś z nich. 

Następnie urządzenie rozpocznie procedurę pomiarów która wygląda następująco :

  1. Zmierzenie poziomu akumulatora
  2. Wyświetlenie statusu (mignięcie diodą czerwoną lub obiema gdy niski poziom akumulatora)
  3. Otwarcie pliku zapisu
  4. Wyłączenie i reset watchdoga. 
  5. Zapisanie daty i godziny
  6. Pomiar i zapis ciśnienia
  7. Pomiar i zapis temperatury i wilgotności
  8. Pomiar i zapis  prędkości wiatru
  9. Pomiar i zapis kierunku wiatru
  10. Sprawdzenie i zapis licznika opadów
  11. Zapis stanu akumulatora
  12. Zamknięcie pliku zapisu. 
  13. Sprawdzenie czy napięcie na akumulatorze nie jest za niskie. 
  14. Uruchomienia timera watchdoga i ustawienie go na 8 sekund
  15. Wejście w tryb uśpienia

Procedura wykonywana w trybie uśpienia sprowadza się do :

  1. Uruchomienia trybu uśpienia mikrokontrolera POWER_DOWN.
  2. Uśpienie na 8 sekund (wybudzanie przerwaniem z watchdoga lub przerwaniem z deszczomierza). 
  3. Wyłączenia trybu uśpienia. 
  4. Sprawdzenie flagi deszczomierza i aktualizacja jego licznika. 
  5. Sprawdzenie czy czas na pomiary. 
  6. Jeśli tak to następuje wejście w tryb pomiarowy.
  7. Jeśli nie to następuje powrót do trybu uśpienia. 

 

Plik z danymi zebranymi przez stację specjalnie ma formę czytelną dla ludzi i wygląda tak : 

Program do przetwarzania danych

Ponieważ plik zapisu ma formę czytelną dla człowieka ale nie dla libre-offica czy exela więc napisałem również prosty program który czyta plik z danymi a następnie konwerteruje dane do formatu czytelnego dla arkusza kalkulacyjnego. 

Inną jego funkcją jest sortowanie danych według daty powstania oraz typu. Dane z osobnych dni będą zapisane do osobnych plików a dane z różnych sensorów wylądują w różnych folderach. 

Program został napisany w C++ i powinien działać zarówno pod Linuxem jak i Windowsem. 

W załączniku znajduje się projekt code::blocks zawierający gotowy do skompilowania kod programu. Niestety nie udało mi się ogarnąć kompilacji programów pod windowsa więc załączyłem tylko binarkę pod linuxa. ): 

Plik z zapisem należy umieścić w tym samym folderze co plik wykonywalny a następnie uruchomić program. 

Obok powinien się pojawić folder o nazwie “wyniki”

Zawierać on będzie następujące katalogi : 

Każdy z nich zawiera pliki .csv z odczytami danego sensora oraz dokładnym czasem. 

Nazwa każdego pliku to data z którego pochodzą dane odczyty. 

Dane z danego pliku powinny się dać bezproblemowo zaimportować do arkusza kalkulacyjnego : 

 

Część strukturalna

Pod względem konstrukcyjnym całość jest zrobiona z tego co miałem pod ręką. 

Obudowa jest zrobiona z dużej plastikowej skrzynki. 

Wewnątrz znajduje się akumulator (którego masa prawie 2kg stabilizuje całość) oraz elektronika. 

Elektronika została dodatkowo opakowana w torebkę foliową która chroni ją przed wodą która może dostać się do środka. (Nie ufam mojej prowizorycznej uszczelce na pokrywce). 

Jeśli chodzi o elektronikę to została ona zlutowana na płytce prototypowej a co cenniejsze elementy takie jak mikrokontroler, przetwornica i zegar można łatwo odłączyć na wypadek gdyby projekt wylądował na półce. 

Czujniki analogowe są podłączone przez gniazda telefoniczne przylutowane do płytki. 

Jedyny bardziej porządny element to obudowa płytki czujników. 

Została ona zaprojektowana w 3D i wydrukowana z białego PLA. :

Modele 3D do pobrania na końcu artykułu 

Jeśli chodzi o mocowanie masztu to jest ono następujące :

Maszt jest przełożony przez dziurę w pokrywce i przyklejony do nie za pomocą dużej ilości kleju na gorąco. 

Jego koniec wchodzi natomiast w tulejkę która jest przyklejona do dna pudełka. 

Może nie jest to eleganckie rozwiązanie ale działa :p 

Na koniec jeszcze kilka zdjęć : 

 

Kilka słów na koniec 

No i to by było na tyle jeśli chodzi o ten projekt. 

Być może w przyszłości go ulepszę dodając jakieś dodatkowe moduły po I2C, na przykład nadajnik albo dodatkowe sensory. 

W załączniku znajduje się główny program stacji wraz ze kompilowanym plikiem .hex, modele do czujnika, program do analizy danych wraz z binarką pod linuxa oraz schemat w pliku .svg i jako źródło programu easy eda. 

Komentarze, zarówno pozytywne jak i negatywne mile widziane.

Pliki załączone do artykułu:

Ocena: 5/5 (głosów: 6)

Podobne posty

10 komentarzy do “Rejestrator danych pogodowych

  • Dobra robota ! Kiedyś zbuduję u siebie takką stację pogodową ale mam jeszcze sporo projektów w kolejce. Gdzie drukowałeś obudowę 3D którą zaprojektowałeś?

    Odpowiedz
    • Były w zestawie, kupiłem zestaw na botlandzie przepłacając przy tym 4.5 raza ):
      Taniej wychodzi kupić czujniki osobno i zbudować jakiś uchwyt do masztu.

      Odpowiedz
  • Nie znam się na elektronice i za pewne należą się gratulację. Pragnę jedynie zwrócić uwagę że estetyka wykonania projektu ma też duże znaczenie a ma na nią na pewno brak zaprojektowanej płytki co by wyeliminowało kłąb kabelków. I tak podziwiam ten projekt i proszę oczywiście nie zrażać się moją opinią. Powodzenia w realizacji dalszych pomysłów :)

    Odpowiedz
  • Projekt fajny.
    Pomysł również, jedynie psuje mi całość obudowa podstawy !!.
    Oraz wydrukowałeś fajną obudowę a płytkę w środku kleisz na gorąco, psuje mi to efekt strasznie, nie będę się przyczepiał braku pcb ponieważ to można zawsze przerobić, ale takie klejenie na kolanie za bardzo do mnie nie przemawia.
    Odemnie 5 za pomysł..

    Odpowiedz
  • Fajne, ja bym zrobił nieco toporniejsze pudło na dole i na kółkach, do tego teleskopowy maszt z napinanymi linkami – taka mobilna stacja pogodowa by z tego wyszła. Do tego dopisać program co by na logice rozmytej ułożył “spektrum” warunków atmosferycznych i można byłoby sprawdzać np. jaki mikroklimat panuje po jednej stronie np. wzgórza a jaki po drugiej.

    Odpowiedz
  • Dziś trudno znaleźć wielkość fizyczną, dla której elektronicy i fizycy nie wypracowali przynajmniej kilku różnych rodzajów czujników. Co bardzo ważne, szczególnie w przypadku pomiarów tzw. wielkości nieelektrycznych (np. temperatury, oświetlenia czy wilgotności)

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?