BMP180 to czujnik ciśnienia atmosferycznego.
Podłączamy go do magistrali I2C, którą należy włączyć. Cechy tej magistrali: tylko dwa przewody sygnałowe (urządzenia wymagają jeszcze dodatkowo + i GND), oraz możliwych wiele urządzeń podłączonych do tych samych dwóch pinów.
Przewody
Łączymy pin SDA (I2C dane) ze schematu pinów znany też jako GPIO2 z pinem DA w BMP180
Łączymy pin SCK (I2C clock) tj. GPIO3 z linią CL na czujniku BMP180.
Podłączamy 3,3V do +, a GND do – (zasilanie czujnika)
Ostatni pin BMP180 (IO) zostawiamy niepodłączony.
Włączenie obsługi I2C
RPi wymaga włączenia obsługi I2C w jądrze systemu. W konsoli Raspbiana:
1 | sudo raspi-config |
-> Interfacing Options -> P5 I2C Enabled.
Zapisujemy, restart nie zaszkodzi.
C++
Pobieramy bibliotekę obsługi np. taką:
BMP180 C++ Library
1 | git clone https://github.com/lexruee/bmp180 |
w katalogu src wpisujemy
1 | make |
następnie
1 | ./test.o |
Powinno wyświetlić: temperaturę (z dokładnością do 2 stopni), ciśnienie (tu bardzo dokładnie) oraz wysokość n.p.m. wyliczoną dla ciśnienia 1013.25 hPa. Ponieważ takie ciśnienie rzadko występuje, wpisujemy aktualną wartość ciśnienia z IMGW dla naszego regionu do stałej (#define) BMP180_SEA_LEVEL w pliku bmp180.c. Teraz – o ile jest to wartość poprawna i aktualna – pomiar pokaże też naszą aktualną wysokość nad poziomem morza. Dane te można pobrać w JSON ze stacji pogodowych w okolicznych miastach i np. badać rozbieżności w pomiarach ciśnienia naszym czujnikiem i danych IMGW.
Uwaga! Czujnik mierzy tzw. ciśnienie bezwzględne. IMGW podaje ciśnienie względne (teoretyczne ciśnienie w tym samym miejscu ale na wysokości poziomu morza).
Informacje i kalkulator przeliczania ciśnienia względnego i bezwzględnego.
W pliku test.c można też ustawić tryb pracy – 1 – normal, 2- high precision, 3- very high precision, 0 – low voltage. Jest to drugi argument (test.c):
1 | bmp180_set_oss(bmp, 2); |