Prosta stacja pogodowa na Arduino

Prosta stacja pogodowa na Arduino

Witam ponownie po prawie rocznej przerwie w pisaniu a nie czytaniu ;)
Postanowiłem sobie troszkę ułatwić życie i zbudować ustrojstwo, które nazwałem dumnie “Prostą stacją pogodową”.
Po cóż mi coś takiego, skoro można kupić gotowca za kilkadziesiąt złotych w popularnym markecie? Znalazłoby się kilka powodów. Najważniejszym z nich był ten, żeby owe urządzenie było spersonalizowane pode mnie, a nie takie, które akurat jest dostępne. Po drugie, żeby oferowało sporą dokładność a z produktami z niższej półki różnie to bywa. No i po trzecie i najważniejsze – żeby sobie pomajsterkować. Mieć sporo zabawy i satysfakcji, że jak się chce to można.

Założenia i wymagania projektowe były następujące: tanio, prosto i dokładnie, a trochę bardziej konkretnie:
– wyświetlanie dokładnego czasu i daty,
– pomiar temperatur (z trzech miejsc: na dworze, w mieszkaniu oraz na grzejniku),
– pomiar wilgotności w mieszkaniu,
– pomiar ciśnienia atmosferycznego,
– wykrywanie opadów.

Naturalnym dla mnie wyborem, z uwagi że ciut znam już tę platformę, było Arduino. Po zapoznaniu się z założeniami oraz elementami, które zamierzałem wykorzystać wybór padł na Arduino Nano. Głównym powodem, przemawiającym za jego wykorzystaniem był fakt, iż posiada on napięcia wyjściowe zarówno 5V jaki 3,3V (oczywiście, można także użyć przetwornicy, aby wyeliminować ten problem), posiada wygodne złącze mini USB do podłączania do PC. Nie trzeba bawić się w przejściówki i resetować przy wrzucaniu kodu, jak ma to miejsce w Arduino Mini Pro oraz najważniejszy powód – nie miałem jeszcze takiego modelu w swojej kolekcji ;)

Co wykorzystałem do projektu:
Arduino Uno (jak zawsze niezbędne do prototypowania i wszelakich eksperymentów),
– płytka stykowa wraz z kabelkami łączeniowymi,

Arduino Nano (serce całego projektu),
wyświetlacz LCD 4×20 na I2C (oczywiście w kolorze niebieskim),
RTC DS3231 (bardzo dokładny zegar czasu rzeczywistego),
BMP180 (barometr),
DHT11 (wilgotnościomierz; początkowo miałem DHT22, ale niestety uległ on awarii;/),
DS18B20 (niezawodne “dallaski”, cyfrowe czujniki temperatury),
czujnik opadów,
– 2x dioda LED 5mm (a jakżeby inaczej – także niebieska),
– rezystory: 1x 10kΩ dla DHT11, 3x 4,7kΩ dla DS18B20 oraz 2x 90Ω dla LED,
– płytka uniwersalna dwustronna 20 x 14 pól,
– gniazda do goldpinów, kilka sztuk w różnych długościach,
– goldpiny,
– kabelki do połączeń, różne cienkie, w głównej mierze ze skrętki ethernetowej,
– kabel płaski ethernetowy (dla zewnętrznej części stacji),
– kabel telefoniczny (dla czujnika do grzejnika),
– zasilacz 12V (ja miałem 2A),
– pudełko na herbatę 15x9x8,5 (na całą stacje),
– pudełko uniwersalne hermetyczne 4,5x7x3,5 (dla zewnętrznej części stacji),
– gniazdo montażowe dla zasilacza,
– koszulki termokurczliwe,
– cyna, kalafonia, pasta do lutowania,
– papier ścierny drobnoziarnisty,
– farba i pędzelek do pomalowania.

