Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Termometr bezprzewodowy (stacja pogodowa) - NRF24L01

Limonit 25 Dec 2015 00:27 10977 5
  • Termometr bezprzewodowy (stacja pogodowa) - NRF24L01

    Tym razem niewielki projekt urządzenia zwanego niekiedy stacją pogodową – czyli termometr z bezprzewodowym czujnikiem temperatury zewnętrznej.

    Od dłuższego czasu zastanawiałem się, jak w sposób praktyczny wykorzystać moduły z ukladami NRF24L01. Są to transceivery na pasmo 2,4GHz, posiadają jak na swoją cene spore możliwości:

    - szybkość do 2Mbps,
    - wbudowany protokół z zapewnionym sprzetowo handshakingiem,
    - obsługa 120 kanałów w paśmie 2,4GHz (kanały co 1/2MHz do 2400MHz do 2520MHz i tutaj uwaga – z mojego rozeznania legalnie można używac kanałów do 2483MHz)
    - napięcie zasialnia 1,9 – 3,6V co daje spory potencjał w zakresie zasilania z baterii.
    - zasięg niby do 100m (co jest wartością dość optymistyczną), antena na płytce w postaci ściezki.

    Najważniejsze założenia projektu to zasilanie z baterii – czujnik zewnętrzny baterie alkaliczne, czujnik wewnątrz: baterie alkaliczne lub akumulator Li-Ion, czytelny wyswietlacz niewymagający do odczytu podświetlenia, pomiar temperatury wewnętrznej i zewnętrznej, pomiar wilgotności zewnętrznej.

    Budowa odbiornika.

    Termometr bezprzewodowy (stacja pogodowa) - NRF24L01
    Termometr bezprzewodowy (stacja pogodowa) - NRF24L01
    Termometr bezprzewodowy (stacja pogodowa) - NRF24L01
    Wychodząc z przyjętych założeń – odbiornik oparłem o mikrokontroler ATmega328P, wyświetlacz ze steronikiem PCD8544, monochromatyczny, rozdzieczość 84×48 pixeli – znany z telefonów komórkowych epoki przedsmartfonowej. Odbiornik posiada oczywiście moduł radiowy, czujnik temperatury wewnętrznej – DS18B20. Ostatecznie wybrałem zasialnie z akumulatora litowo-jonowego. Zastosowałem zabezpieczony akumulator w rozmiarze 14500 – czyli baterii AA, pojemność 800mAh. Zastosowanie takiego akumulatora spowodowało konieczność dodania systemu ładowania. W tej roli popularny moduł z ukladem TP4056.


    Odnośnie modułu – uwaga pod adresem Chińczyka, który te moduły projektował. Układ TP4056 używa rezystora określającego maksymalny prąd ładowania. W module rezystor ten jest w rozmiarze 0603, co skutecznie utrudnia jego wymianę, do tego fabrycznie jest tam ustawione 1A. Taki prąd dla pchełki w obudowie SO-8 jest za duży, powoduje dość silne grzanie układu. Dodatkowo nie każdy akumulator zniesie ładowanie prądem 1A. Rezystor w projekcie został wymieniony na 4k3, co skutkuje ustaleniem prądu na około 280mA. Moduł ma gniazdo micro USB, zatem daje się naładować każą ładowarką z takim wtykiem. Moduł posiada diody czerwoną i zieloną do sygnalizacji procesu ładowania jak i jego zakończenia.

    Odbiornik wyposażony został w przycisk włączający podświetlenie wyświetlacza na około 10 sekund, oraz w wyłącznik. Całość zasilana jest poprzez stabilizator MCP1700 na 3,3V.

    Została także zainstalowana jedna dioda LED (pomarańczowa). Pierwotnie miała służyć za ostrzeżenie przed oblodzeniem (standard w samochodach, występuje też w niektorych takich termometrach fabrycznych, sygnalizuje temperatury z przedziału ± 3°C), ostatecznie z tego zrezygnowałem ze względu na potencjalną uciążliwość).

    Dodatkowo obwód wejściowy ładowarki (domyślnie micro usb 5V) jest podłączony poprzez dzielnik pół na pół na jeden z pinów mikrokontrolera w celu wykrycia faktu ładowania. Na czas ładowania włączane jest na stałe podświetlenie – w końcu oszczędzanie prądu wtedy nie jest konieczne.

    Jako obudowa element z pleksi z wywierconymi trzema otworami. Akumulator w standardowym koszyku 1xAA.

    Budowa czujnika zewnętrznego – nadajnika.

    Nadajnik oparty jest o dwa czujniki – temperatury DS18B20 i temperatury i wilgotności DHT-11. Ten drugi nie mierzy temperatury poniżej 0, co wymusiło użycie osobnego czujnika tempetarury. Mikrokontroler oraz moduł radiowy identyczne jak w odbiorniku. Zostałą użyta dioda LED – raczej w celach testowych. Ze względu na ograniczenie zużycia prądu oraz szczelną obudowę w końcowej aplikacji dioda nie jest wykorzystywana. Jako obudowy czujnika użyłem puszki hermetycznej. W miejscu, gdzie czujnik DHT-11 styka się z obudową, zostało wywiercone kilka otworów śr. 1mm.

    Termometr bezprzewodowy (stacja pogodowa) - NRF24L01
    Zasialnie odbiornika stanowią 3 baterie AA.

    Zasilanie, oszczędzanie energii.

    Projekt jest planowany do zasilania bateryjnego lub akumulatorowego, podobnie jak rozwiązania fabryczne. Jest to praktyczne ze względu na oczywisty brak konieczności prowadzenia zasilania sieciowego. W tym celu należało rozwiązać kilka zagadnień.

    Układy NRF24L01 w czasie nadawania lub nasłuchiwania/obierania danych pobierają nieco ponad 10mA. Sporo. W tym celu w pierwszej kolejności zaprojektowałem system który zapewni włączanie odbiornika tylko w wybranych momentach – spodziewanego nadjeścia ramki z danymi.

    Czujnik zewnętrzny wysyła co minutę pakiet danych – 5 bajtów. Wysyłanie jest niezależne od stanu potwierdzenia poszczególnych ramek. Odbiornik włącza odbieranie po 59 sekundach od ostatniego odebranego pakietu. Jeśli w ciągu 65 sekund nie odbierze, nastepnym razem włączy odbieranie 5 sekund wcześniej i zaczeka 15 sekund. Jeśli i to nie przyniesie efektu, odbiornik zostanie ponownie włączony po 40 sekundach i zostanie włączony przed 25 sekund. Jeśli i tym razem nie uda się odbiór – stacja przejdzie w tryb odzyskiwania łączności – co 2 min. 10 sekund będzie włączać i wyłączać odbiornik. W każdej chwili odebranie pakietu powoduje zresetowanie zegara i wyłączenie odbiornika. Uklad NRF24L01 posiada dedykowaną linię CE do sterowania zasilaniem radia, zatem samo włączanie i wyłączanie odbiornika odbywa się poprzez przełączanie jednej linii.

    Ramka danych ma postać (pierwszy i ostatni bajt nie przenoszą istotnych informacji):

    -55
    -dwa kolejne bajty- temperatura tak, jak podaje ją DS18B20,
    -wilgotność jako liczba całkowita
    -55

    Oba czujniki atmosferyczne zasilane są bezpośrednio z linii mikrokotrolera, co pozwala na łatwe odłączenie ich zasilania.

    Schemat odbiornika jak i wykonana płytka zakłąda zasilanie całości bezpośrednio z 3 baterii 1,5V a jedynie układ NRF24l01 poprzez stabilizator 3,3V(jego wejścia tolerują do 5V). Taki sposób okazał się nie najszczęśliwszy – Atmega328P przy zasilaniu 4,5V w trybie idle pobierała w granicach 2mA. Ostatecznie całość przerobiłem już na gotowej płytce aby była zasilana ze stabilizatora 3,3V. Czujnik DHT-11 wg naklejki na nim wymaga min. 3,5V, aczkolwiek nie stwierdziłem różnic w odczytach przy 3,3V.

    Ostatecznie układ nadawczy pobiera około 0,25mA (w trybie IDLE, średnio będzie to nieco więcej). Powinno to w zasadzie zapewnić działanie przez długie miesiące na zestawie baterii.

    Układ odbiornika pobiera jakieś 0,6mA, co też na zastosowanym akumulatorze powinno działać kilka tygodni. Podświetlenie wyświetlacza pochłania dodatkowe 10mA, ale uruchamiane jest na przycisk.

    Oprogramowanie

    Całość napisana w języku C w Atmel Studio 6. Zostałą wykorzystana biblioteka glcd - http://agock.com/software/glcd-graphic-lcd-library/ dla obsługi wyświetlacza wraz z generatorem znaków. Dla czujnika ds18b20 biblioteka stąd: http://davidegironi.blogspot.com/, do modułów radiowych stąd http://uhex.blogspot.com/2014/12/obsuga-moduu-radiowego-nrf24l01p-avr.html

    Reszta jest mojego autorstwa. Czcionka na wyświetlaczu to PocketCalculator ściągnięta kiedyś z internetu przerobiona na mapy dla wyświetlacza za pomocą GLCD Font Creatora.

    Na wyświetlaczu jest również pole ze statusem połączenia. Uśmiechnięta buźka symbolizuje poprawne docieranie ramek. Utrata 1 lub 2 ramek sygnalizowane jest wyświetleniem !. Utrata większej ilości danych – znakiem ? – tryb odzyskiwania łączności.

    Płytki zaprojektowane w KiCadzie, wykonane metodą fotochemiczną. Moduły radiowe, ładowarki TP4056 i wyświetlacza zastosowałem gotowe.

    Całość, jak wykazały testy działa przyzwoicie. Zdarzają się niekiedy utraty sygnału, jednak ogólnie niezawodność jest na zadowalającym poziomie.

    Do pobrania projekty KiCadowe oraz AVR Studio. Projekt też można obejrzeć u mnie: http://www.elektrofanklub.pl

    Cool? Ranking DIY
    About Author
    Limonit
    Level 13  
    Offline 
    Limonit wrote 138 posts with rating 366, helped 1 times. Live in city Wwa. Been with us since 2007 year.
  • #2
    treker
    Level 25  
    Jak najbardziej użyteczna konstrukcja :) Obudowa z plexi robiona specjalnie pod ten projekt, czy wykorzystałeś coś gotowego?
  • #3
    pier
    Level 24  
    DHT11 to jednym słowem kawałek plastiku a nie czujnik. Temperatura to jeszcze jak cię mogę ale wilgotność to już pokazuje jaką chce. Porównywałem kiedyś jego wskazania z czujnikiem SHT11. Tam gdzie sht wskazywał 70% dht 40%.
    Ale czego się spodziewać po czujniku za 5zł.
  • #4
    Limonit
    Level 13  
    Pomiar wilgotności z założenia jest dodatkiem. Zgadza się, że czujnik jest raczej słaby - do tego pewnym problemem jest kontakt czujnika z otoczeniem. To jest kompromis między szczelnością obudowy a jakością kontaktu. Nie miałem dobrego pomysłu jak to zrobić, więc nie inwestowałem w czujnik.

    Obudowa gotowa - do dostania coś takiego jako ekspozytor z pleksi za kilka zł. W zestawie miałem 3 sztuki, o boku 10, 7,5 i 5cm. Ten ma 7,5. Najmniejszy wykorzystałem w tym projekcie https://www.elektroda.pl/rtvforum/viewtopic.php?p=14494934#14494934
    Duży mi się niestety zniszczył.
    Czujnik zewnętrzny to puszka hermetyczna ze sklepu budowlanego.
  • #5
    pawel1029384756
    Level 21  
    Estetyka widocznej części na bardzo wysokim poziomie, podoba mi się to pleksi. Jedyne czego mi brakuje to zegar, czasem może to być przydatne, za jednym spojrzeniem, rano wiem jaka jest temperatura i jak bardzo jestem spóźniony.
    Co do tego czujnika wilgotności, to już kiedyś robiłem testy na fabrycznej stacji i wystarczyło ją postawić w innym miejscu i już wskazania były zdecydowanie inne. W zwykłym pokoju, gdzie znajdują się materiałowe meble (tapczan), albo dywan było zupełnie inne wskazanie, a też było inne jak położyłem obok ściany z tapeta. Sprawdzałem to też z stacją pogodową wysokiej klasy która miała już wiele lat i nie zawierała żadnej elektroniki, wskazania były inne, ale zmiany zależne od miejsca położenia były proporcjonalne. Wniosek jest taki, że czujnik wilgotności nie musi być świetny, ale jak jest ciągle w tym samym miejscu, to jego użytkownik będzie umiał zinterpretować prawidłowo odczyt. Wiadomo nie w laboratorium.
  • #6
    Frog_Qmak
    Level 25  
    DHT 11 ulega uszkodzeniu po przekroczeniu punktu rosy (wilgotność 100%, mgła). Zabiłem w ten sposób ze dwa moduły + DHT-22 + AM2312 czy jakoś tak, zanim do mnie dotarło, że niby część z nich to "zewnętrzne" moduły, jednak w praktyce nie nadają się na dwór :(