- pomiar ciśnienia atmosferycznego (300…1100 hPa),
- pomiar temperatury otoczenia (-40…85°C),
- pomiar wilgotności (0…100%),
- prezentacja wyników na wyświetlaczu OLED,
- zasilanie 5 V (USB),
- pobór prądu (z akumulatora) ok. 7,5 mA, lub 0,7 mA w stanie Standby,
- niewielkie wymiary.
Jest to bardzo prosty system mikroprocesorowy, którego „sercem” jest niewielki mikrokontroler firmy Microchip (dawniej Atmel) typu ATtiny84 realizujący całą, założoną funkcjonalność urządzenia. Mikrokontroler ten steruje pracą niewielkiego graficznego wyświetlacza OLED o organizacji 128×64 pikseli, używając do tego celu programowej implementacji interfejsu SPI, w który wyposażony jest zastosowany wyświetlacz. Obsługuje także scalony czujnik temperatury, wilgotności i ciśnienia atmosferycznego pod postacią układu firmy Bosch Sensortec o oznaczeniu BME280, używając do tego celu programowej implementacji interfejsu I²C, w który wyposażony jest wspomniany czujnik.
Czujnik BME280
Układ BME280 stanowi główny element stacji pogodowej, dostarczając wszystkie interesujące nas dane pogodowe, w związku z czym warto przyjrzeć się bliżej temu ciekawemu peryferium.
Układ BME280 charakteryzuje się następującymi, wybranymi cechami:
- pomiar ciśnienia atmosferycznego (300…1100 hPa), temperatury otoczenia (-40…85°C) i wilgotności (0…100%),
- szeroki zakres napięć zasilania 1,7...3,6 V,
- niski pobór prądu rzędu 3,6 mA/pomiar,
- wysoka dokładność pomiaru oraz niski poziom szumów,
- szybka magistrala I²C z dopuszczalną prędkością sygnału zegarowego dochodzącą do 3,4 MHz,
- szybka magistrala SPI z dopuszczalną prędkością sygnału zegarowego dochodzącą do 10 MHz,
- małe wymiary obudowy typu LGA 2,5×2,5 mm.
Powyższe parametry idealnie wpisują się w założenia naszego projektu, a jedynym problemem jaki możemy napotkać stosując wspomniany element jest jego dość kłopotliwa, jeśli chodzi o montaż, obudowa LGA, wymagająca sporej wprawy w lutowaniu oraz odpowiedniego sprzętu lutowniczego. Obsługa peryferiów tego typu polega na zapisie/odczycie wielu, specjalnych rejestrów konfiguracyjnych lub też rejestrów danych, przy udziale których, po pierwsze możemy zainicjować proces pomiarowy, a po drugie, dokonać odczytu interesujących nas wartości ciśnienia atmosferycznego, wilgotności i temperatury otoczenia. Będą to wartości „surowe”, wymagające odpowiedniego przeliczenia. Każdy element BME280 przechodzi na etapie produkcji proces kalibracji, który zapewnia osiągnięcie założonej dokładności pomiarów niezależnie od właściwości elementu piezo-rezystancyjnego, który stanowi w nim przetwornik ciśnienia na napięcie. Proces ten kończy się ustaleniem szeregu (dokładnie osiemnastu) specjalnych współczynników korekcyjnych (zapisanych w nieulotnej pamięci EEPROM elementu), dzięki którym możliwe staje się obliczenie skompensowanej wartości ciśnienia atmosferycznego, wilgotności i temperatury. Jest to dość typowe rozwiązanie stosowane przez wielu producentów w przypadku elementów tego rodzaju, które przechodzą proces kalibracji na ostatnim etapie produkcji.
Zatem, pierwszą czynnością, jaką należy wykonać w przypadku obsługi układu BME280 jest odczyt osiemnastu, 16- i 8-bitowych rejestrów, które przechowują wartości współczynników korekcyjnych. Następnie należy wysyłać do układu BME280 rozkaz inicjujący pomiary, by po pewnym czasie odczytać nieskompensowane wartości interesujących nas parametrów. Dalej, na podstawie dość skomplikowanych wzorów dostarczonych przez producenta układu, można obliczyć skompensowane wartości ciśnienia atmosferycznego, wilgotności i temperatury otoczenia. Jest to dość niezrozumiałe podejście, ale stosowane przez większość producentów scalonych barometrów. Przecież korzystając z faktu, że współczynniki korekcyjne znajdują się w nieulotnej pamięci układu, można całą procedurę obliczeń pozostawić po stronie elementu, a użytkownikowi udostępnić gotowe wyniki, co znacznie ułatwiłoby obsługę takiego rodzaju peryferium. Na szczęście firma Bosch Sensortec dostarcza gotowy driver do obsługi swojego czujnika, co znacznie upraszcza proces implementacji własnego oprogramowania.