Stacja pogodowa

Stacja pogodowa

Stację pogodową na pewnym etapie robi chyba każdy elektroniczny majsterkowicz. Jest to projekt o tyle atrakcyjny, że stosunkowo tani, dosyć łatwy w wykonaniu, ale jednocześnie efektowny. No i zapewne byłby to kolejny krótki artykuł o podłączeniu kilku czujników, gdybym tylko po drodze – jak to mam w zwyczaju – nie skomplikował sobie niepotrzebnie życia.

Zamów płytkę drukowaną na www.pcbway.com

Części

Każda szanująca się stacja pogodowa składa się z dwóch komponentów: samej stacji z wyświetlaczem oraz dodatkowego modułu umieszczanego zwykle na zewnątrz (nazwijmy go satelitą). Mój pierwotny plan zakładał skorzystanie z następujących części:

  • Arduino Micro w charakterze kontrolera stacji pogodowej. Malutki, a jednocześnie funkcjonalnie odpowiadający Arduino Leonardo. Można się (elektronicznie) zakochać od pierwszego podłączenia.
  • DHT-22 jako czujnik temperatury i wilgotności
  • BMP180 jako czujnik ciśnienia
  • DS3231 – zegar czasu rzeczywistego
  • NRF24L01 – modem 2.4Ghz do bezprzewodowej transmisji danych
  • Wyświetlacz LCD 20×4
  • Konwerter I2C dla wyświetlaczy LCD HD44780 – ostatnio kupiłem chyba z cztery i przylutowałem do wszystkich posiadanych wyświetlaczy. Zredukowanie liczby przewodów potrzebnych do podłączenia wyświetlacza do czterech sztuk – bezcenne. Szczególnie dla kogoś, kto nie lubi za bardzo lutować, czyli na przykład mnie.

Satelitę natomiast zamierzałem poskładać z:

  • Atmega Tiny84 na pokładzie tinyBRD 2.0 od Nettigo
  • DHT-22 jako czujnik temperatury i wilgotności
  • NRF24L01 – modem radiowy
  • Zasilanie – bateryjka CR2032 (co wymagało zakupu odpowiedniego koszyka)

Założenia

Tak jak w przypadku większości projektów założyłem, że wszystkie części powinny móc być łatwo reużyte, więc nie było mowy o bezpośrednim lutowaniu ich do płytek. Dodatkowo przyjąłem, że docelowo będę chciał przygotować dla stacji i satelity jakieś estetyczne obudowy, więc musiałem zadbać o kompaktowość obu modułów. Oczywiście nie było mowy o płytce stykowej i pajęczynie przewodów połączeniowych – to jest dobre do prototypu, ale nie do końcowego rozwiązania.

Prototyp

Nic nie stało jednak na przeszkodzie, żeby taki prototyp na płytce stykowej poskładać – dzięki temu mogłem też zadbać o część programistyczną. Na koniec zostawiłem sobie tylko zrealizowanie połączenia radiowego z satelitą. A więc płytka, trochę przewodów i voila.

Płytka, czyli walka z Eaglem

Chociaż projektowanie i budowanie różnego rodzaju elektronicznych urządzonek sprawia mi sporo frajdy, to lutować jakoś niespecjalnie lubię. Za każdym razem lutowanie układu to ciężka bitwa, w trakcie której w jednej ręce trzymam płytkę, w drugiej lutowany element, w trzeciej cynę i w czwartej lutownicę. Stwierdziłem więc, że zamiast robić płytkę samodzielnie, zaprojektuję ją, a potem zamówię w jakiejś firmie specjalizującej się w budowie prototypów.

Na początku ściągnąłem darmową wersję Eagle (umożliwia projektowanie układów do 2 warstw – ale to mi swobodnie wystarczyło), zainstalowałem, uruchomiłem, przez kilkanaście minut gapiłem się tępo w wyświetlacz, a potem zdeinstalowałem z twardym postanowieniem, że nigdy więcej. Tak nieintuicyjnego programu dawno nie widziałem – podobny układ okien widziałem kilkanaście lat temu w programach dla Windows 3.11.

Zacząłem więc szukać alternatyw, przekopałem się przez kilka programów – w tym również przez dwie aplikacje webowe – i w końcu stwierdziłem, że przecież jakoś ludzie tego Eagle używają, więc może i ja się nauczę.

Podszedłem więc do tego Autodeskowego produktu po raz drugi, z nieco większym zapasem cierpliwości i coś powoli zaczęło wychodzić. Bardzo szybko zidentyfikowałem główny problem: w bibliotekach komponentów elektronicznych Eagle brakowało praktycznie wszystkich części, które były mi potrzebne.

Zacząłem więc mozolnie szukać odpowiednich bibliotek, ale to była syzyfowa praca. Na przykład czujnik temperatury DHT22 jest dostępny w mnóstwie pakietów, ale jako czteropinowy czujnik, a ja miałem już gotową płytkę z wlutowanym odpowiednim rezystorem, kondensatorem – i trzema pinami (możecie zobaczyć na pierwszym zdjęciu). Doszedłem więc do wniosku, że spróbuję zaprojektować własne komponenty.