Przydatne narzędzia:
– lutownica,
– wiertarka,
– piła do wycięcia otworu,
– multinarzędzie typu dremel,
– pistolet na ciepły klej,
– miernik,
– komputer z programem Arduino, Fritzingiem oraz kablem mini usb – usb.

… oraz trochę samozaparcia, wolnego czasu i nerwów :D

 

Na początku zacząłem od projektu na płytce prototypowej, który wyglądał mniej więcej tak:

weather2_bb

Schemat elektryczny całości prezentuje się następująco:

weather_schemat

Tutaj również załączam kod, z przypisami, które są głównie wzięte z bibliotek. Kod jest na tyle prosty, że nie powinno być problemów z jego zrozumieniem. Gdyby były to proszę o pytania.

Chciałem, żeby na wyświetlaczu były wyświetlane w sposób jak obrazują poniższe zdjęcia: Na pierwszym: data, godzina i dzień tygodnia. Na drugim temperatury oraz godzina. Na trzecim: wilgotność, współczynnik ciepła (stosunek wilgotności do temperatury), ciśnienie oraz godzina. Na czwartym: stan czujnika opadów, intensywność opadów oraz godzina.

Dodatkowo zamontowałem diodę LED koło wyświetlacza, żeby powiadamiała o opadach.

 

Następnie przyszedł czas na wykonanie obudowy z pudełka na herbatę. Nie wiem czemu akurat tak się to zwie, dla mnie to po prostu drewniane pudełko, które akurat spełniało moje oczekiwania.

Pierwszą czynnością było wycięcie miejsca na wyświetlacz LCD. Posłużyło mi do tego narzędzie uniwersalne takie jak to:

weather_p15_pila

Bardzo sprytnie się tym operuje, jednakże z uwagi na to, iż było to moje pierwsze starcie z tym ustrojstwem, wynik prac nie jest bliski ideałowi:

Następnie należało zrobić kilka otworków, dla lepszej cyrkulacji i waloru estetycznego. Posłużyłem się szablonem, narysowanym na kartce, który następnie przykleiłem na pudełko, pinezką zaznaczyłem, gdzie mają być otwory, poprawiłem ołówkiem i wywierciłem:

Później pozostało przeszlifować papierem i pomalować:

Następnie zabrałem się do zrobienia części zewnętrznej. Użyłem płaskiego, ośmio-żyłowego kabla ethernetowego z uwagi na fakt, iż mogę dzięki niemu wystawić całość za okno i zamknąć je, bez żadnego problemu.

Polutowałem elementy, przymocowałem czujnik deszczu, powierciłem otwory oraz przytwierdziłem elementy wewnątrz za pomocą ciepłego kleju. Również, za pomocą ciepłego kleju zabezpieczyłem sobie śrubki, żeby nie rdzewiały. Dioda LED zamocowana w celu sprawdzania czy zewnętrzna część działa i nie poleciała zza okna :) Całość prezentowała się mniej więcej tak:

Teraz przyszedł czas na meritum sprawy, czyli polutowanie całości. Jako, że lubię modułowe podejście do sprawy, to zrobiłem to w ten sposób, aby wszystkie ważniejsze elementy mogły zostać wymienione/zdemontowane w razie potrzeby, toteż użyłem gniazd goldpinowych. Płytka, na której oparłem całość, schematycznie wygląda tak:

weather_plytka

Po zmontowaniu i lutowaniu prezentuje się następująco:

Po zlutowaniu czujników oraz kabelków łączących poszczególne elementy wyglądało to tak:

Następnie było złożenie wszystkiego w całość, co dało następujący efekt finalny.

Poniżej załączam amatorski filmik ;p

Kod i biblioteki dostępne są na moim githubie, tutaj.

Mam nadzieję, że dla kogoś mój projekt okaże się przydatny i będzie inspiracją do zrobienia swojej wersji. Będę wdzięczny za komentarze i każdą konstruktywną krytykę.

 

 

Ocena: 4.77/5 (głosów: 79)

Podobne posty

