piątek, 15 grudnia 2017

BMP180 Czujnik ciśnienia i temperatury

BMP180 to przystępny cenowo (od 0,68€) czujnik ciśnienia atmosferycznego oraz temperatury. produkcji Bosch'a Dokładność pomiaru temperatury nie jest imponująca (±2.0°C), więc raczej ta funkcja może posłużyć do pilnowania roboczego zakresu temperatur czujnika ciśnienia. Używana jest też do kompensowania wpływu temperatury na ciśnienie (1). Dodatkowo w dokumentacji (3) można znaleźć wzór na wyznaczenie aktualnej wysokości czujnika na podstawie zmierzonej wartości ciśnienia. Czujnik można wykorzystać np. do budowy własnej stacji pogodowej i monitoringu zmian ciśnienia. Idąc dalej, obserwując zmiany temperatury i ciśnienia, można prognozować najbliższe zmiany pogody.

Wygląd modułu


Specyfikacja
  • interfejs I2C
  • domyślny adres I2C 0x77
  • zakres pomiarowy 300 - 1100hPa
  • napięcie zasilania 1,8 - 3,6V
  • roboczy zakres temperatury od -40°C do +85°C
  • pobór prądu do 1mA
  • dokładność pomiaru ciśnienia (Vdd 3,3V):
    • względna - typ. ±0.12hPa
    • absolutna - typ. +2.0hPa
  • dokładność pomiaru temperatury maks. ±2.0°C
  • rozdzielczość pomiaru:
    • ciśnienia 0,01hPa
    • temperatury 0,1°C
  • czas konwersji:
    • ciśnienia - zależny od rozdzielczości, maks. 76,5ms
    • temperatury maks. 4,5ms
  • długoterminowa stabilność pomiaru ciśnienia (1 rok) ±1.0hPa
Sam moduł można zasilać napięciem zarówno 3,3V, jak i 5V. Jest to możliwe dzięki regulatorowi napięcia 3,3V o oznaczeniu 662K. Spadek napięcia (drop out voltage) na tym regulatorze wynosi 250mV.
Co do napięcia na interfejsie, wg. dokumentacji, ma to być maks. 3,6V. Na wielu stronach (np. sklepów) też jest o tym ostrzeżenie. Mnie natomiast moduł działał z 5-cioma woltami na magistrali I2C. Kierowałem się uwagami w artykule BMP180 Barometric Pressure Sensor Hookup. Mowa tam m.in. o użyciu przez magistralę I2C układu otwarty dren, co sprawia, że można bezpiecznie podłączyć piny I2C pod porty 5V mikrokontrolera, Więcej w artykule I2C at the Hardware Level. Wracając jeszcze do dokumentacji - jest tam też wzmianka o "open drain" w kontekście magistrali I2C.
Moduł posiada także rezystory podciągające na I2C.

Uruchomienie

Do uruchomienia posłużyłem się przykładowym kodem z biblioteki Adafruit-BMP085-Library (2).
W komentarzu można wyczytać o konieczności zasilania czujnika napięciem 3,3V. W przypadku opisywanego modułu może  to być jednak 5V.

#include <Wire.h>
#include <Adafruit_BMP085.h>

// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here

Adafruit_BMP085 bmp;

void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
 Serial.println("Could not find a valid BMP085 sensor, check wiring!");
 while (1) {}
  }
}

void loop() {
    Serial.print("Temperature = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");

    // Calculate altitude assuming 'standard' barometric
    // pressure of 1013.25 millibar = 101325 Pascal
    Serial.print("Altitude = ");
    Serial.print(bmp.readAltitude());
    Serial.println(" meters");

    Serial.print("Pressure at sea level (calculated) = ");
    Serial.print(bmp.readSealevelPressure());
    Serial.println(" Pa");

    // you can get a more precise measurement of altitude
    // if you know the current sea level pressure which will
    // vary with weather and such. If it is 1015 millibars
    // that is equal to 101500 Pascals.
    Serial.print("Real altitude = ");
    Serial.print(bmp.readAltitude(101500));
    Serial.println(" meters");

    Serial.println();
    delay(500);
}

Test czujnika
Wyniki

Trudno jednoznacznie określić dokładność opisywanego czujnika nie mając innego, profesjonalnego czujnika, jako punktu odniesienia. Biorąc pod uwagę aktualne wskazania na http://www.if.pw.edu.pl/~meteo/ dla mojego miasta, w momencie pomiaru czujnik zmierzył o 5hPa  więcej. Z drugiej strony patrząc na ciśnienie podawane przez różne strony w sieci - każda prawie pokazuje co innego :)

Wyniki pomiaru na terminalu

Źródła
1) BMP180 Barometric Pressure Sensor Hookup
2) Biblioteka Adafruit-BMP085-Library
3) Dokumentacja

Brak komentarzy:

Prześlij komentarz