Choć Eagle jest bardzo popularny, nigdzie nie mogłem znaleźć dobrego tutoriala projektowania własnych komponentów, aż wreszcie natrafiłem na artykuł na stronach Sparkfun. Wprawdzie dotyczy on komponentu SMD (montowanego powierzchniowo), ale zawarta w nim wiedza wystarczyła do zaprojektowania wszystkich części. W dużym skrócie – odbywa się to przez przygotowanie tzw. pakietu (który przedstawia logiczne połączenia komponentu – jest potem widoczny na schemacie) oraz footprintu (czyli fizycznego układu otworków, możliwego do umiejscowienia na projekcie płytki). Na koniec łączymy część logiczną z fizyczną mapując wyprowadzenia logiczne z fizycznymi otworkami i gotowe. Zainteresowanych odsyłam do artykułu – jest świetny.

Trzy godziny później miałem już gotowy schemat:

Teraz przyszła pora na zaprojektowanie płytki. Eagle ma wprawdzie tzw. autorouter, który próbuje zaprojektować ścieżki pomiędzy odpowiednimi otworkami, ale tryb manualny jest też dosyć wygodny – po wybraniu pola lutowniczego podświetlane są wszystkie, z którymi ma ono zostać podłączone. Skończona płytka (dostosowana rozmiarem do obudowy, z której chciałem skorzystać) wygląda następująco:

Pliki schematu i płytki są dołączone do tego artykułu – podobnie biblioteka ze wszystkimi komponentami.

No to zamawiamy.

Kiedyś większość firm odmawiała realizacji zbyt małych projektów (np. wykonanie tylko jednego elementu) zasłaniając się ich nieopłacalnością. Współcześnie jest inaczej – można spokojnie zlecić wykonanie jednej sztuki prototypowej, jednak jest to zwykle znacznie droższe (per sztuka) niż w produkcji seryjnej.

Firm realizujących prototypy płytek PCB jest w Polsce bardzo dużo, nawet w samym Wrocławiu znalazłem jedną czy dwie. Ale mina mi szybko zrzedła, gdy okazało się, że wyprodukowanie pojedynczej płytki będzie mnie kosztowało przeszło 70 PLN – a to i tak bez jej wysyłki. Byłem przygotowany na poniesienie pewnych kosztów, ale taka wartość była już poza moim budżetem, nadszarpniętym ostatnio różnymi zakupami. Pozostało więc polutowanie wszystkiego samodzielnie. Westchnąłem więc i otworzyłem szufladę z płytkami prototypowymi.

Pierwszym krokiem było przelutowanie wyprowadzeń – większość komponentów miała wyprowadenia kątowe, a ja potrzebowałem prostych – inaczej wszystkie płytki sterczałyby do góry i trudno byłoby to wszystko upchnąć w jakiejś estetycznej obudowie.

Następnie przylutowałem do płytki w odpowiednich miejscach żeńskie listwy goldpinowe – dzięki temu mogę łatwo odłączać i podłączać komponenty. Gdy stacja mi się znudzi, będę mógł też każdy dosyć łatwo odzyskać.

Teraz przyszła kolej na połączenia. Kupiłem sobie wcześniej kilka przewodów o różnych kolorach, ale na szczęście w odpowiednim momencie nadziałem się na ojca, który podarował mi pęk przewodów kydexowych – cieniutkich kabelków w silikonowej izolacji. Na stanie miałem też kupioną jakiś czas wcześniej srebrzankę, która pomogła zaimprowizować tu i ówdzie ścieżki. Po kilku godzinach pracy z lutownicą i miernikiem, żeby przypadkiem czegoś nie pozwierać albo podłączyć nie tak, powstała taka oto pajęczynka:

Uruchamiam stację – działa! A przynajmniej na LCD pojawiły się napisy. Ale szybko odkryłem, że przestał pracować DHT-22 – na ekranie miałem cały czas wilgotność 0 (temperaturę ciągnąłem z BMP180). Szybko wyjąłem czujnik ze złącza i potraktowałem miernikiem. Okazało się, że podczas przelutowywania wtyków coś zrobiłem nie tak i nie stykał pin wyjścia (OUT). Zauważyłem też, że nie przyłożyłem się do tego procesu – przylutowałem złącza po przeciwnej stronie, niż były pierwotnie.

Złapałem więc za odsysacz i dalej rozlutowywać przewody. No i pech chciał, że w trakcie pracy odkleiłem pole lutownicze z płytki, a wraz z nim oderwał się kawałek ścieżki – i już nie miałem jak użyć jej w mojej stacji. Motyla noga, no.

Musiałem więc nieco zmienić moje plany. Wyposażyłem się w tani, a rewelacyjny BME-280 – następcę używanego przeze mnie BMP180. Oprócz temperatury i ciśnienia mierzy też wilgotność, więc miałem komplet czujników na pokładzie małej płytki, która po pierwsze pasowała wyprowadzeniami do przygotowanego złącza, a po drugie praktycznie na styk zmieściła się obok wpiętego obok NRFa.

