BMP280 3.3V Digital Barometric Pressure Altitude Sensor I2C SPI
Цифровой барометр
- Предел измерений: 300 … 1100 hPa
- Точность измерений при 25°С ±0.12 hPa,
- Температурный диапазон -40 … +85 °C
- интрерфейсы I²C (up to 3.4 MHz) SPI (3 and 4 wire, up to 10 MHz)
- PCB size:(L*W)1.52* 1.20cm
Библиотека примеры
https://github.com/adafruit/Adafruit_BMP280_Library
https://github.com/BoschSensortec/BMP280_driver
источник avislab.com
BMP085 и BMP180 очень похожи между собой, даже библиотека от BMP085 подходит к BMP180. BMP280 на их фоне – это довольно заметный шаг вперед.
Первое, что сразу замечаешь, – размер корпуса датчика. Он существенно уменьшился. Его 8-контактный корпус имеет размеры 2×2.5мм и высоту 0.95мм. Это требует аккуратности и некоторого опыта при монтаже.
Датчик имеет интерфейсы I2C и SPI. (BMP085 имеет только I2C, BMP180 были модели с I2C или SPI).
Вообще, логика работы датчика осталась такой же, но претерпела некоторые долгожданные улучшения. Как и прежде, в начале работы надо считать с датчика коэффициенты (они уникальны для каждого экземпляра). Затем считывать показатели АЦП для температуры и давления и вычислять реальные значения температуры и давления по формулам, которые представлены в документации к датчику. У BMP280 существенно улучшили температурную стабильность и увеличили разрешение АЦП до 20 бит для температуры и давления.
BMP280 имеет три режима работы:
SLEEP – режим сна,
FORCED – режим аналогичен BMP085 и BMP180. То есть, дали команду на измерение, подождали, считали значения, датчик перешел в спящий режим.
NORMAL – этот режим наиболее интересен и загоняет датчик в циклическую работу. То есть, он самостоятельно через определенное время, которое можно задать, выходит из режима сна и выполняет измерения, сохраняет данные в регистры памяти и вновь засыпает на указанное время.
Для считывания данных с датчика теперь не нужно ждать завершения измерений. Кроме того, датчик имеет фильтр, который можно настраивать под свои задачи. Фильтр работает с учетом предыдущего значения. Его работа описывается следующей формулой:
bmp280_filter
Таким образом, для ваших конкретных задач, можно настроить программный фильтр и точность измерений с помощью следующих параметров:
OVERSAMPLING для температуры (16,17,18,19,20 бит)
OVERSAMPLING для давления (16,17,18,19,20 бит)
TSB – время ожидания датчика между измерениями (0.5,62.5,125,250,500,1000,2000,4000 мс)
FILTER_COEFFICIENT – коэффициент фильтра
Все эти изменения привели к таким улучшениям характеристик:
пример кода
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bme; // работаем по шине I2C
//Adafruit_BMP280 bme(BMP_CS); // работаем по шине hardware SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
if (!bme.begin()) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure());
Serial.println(" Pa");
Serial.print("Approx altitude = ");
Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
Serial.println(" m");
Serial.println();
delay(2000);
}