
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.


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.


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.

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



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.

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
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.

Cool? Ranking DIY