Ponieważ w międzyczasie pozbyłem się z mojej kolekcji drugiego DHT-22 na rzecz ojca, nie miałem teraz czym mierzyć temperatury i wilgotności w satelicie. Doszedłem jednak do wniosku, że mogę mimo wszystko użyć tego uszkodzonego DHT – w końcu uszkodziła się płytka, a nie sam czujnik. Odlutowałem czujnik i z pomocą ojca zlutowaliśmy go (wraz z potrzebnym rezystorem) do tinyBRD. Wygląda to następująco:

Programowanie

Stację miałem już oprogramowaną w trakcie budowania prototypu, została już tylko komunikacja radiowa. Napisałem szybko proof-of-concept – połączyłem stację z Leonardo z wpiętym NRFem i przepchnąłem powietrzem jakieś Hello, World – działa! Zabrałem się więc za programowanie satelity.

Pierwszy problem napotkałem, gdy okazało się, że kupiony kiedyś programator Propox (zgodny z USB Asp) po prostu nie działa – zgłasza się systemowi operacyjnemu jako urządzenie usb o deksryptorze zerowym (po polsku: nie mówi, czym jest). Kupiłem więc w Nettigo drugi programator, ale okazało się, że ten z kolei nie współpracuje z nowszymi wersjami Arduino IDE i brakuje mu potrzebnej do zaprogramowania tinyBRD zworki Slow SCK. Pan Witold z Nettigo zainterweniował jednak wysyłając mi sprawny programator Propox i tym razem Blink radośnie zamigał diodą.

Pozostała jeszcze kwestia transmisji radiowej – za nic nie mogłem zmusić Arduino Micro do odebrania danych z satelity. Pan Witold pomógł raz jeszcze – dowiedziałem się od niego bowiem, że:

Nasza biblioteka korzysta ze specyficznych ustawień (3 bajty adresu, CRC, moc nadawania bodajże na 0dBm). Można próbować ustawić odpowiednio RF24 trzeba sie przegryźć przez ustawienia radia: https://github.com/nettigo/NettigoTinyBrd/blob/master/NettigoTinyBrd/avr/libraries/Radio/Radio.h#L156 W tym miejscu są ustawiane wszystkie parametry radia w naszej bibliotece.

Ale na większym Arduino powinno dać się uruchomić naszą bibliotekę do odbierania danych, jest wersja dla UNO: https://github.com/nettigo/RadioNRF24 zapewne na micro tez zadziała. Tutaj jest przykład jak odpalić łączność tinyBrd <-> UNO: https://starter-kit.nettigo.pl/2015/11/biblioteka-radionrf24-dziala-tez-na-arduino/

Zdecydowałem się na to drugie rozwiązanie – skorzystałem z biblioteki RadioNRF24. I nareszcie – po bodaj dwóch miesiącach od rozpoczęcia projektu – możemy podziwiać następujący widok (satelita oczywiście za oknem):

Obudowa

Na koniec zostało tylko przygotowanie obudowy. Skorzystałem z gotowej, której dodatkową zaletą były przygotowane kołeczki idealnie pod rozmiar wyświetlacza. Wygląda ona następująco:

Niestety, bardzo szybko spostrzegłem, że pomimo nawiercenia mnóstwa otworków wentylacyjnych po obu stronach, stacja zaczyna szybko zafałszowywać odczyty, ponieważ umieszczony w środku czujnik nagrzewał się od wyświetlacza. Dlatego też razem z ojcem wykonaliśmy jeszcze jedną korektę – niestety zepsuła ona estetykę stacji, ale przynajmniej teraz pokazuje ona prawidłowe wartości:

 

Źródła całego projektu możecie ściągnąć z mojego GitLaba: https://gitlab.com/spook/WeatherStation.git

Pliki załączone do artykułu:

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

Podobne posty

11 komentarzy do “Stacja pogodowa

  • A takie pytanie. Może akurat nie w temacie artykułu, a bardziej ogólnie. I nie koniecznie do autora. Szukam jakieś, nazwijmy to, powerbanka. Chcę zasilać płytkę (akurat różne arduina i coś z esp8266) 5V i kamerę 12V. Znajdzie się jakiś z dwoma takimi wyjściami? Potrzebne mi jest jeszcze 3.3V, ale to już na każdej płytce jest na którymś pinie. Takie coś mi jest potrzebne, bo ostatnio w mojej okolicy bardzo często są awarie sieci elektrycznej. No i moje projekty wtedy leżą, a nie powinny.

    Odpowiedz
  • witam. Minęło sporo czasu od opublikowania ale może jeszcze tutaj zaglądasz. Czy możesz podesłać schemat połączenia satelitki ?? Schemat stacji udostępniłeś (super ułatwienie dla początkujących – czyli dla mnie) Do czego służy biblioteka battery ??

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?