56 komentarzy do “Prosta stacja pogodowa na Arduino

  • Bardzo ciekawy projekt, efekt końcowy naprawdę mi się podoba. Chciałbym Ci, drogi autorze, zwrócić uwagę na jeden, drobny szczegół. Czujniki DS18B20 mają unikalne(podobno) adresy, dzięki czemu nie ma potrzeby tworzyć aż trzech instancji OneWire, przypisywać trzech referencji, blablabla- krótko mówiąc: linijki od 33 do 43 można było skrócić do trzech;) Albo sześciu, biorąc pod uwagę przypisanie tych adresów. Ale zawsze to oszczędność dwóch pinów, dwóch oporników i kilku kabelków
    Nie chcę zanudzać i przedłużać komentarza, więc maksymalnie skracając: Wszystko, coś uczynił potrójnie robisz raz, przypisujesz czujnikom adresy (które można wcześniej odczytać) i odczytujesz z nich temperatury używając tych właśnie adresów. Schemat połączenia wrzucam razem z komentarzem a pomocy z tymi czujnikami chętnie udzielę, jakby co;)
    Pozdrawiam i gratuluję fajnego pomysłu i ładnego wykonania!

    Odpowiedz
    • Dzięki Ci wielkie zacny człowieku, że zwracasz na takie rzeczy uwagę. Wiedziałem, że tak się da. Tyle tylko, że miałem problem rozgryzając go z przykładu biblioteki, więc się poddałem i poszedłem na łatwiznę. Niestety często tak mam, że szukam rozwiązać szybszych i łatwiejszych zamiast bardziej optymalnych. Dzięki temu kod wygląda jak wygląda ;/
      Spróbuję do tego zajrzeć jak będę mieć chwilę.

      Odpowiedz
  • Witam,
    tez przymierzam się do budowy podobnej stacji i mam parę pytań. Jak spisuje się wyświetlacz, z jakiej odległości można odczytać wartości? Czy zabezpieczenie w postaci taśmy izolacyjnej jest wystarczające dla zewnętrznego termometra?

    Odpowiedz
  • Witam,
    to zależy jaki masz wzrok ;p Zawsze możesz pokombinować z niestandardowymi czcionkami, żeby były większe. Dla mnie i żony to jest czytelne z kilku metrów.

    Zabezpieczenie w postaci taśmy? Masz na myśli to wewnątrz “zewnętrznej części? Jeśli o to chodzi to jak najbardziej tak. To jest hermetyczna puszka, bardzo małe napięcie oraz znikomy prąd. Ponadto te kable z 5v się nie stykają nigdzie w tej skrzyneczce z GND. Fakt, lepiej zawsze użyć termokurczliwej koszulki. Nie wiem szczerze czemu tego tam nie zrobiłem…

    Odpowiedz
  • Ok, bardzo się cieszę :-) A tak mniej więcej o której godzinie bo zależy mi złożyć zamówienie przed 16:30 bo później koncert gram i może być ciężko żeby zamówić :-) A takie jedno pytanie… mam jeszcze rabat od ElektroPrzewodnika na 10 % mogę użyć dwóch rabatów ?

    Odpowiedz
  • Zrobiłem właśnie podobny projekt, tylko z archiwizacją w internecie i podglądem na stronie internetowej. Niestety skończyło mi się miejsce na Uno i dokupiłem Nano + moduł RF także polecę bezprzewodowo :) jak tylko będzie po sesji to zabieram się do przebudowy.

    fajne są takie projekty, gratuluję wykonania ;)

    Odpowiedz
  • Zainspirowany tym wpisem popełniłem coś podobnego, tylko że mniej funkcji i na wyświetlaczu 2×16. ;D Teraz tylko przenieść na promini i zrobić piękną obudowę ;)

    Odpowiedz
    • Niestety czujnik DHT11 jest g.. warty. Pokazuje mi wilgotność w pomieszczeniu 36-40% gdzie higrometr analogowy (taki z wyższej półki, skalibrowany) pokazuje 65%….

      Odpowiedz
      • To prawda, że nie jest to rewelacja. Pierwotnie, co wspomniałem w tekście miałem DHT22 ale uległ zniszczeniu więc wstawiłem to co miałem ;/ Przy następnym zamówienie elektroniki będę chciał go wymienić z powrotem na DHT22.
        Problem jest taki, że nie mam odniesienia do pomiaru wilgotności czymś innym ;/

        Odpowiedz
    • No i fajnie. Temperaturę bierzesz z DL18B20? Jakoś, pozostałe czujniki w moim projekcie oprócz DHT22 sporo mijały się z prawdą względem “dallasów”.
      Jak zrobisz obudowę to się pochwal. Przy następnym projekcie może się przydać :)

      Odpowiedz
  • Jedyne czego mi brakuje, a bardzo chciałbym mieć u siebie w chałupce, to pomiar kierunku i prędkości wiatru. O ile pomiar temperatury, wilgotności i opadów to banalna rzecz, to zdobycie urządzeń do pomiaru prędkości wiatru jest już trudniejszą rzeczą. :) Gdyby ktoś coś to proszę pisać. ;)

    Odpowiedz
  • U mnie wywala coś takiego. Jak sobie z tym poradzić?

    In file included from C:\Users\marcin\Desktop\arduino-1.6.0-windows\arduino-1.6.0\hardware\arduino\avr\cores\arduino/WString.h:29:0,
    from C:\Users\marcin\Desktop\arduino-1.6.0-windows\arduino-1.6.0\hardware\arduino\avr\cores\arduino/Print.h:26,
    from C:\Users\marcin\Desktop\arduino-1.6.0-windows\arduino-1.6.0\hardware\arduino\avr\cores\arduino/Stream.h:26,
    from C:\Users\marcin\Documents\Arduino\libraries\Wire/Wire.h:26,
    from C:\Users\marcin\Documents\Arduino\libraries\DS3231\DS3231.cpp:10:
    C:\Users\marcin\Documents\Arduino\libraries\DS3231\DS3231.cpp:24:31: error: variable ‘daysInMonth’ must be const in order to be put into read-only section by means of ‘attribute((progmem))’
    static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    ^
    Błąd kompilacji.

    Odpowiedz
      • Witam,
        mam problem z Twoim kodem, od dwóch dni siedzę i nie mogę wgrać sketcha, ciągle wyskakuje mi pełno problemów, przeinstalowałem już chyba z tysiąc bibliotek i nic. Błędy wyskakują przeróżne, ale w załączonym pliku przesyłam ostatnie błędy.
        Chciałem tez zapytać co zmienić jak będę chciał zastosować czujnik DHT22 zamiast DHT11.
        Chciałem to też puścić po komunikacji RF ale jestem za cienki :( Na zewnątrz chciałem dać czujnik DHT22, deszcz, barometr i jeden dallas. Jak będziesz miał chwilę, to napisz proszę co mogę zrobić żeby choć wgrać ten sketch na arduino. A i jeszcze pytanie czy bez zegara i dwóch czujników dallas układ ruszy, bo póki co tego mi brakuje.

        Pozdrawiam
        Amper

        Odpowiedz
  • Witam
    Kombinowałem aby podobne urządzenie zrobić na Arduino nano, wyświetlaczy 2×16, bmp180 oraz zegarze opartym na kości DS1307.
    Mam problem z podłączeniem barometru oraz zegara pod piny a4 i a5.
    Gdy podłączone jest jedno urządzenie wszystko działa.
    Jednak gdy podłącze obydwa, na wyświetlaczu pojawiają się “zakłamane” wyniki.
    Nie do końca wiem jak zrobić aby zegar nie wpływał na pracę barometru i odwrotnie.

    Z góry dzięki za podpowiedzi.

    Odpowiedz
    • kolego pokazuje Ci prawdziwe dane ciśnienia ?
      Mam podobny problem, temperatura działą czujnik deszczu również, wilgoci, ale barometr pokazuje mi 1400hpa
      Poradziłeś sobie z tym problemem ?

      Odpowiedz
  • Witam,
    czy może ktoś podać adres lub naprowadzić jak do tego projektu dołożyć komunikację po RF, bo czujniki DHT i BMP180 chciałem umieścić na zewnątrz, a całą resztę umieścić w domu. Niestety pisanie skryptów jest dla mnie czarną magią :(

    Odpowiedz
  • Witam
    Zacząłem się bawić arduino i spodobała mi się ta stacja meteo, ale mam problem z wgraniem kodu, wywala takie coś:
    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:29:0,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:26,
    from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26,
    from C:\Users\Burur\Documents\Arduino\libraries\Wire/Wire.h:26,
    from C:\Users\Burur\Documents\Arduino\libraries\DS3231\DS3231.cpp:10:
    C:\Users\Burur\Documents\Arduino\libraries\DS3231\DS3231.cpp:24:31: error: variable ‘daysInMonth’ must be const in order to be put into read-only section by means of ‘attribute((progmem))’
    static uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    ^
    Błąd kompilacji.

    Może poradzicie coś.
    Pozdrawiam

    Odpowiedz
  • Mam problem. Otóż program się wgrywa ale na wyswietlaczu sa tylko 4 rzedy kwadratów ( ustawialem kontrast, nie dziala). Pomógłby ktoś? Arduino 1.0.6 i biblioteki takie jak autora tutka.

    Odpowiedz
  • Cześć świetnie wykonane ale mam kilka pytań : 1. jak uszczelniłeś czujnik deszcz od strony czujnika ?? 2. czy masz pomysł jak wgrać grafikę np. słońce , parasolke żeby np. jak deszcz pada żeby zgasło słońce na ekranie a pojawiła się parasolka. ??

    Odpowiedz
    • W przypadku DHT11 czy DHT22 to bez znaczenia bo te czujniki nadają się tylko do śmietnika haha, a w szczególności 11. Ja rozumiem że czujnik za dwa dolary nie zapewni dokładności rodem z NASA, ale ku jak można w ogóle takie gówno produkować, a najgorsze jest to że wszyscy “majsterkowicze” robią poradniki jak tego szajsu używać po czym inni to kupują i nie sprawdzają nawet ich dokładności tylko powielają bzdury. Z czujnikami wilgotności do arduino jest spory problem, jedyny godny uwagi jaki znalazłem to BME280, ale znowu na temperaturach ujemnych oszukuje – choć nie tyle co DHT, ale oszukuje. Poza tym bardzo wolno reaguje na zmiany temperatur. Jedyne dobre czujniki temp. to DS18B20.
      DHT to porażka one nie potrafią wskazać poprawnej temperatury, z dokładnością choćby do 1-2 stopni) w temp. pokojowej, a czym temp. bardziej niska lub wysoka to stopień oszukaństwa rośnie, z wilgotnością jest mniej więcej podobnie, włączam osuszacz i pokazuje ponad 80%, stacja pogodowa pokazuje ponad 70% a DHT22 twierdzi że jest 43-50%…

      Odpowiedz
  • Witam. Czy w jakiś sposób mógłbym dane meteorologiczne z takiego projektu udostępniać na stronie internetowej aby przykładowo wyświetlały się na moim hostingu ? Pozdrawiam

    Odpowiedz
  • Witam,
    Potrzebuję zaawansowanej(nie profesionalnej) stacji meteo, najlepiej opartej na Arduino tak by można było dokładać dużą ilość czujników, dane wysyłane do serwera. Szukam kogoś kto już ma doświadczenie w tej materii i chciałby się spróbować odpłatnie z bardziej złożonym tematem. Stacja potrzebna jest dla potrzeb rolnictwa.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?