BME280 – czujnik temperatury, wilgotności oraz ciśnienia (część 2)

Proces odczytywania danych z sensora

Kompletny proces odczytywania danych z sensora można podzielić na kilka etapów:

  • Odczytanie danych kalibracji. Można to zrobić jednorazowo na początku programu.
  • Odczytanie danych z rejestrów sensora BME280 za pomocą funkcji BME280_read_PTH.
  • Złożenie danych o odpowiedniej długości z bajtów odczytanych z rejestrów.
  • Obliczenie kompensacji wyników za pomocą specjalnych funkcji wykorzystujących dane kalibracji.

Do składania słowa pomiaru z 8-bitowych danych odczytanych z rejestrów służy funkcja BME280_assembleRawValue pokazana na listingu 10. Funkcja składa 16-bitową wartość z dwu pierwszych bajtów bufora p_data i jeżeli argument has_xlsb jest równy 1 to 16-bitowa wartość jest dodatkowo rozszerzana do 20-bitowej o 4 bity z trzeciego bajtu.

Listing 10. Funkcja składająca daną wielobitową z danych 8-bitowych

Kompletna funkcja BME280_read odczytująca wyniki pomiarów z sensora, a także wyliczania dane z uwzględnieniem kalibracji została pokazana na listingu 11.

Listing 11. Funkcja odczytania i wyliczenia kompensacji pomiarów

Funkcje kompensacji pomiaru

Wyliczanie kompensacji pomiarów należy rozpocząć od temperatury, bo ten pomiar używa się do kompensowania pozostałych dwóch pomiarów: ciśnienia i wilgotności. W tym przypadku wartość temperatury używanej do kompensacji jest zapisywana w zmiennej globalnej _t_fine

Producent sensora podaje w swoich danych technicznych jak należy wyliczać pomiary na podstawie danych kalibracyjnych i mocno sugeruje żeby stosować gotowe procedury przygotowane przez BOSCH Sensortec. Firmowe procedury pokazano na listingach 12, 13 i 14.

Kompensacja pomiaru temperatury

Listing 12. Kompensacja pomiaru temperatury

Kompensacja pomiaru ciśnienia

Listing 13. Kompensacja pomiaru ciśnienia

Kompensacja pomiaru wilgotności

Listing 14. Kompensacja pomiaru wilgotności

Inicjalizacja czujnika BME280

Użycie funkcji obsługi sensora BME280 należy poprzedzić wywołaniem funkcji BME280_int, która zeruje zmienne wyniku temperatury, ciśnienia i wilgotności, otwiera interfejs I2C, zeruje zmienne z danymi kalibracji, odczytuje dane kalibracji, a także programuje rejestr konfiguracji o adresie 0xF5 pokazany na rysunku 9 – listing 15.

Listing 15. Inicjalizacja obsługi sensora BME280

Pomiary w trybie Forced

Dla przykładowego pomiaru ciśnienia, wilgotności i temperatury w stacji pogodowej wykorzystamy tryb Forced. W związku z tym dane dotyczące czasu stanu Standby dla trybu NORMAL nie będą miały znaczenia. Wyłączymy filtr IIR, natomiast bit programujący ilość linii interfejsu SPI wyzerujemy (dla I2C nie ma znaczenia).

Pomiar w trybie Forced wymaga za każdym razem wyzwolenia przez wpisanie do rejestru Control (adres 0xF4) trybu Forced (rysunek 10). Ponieważ nie można zaprogramować tylko bitów trybu pracy, to trzeba wpisać do rejestru Control wszystkie dane sterujące pracą sensora. Dla pomiarów do celów pogodowych nie jest konieczna duża dokładność, a więc dla wszystkich czujników nadpróbkowanie wyłączamy (ustawiamy na wartość x1). Na listingu 16 zaprezentowano prostą nieskończoną pętlę pomiarowa, która:

  • Wyzwala pomiar przez wpisanie trybu Forced do rejestru sterującego,
  • Odczytuje wszystkie pomiary, a także wylicza kompensacje,
  • Wyświetla wszystkie trzy pomiary,
  • Odlicza opóźnienie 10 sekund.

Listing 16. Pętla wykonująca pomiary

Funkcje zapisujące rejestry

Na listingach 17 i 18 zaprezentowano funkcje zapisu rejestrów konfiguracji, a także rejestru kontrolnego.

Listing 17. Zapisanie rejestru Config

Listing 18. Zapisanie rejestru sterującego

Program testowy wyświetla zmierzone wartości na wyświetlaczu dołączonym do płytki ewaluacyjnej. Pokazano to na rysunku 27.

Rysunek 27. Wyświetlanie pomiarów z czujnika BME280

Umieszczenie sensora BME280 na płytce ewaluacyjnej ma jedną wadę. Mierzona temperatura przewyższa temperaturę otoczenia, bo obok są źródła ciepła: mikrokontroler, układ debuggera, wyświetlacz z układem podświetlenia, stabilizatory układu zasilania itd. W przypadku mojej płytki z wyświetlaczem mierzona temperatura jest o ok. 4°C wyższa od temperatury otoczenia. W praktycznych realizacjach należałoby odsunąć sensor od płytki, a najlepiej umieścić go poza obudową, w pewnej odległości.

Kalibracja wyniku pomiaru ciśnienia

Wynik pomiaru ciśnienia jest podawany w Pascalach. Żeby go wyświetlać w hPa należy podzielić wynik przez 100. Wartość ciśnienia podawana jest wartościach bezwzględnych. Żeby miało wartość odnoszoną do poziomu morza, trzeba go skorygować. Ciśnienie rośnie na małych wysokościach do 1000 m w dużym przybliżeniu o około 11 Pa na każdy metr wysokości. W rzeczywistości ta zależność jest wykładnicza Jeżeli znamy wysokość pomiaru nad poziomem morza (h), to do zmierzonej wartości trzeba dodać 11*h.

Czujnik BME280 można znaleźć w sklepie Kamami.pl. Oferta obejmuje również moduły z zamontowanym sensorem.

Do pobrania

O autorze

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC.
Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.