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

Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P

Milek79 30 Dec 2015 14:10 8958 25
Renex
  • Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P
    Przedstawiam moją prostą stację pogodową opartą na czujniku BME280 i module radiowym NRF24L01+ wysyłającym dane do RPi.

    Wybór czujnika
    Chciałem uzyskać pomiar temperatury, jak i ciśnienia i wilgotności. Często stosowane w takich konstrukcjach są czujniki wilgotności DHT11 czy ciśnienia BMP085, ale zastosowanie ich wymagałoby obsługi dwóch różnych protokołów, bardziej skomplikowanej płytki, jak i większy pobór prądu w stanie uśpienia. Szukając odpowiedniego rozwiązania, wybrałem czujnik Boscha BME280. Charakteryzuje go duża dokładność jak i wyjątkowo niski pobór prądu.
    Niestety, jest on stosunkowo mało popularny i trudno dostępny w Polsce, więc zamówiłem chiński moduł GY-BME. Rozwiązało to również problem z przylutowaniem tak małego elementu. Chiński moduł został zmasakrowany w celu usunięcia zbędnego konwertera napięcia 3.3-5V.
    Czujnik przeprowadza pomiary w trybie ręcznym, bez filtru IIR i oversamplingu. Odczytuję po 2 bajty danych z każdego parametru. W stanie uśpienia pobiera zaledwie 100nA.
    Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P

    Wybór modułu radiowego
    Wybrałem popularny energooszczędny moduł radiowy NRF24L01P. Po stronie stacji z anteną na płytce, a przy odbiorniku moduł ze wzmacniaczem i antenką. Niestety, jak sie później okazało zasięg tych układów nie jest zbyt zadowalający.
    Wybrałem najniższą możliwą prędkość transmisji (250kbps), 2 bajty CRC, 5 bajtów adresu, 6 bajtów danych, automatyczne ACK i 3 próby retransmisji. W stanie uśpienia pobiera 900nA.
    Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P

    uC i zasilanie
    Jako mikrokontroler użyłem popularnego ATtiny2313A. Nie posiada on interfejsu I²C, ale w tak prostym zastosowaniu obsługę zrealizowałem programowo. Mikrokontroler usypiany jest do stanu Power Down, z którego wybudzany przez wewnętrzny watchdog. W trakcie działania watchdog przełączany jest w tryb resetu, chroniąc przed zawieszeniem się stacji. Używając rejestru PRR wyłączyłem zbędne peryferia, a do odczekiwania krótkich wartości używany jest Timer0 z rdzeniem przełączonym w tryb Idle.
    Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P
    Jak wynika z powyższego wykresu mikrokontroler w stanie Power Down pobiera około 4µA.
    Pobór prądu można było jeszcze zminimalizować stosując dowolną ATmegę z serii picoPower z podłączonym kwarcem 32.768kHz w trybie asynchronicznym, jednak już teraz jest on wystarczająco mały.

    Zasilanie
    Napięcie litowej baterii CR123A mieści się w granicach pracy wszystkich zastosowanych elementów. Przyjmując pojemność 1500mAh oraz średni pobór prądu stacji 8µA, przewidywany czas pracy to... ponad 20 lat, więc praktycznie jedynym ograniczeniem jest utrata właściwości baterii wraz z czasem.

    PCB
    Dwustronna płytka została zaprojektowana w programie KiCad. Zamówiłem w Chinach 11 płytek, za podobne pieniądze za jakie musiałbym w Polsce zapłacić za dwie :D. Płytka zawiera złącza na moduły, 6-pinowe złącze ISP, koszyczek na baterię oraz dodatkowe złącze na które wyprowadziłem pozostałe wolne piny mikrokontrolera. Wkradł się na niej mały błąd, trzeba dolutować rezystory 1kΩ podciągające linie I²C.
    Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P

    Obudowa
    Płytka dopasowana jest do obudowy BOX-SENS SUPERTRONIC, należy tylko wypiłować trochę podstawek, tak aby bateria nie przeszkadzała w domknięciu obudowy.
    Bezprzewodowa stacja pogodowa - AT2313A + BME280 + NRF24L01P

    Program na uC
    Program na AVR skleciłem na szybko, bez specjalnego przejmowania się przejrzystością kodu. Napisane w C, tym razem nie bawiłem się w obklejanie wszystkiego w ładne klasy C++. Zalecam kompilację używając avr-gcc z optymalizacją O3. Używa sprzętowego UARTaSPI do komunikacji z NRFem i prymitywnego softwarowego I²C do gadania z BME280. Co niecałe 5 minut wybudza się, wykonuje i wysyła pomiary. Dane odczytane z czujnika przesyłane są bez żadnego przetwarzania, kompensacja pomiarów na podstawie danych kalibracyjnych odbywa się już w odbiorniku, ze względu na niewyobrażalnie skomplikowany, niezrozumiały, beznadziejny (i tutaj jeszcze kilkanaście negatywnych przymiotników) kod boscha (nie wiem i nie chce wiedzieć kogo oni tam zatrudniają).

    Program na Raspberry Pi
    Ten również napisany na szybko, z wykorzystaniem sprzętowego SPI i biblioteki bcm2835. Odbiera dane z NRFa, kompensuje pomiary za pomocą okropnego kodu z dokumentacji boscha i uruchamia skrypt wpychający to do bazy rrdtoola (kod w załączniku wypisuje wartości na stdout). Dane kalibracyjne należy odczytać samodzielnie inną drogą zgodnie z pokręconą dokumentacją boscha, i wpisać do tablic znajdujących się w pliku .h. Trzeba uważać przy wpisywaniu ujemnych wartości, bo zastosowałem wszędzie 16-bitowe zmienne, a niektóre powinny być 8-bitowe.

    Podsumowanie
    Ogólnie zawiódły mnie moduły NRF24L01+, gdyż ledwie osiągają potrzebny mi zasięg. W przyszłości planuję pod dodatkowe złącze podłączyć moduł ESP8266. Obniży to czas pracy, ale co to za problem wymienić bateryjkę na pół roku, a nie będę musiał mieć specjalnego odbiornika. W wolnej chwili opiszę jeszcze moją konfigurację rrdtoola i skrypty PHP pozwalające na wybieranie obecnie wyświetlanych czujników i obliczenia w ONP do punktu rosy i humidexu. :wink:

    Cool? Ranking DIY
    Do you have a problem with Raspberry? Ask question. Visit our forum Raspberry.
    About Author
    Milek79
    Level 15  
    Offline 
    Has specialization in: programowanie / mikrokontrolery
    Milek79 wrote 207 posts with rating 18, helped 7 times. Been with us since 2013 year.
  • Renex
  • #2
    skaktus
    Level 37  
    Hej. Akumulator / bateria CR123 nie mają 1500 mA a w porywach 500 - 600 mA.
  • Renex
  • #6
    eurotips
    Level 39  
    Fajny projekt tylko ten czujnik, 8 dolarów i kilka tygodni oczekiwania na ten kit.
    W stacjach meteo nawet tych najdroższych czujki zewnętrzne padają jak muchy dokupić tego nie idzie a dorobić nie ma jak bo co producent to inny protokół. I dodam że dla mnie stacja meteo to pomiar temperatury, wilgotności i ciśnienia a reszta to fajans udający porcelanę.
  • #8
    eurotips
    Level 39  
    Dodaj jeszcze kierunek i siłę wiatru oraz czujkę opadów i będzie prawie Oregon.
    Te wszystkie zegary, budziki i prognozy to tylko niepotrzebny bajer w tych fabrycznych.
  • #9
    Milek79
    Level 15  
    Zastanawiałem się nad pomiarem opadów, ale chyba najsensowniej będzie jak w altance założę rynnę i jakiś przepływomierz :P.
    W takich amatorskich zabawkach popularne są zwykłe płytki ze ścieżkami i komparatorem, ale to jest dosyć binarny pomiar.
  • #10
    v-cu
    Level 12  
    Milek79 wrote:
    Po stronie stacji z anteną na płytce, a przy odbiorniku moduł ze wzmacniaczem i antenką. Niestety, jak sie później okazało zasięg tych układów nie jest zbyt zadowalający.

    A powinno być na odwrót, jeśli chcesz uzyskać dobry zasięg to moduł ze wzmacniaczem musi być jako nadajnik. Lecz odegra to się niestety na pobieranym prądzie ale myślę że nie znacznie jeśli układ wybudza się co 5min i tylko wtedy wysyła sygnał..
  • #11
    Jatsekku2
    Level 12  
    Jak zrealizowane jest sterowanie modułami nrf24L01 przez uart? Przecież ich "domyślny" sposób komunikacji to SPI.
  • #12
    Milek79
    Level 15  
    v-cu wrote:
    A powinno być na odwrót, jeśli chcesz uzyskać dobry zasięg to moduł ze wzmacniaczem musi być jako nadajnik. Lecz odegra to się niestety na pobieranym prądzie ale myślę że nie znacznie jeśli układ wybudza się co 5min i tylko wtedy wysyła sygnał..
    Tylko problem w tym, że te popularne moduły ze wzmacniaczem żrą dobre kilka mA w uśpieniu.

    Jatsekku2 wrote:
    Jak zrealizowane jest sterowanie modułami nrf24L01 przez uart? Przecież ich "domyślny" sposób komunikacji to SPI.
    Przepraszam, pomyłka :)
  • #13
    Jatsekku2
    Level 12  
    Milek79 wrote:
    Tylko problem w tym, że te popularne moduły ze wzmacniaczem żrą dobre kilka mA w uśpieniu.
    Zawsze można je przecież załączać sprzętowo (zwykły tranzystor w roli klucza) tuż przed wysłaniem ramki informacji.
    Milek79 wrote:
    A powinno być na odwrót, jeśli chcesz uzyskać dobry zasięg to moduł ze wzmacniaczem musi być jako nadajnik. Lecz odegra to się niestety na pobieranym prądzie ale myślę że nie znacznie jeśli układ wybudza się co 5min i tylko wtedy wysyła sygnał..

    Najlepiej byłoby zastosować moduły ze wzmacniaczami po obydwu stronach :D
    Swoją drogą kiedyś natknąłem się na patent zwiększania zasięgu sieci WiFi poprzez zakładanie odpowiednio wyciętych aluminiowych puszek. Były one przecięte wzdłużnie, a antena była umieszczona centralnie w powstałym półkolu. Miało to działać jako ekran kierunkujący sygnał wysyłany przez antenę. Możesz spróbować ;)
  • #14
    Milek79
    Level 15  
    Jatsekku2 wrote:
    Zawsze można je przecież załączać sprzętowo (zwykły tranzystor w roli klucza) tuż przed wysłaniem ramki informacji.
    No nie za bardzo, bo inicjalizacja nrfa według datasheeta trwa ogromne 100ms. Trzeba by było odłączać zasilanie samego wzmacniacza, a to by wymagało własnego pcb albo dużej przeróbki (zmasakrowania) modułu :D
  • #15
    dondu
    Moderator on vacation ...
    Milek79 wrote:
    Niestety, jak sie później okazało zasięg tych układów nie jest zbyt zadowalający.
    ...
    Ogólnie zawiódły mnie moduły NRF24L01+, gdyż ledwie osiągają potrzebny mi zasięg.

    Nie podajesz konkretów.
    Jakiego zasięgu się spodziewałeś, a jaki otrzymałeś?
    W jakich warunkach układy pracują? Opisz otoczenie, itd.
  • #16
    Milek79
    Level 15  
    dondu wrote:
    Milek79 wrote:
    Niestety, jak sie później okazało zasięg tych układów nie jest zbyt zadowalający.
    ...
    Ogólnie zawiódły mnie moduły NRF24L01+, gdyż ledwie osiągają potrzebny mi zasięg.

    Nie podajesz konkretów.
    Jakiego zasięgu się spodziewałeś, a jaki otrzymałeś?
    W jakich warunkach układy pracują? Opisz otoczenie, itd.

    Quote:
    Wersja z anteną na płytce radziła sobie ze ścianą + niecałe 10m
    otwartej przestrzeni. Teraz po zmianie odbiornika na wersję ze
    wzmacniaczem i anteną pracuje w docelowym miejscu ściana + 20m
    otwartej przestrzeni. Dalej nie sprawdzałem, ale nawet teraz jak
    inaczej przekręcę antenę czy położę blisko komputera to przestaje
    działać.
  • #17
    dondu
    Moderator on vacation ...
    Nadal nie odpowiedziałeś na pytanie:

    dondu wrote:
    Milek79 wrote:
    Niestety, jak sie później okazało zasięg tych układów nie jest zbyt zadowalający.
    ...
    Ogólnie zawiódły mnie moduły NRF24L01+, gdyż ledwie osiągają potrzebny mi zasięg.

    ... Jakiego zasięgu się spodziewałeś ... ?

    skoro jesteś niezadowolony z tych modułów. Innymi słowy nie moduły są do kitu, tylko Twoje założenia projektowe są złe.
  • #18
    Milek79
    Level 15  
    dondu wrote:
    Nadal nie odpowiedziałeś na pytanie:

    dondu wrote:
    Milek79 wrote:
    Niestety, jak sie później okazało zasięg tych układów nie jest zbyt zadowalający.
    ...
    Ogólnie zawiódły mnie moduły NRF24L01+, gdyż ledwie osiągają potrzebny mi zasięg.

    ... Jakiego zasięgu się spodziewałeś ... ?

    skoro jesteś niezadowolony z tych modułów. Innymi słowy nie moduły są do kitu, tylko Twoje założenia projektowe są złe.
    Takiego, żeby wystarczyło bez problemu z zapasem na to "ściana + 20m", a nie ledwo co. To raczej nie są duże wymagania.
  • #19
    nnemowski
    Level 8  
    Gdzie w Chinach kupiłeś płytki?
    Będę wdzięczny za link.
  • #21
    tetrus79
    Level 2  
    Na jakie napięcie jest płyta?
  • #23
    zbrozw
    Level 10  
    Witam,
    mam pytanie dot BME280 - wyniki pomiarów T/P są 20 bitowe a H - 16 bitów - czy masz wiedzę jaki jest algorytm ich przeliczenia na rzeczywistą T(C), H (%) P(hPa) tj czy jest to np. wynik x 0,01°C czy bardziej pokręcone... jak patrzę w dok bosha to chyba popłyneli z tym algorytmem...
    Potrzebuje to pod prosty układ na '51 w asm ale nie wiem czy go uciągnie...
    Pozdr.
    Zbyszek
  • #24
    Milek79
    Level 15  
    No niestety jest ten pokręcony kod z datasheeta, on jeszcze poprawia to o wartości kalibrujące odczytane z czujnika. Jeżeli czas przetwarzania nie jest problemem to cokolwiek da radę jeśli biblioteka do floatów się zmieści, jak nie to trzeba przerobić na fixed-point. (btw. dlaczego robisz na 51? okropna architektura, i jeszcze nie ma do tego żadnego normalnego kompilatora C)
  • #25
    zbrozw
    Level 10  
    Zasadniczo sam nie wiem, dlaczego mnie zaciekawił ten czujnik, może przez niby dużą rozdzielczość, ale nie dokładność. Robiłem projekty na czujnikach Sensiriona i tam ta dokładność jest nawet chyba lepsza. Najpierw kupiłem, potem przeczytałem i pomyślałem, po co się męczyć :) ...
    A swoja drogą opiszesz mi matematycznie wynik z rejestrów czy jest to za dużo pisania???
    Co do '51 (mam na myśli najnowsze ATMELe '51 a nie 8051 :)) to programuje je w asm (asembler) co pozwala wyzwolić z 8 bitowych procesorów bardzo dużo... Znam je bardzo dobrze, więc może dlatego.
    Dzięki za odpowiedź,
    Zdrowych i wesołych Swiąt
    Pozdrawiam
    Zbyszek