BMP280 — датчик атмосферного тиску від BOSCH
Невеличкий огляд датчика атмосферного тиску BMP280.
Хочу сказати, що я досить давно використовую датчики тиску, а останні декілька років перейшов на датчики Bosch Sensortec. Я використовував BMP085, BMP180, і тепер BMP280. Тобто маю з чим порівнювати.
BMP085 та BMP180 дуже схожі між собою, навіть бібліотека від BMP085 підходить до BMP180. BMP280 на їх тлі - це досить помітний крок вперед.
Отже, перейдемо від балачок до фактів. Перше, що відразу помічаєш, - розмір корпуса датчика. Він суттєво зменшився. Його 8-контактний корпус має розміри 2x2.5мм та висоту 0.95мм. Це вимагає при монтажі акуратності та деякого досвіду.
Датчик має інтерфейси I2C та SPI. (BMP085 має тільки I2C, BMP180 були моделі з I2C або SPI). Я використовував тільки I2C.
Взагалі, логіка роботи датчика залишилася такою ж, але зазнала деяких довгоочікуваних покращень (в прямому сенсі цього слова). Як і раніше, на початку роботи треба зчитати з датчика коефіцієнти (вони унікальні для кожного екземпляра). Потім зчитувати показники ADC для температури та тиску та обчислювати реальні значення температури та тиску за формулами, які надані у документації до датчика. У BMP280 суттєво поліпшили температурну стабільність та збільшили роздільну здатність АЦП до 20 біт для температури та тиску.
BMP280 має три режими роботи:
- SLEEP - режим сну,
- FORCED - режим аналогічний до роботи BMP085 та BMP180. Тобто, дали команду на вимірювання, зачекали, прочитали показники, датчик перейшов у режим сну.
- NORMAL - цей режим найбільш цікавий і заганяє датчик у циклічну роботу. Тобто, він самостійно через певний час, який можна задати, виходить з режиму сну та виконує вимірювання, складає дані у регістри пам’яті та знов засинає на вказаний час.
Таким чином, для ваших конкретних задач, можна налаштувати програмний фільтр та точність вимірювань за допомогою наступних параметрів:
- 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 - коефіцієнт фільтру
Перейдемо до реальних тестів. Cхема підключення:
Тестова плата:
Доречі, у протоколі I2C повинні бути присутні підтягуючі резистори 4,7КОм на лініях SDA, SCL. На платі їх нема. Я використовую внутрішні резистори мікроконтролера. Їх номінал значно більший, але такий прийом працює з BMP085, BMP180 та BMP280. Зверніть увагу, що такий номер може не пройти з іншими мікроконтролерами.
Код для прикладу:
#include <stdio.h>
#include <avr/io.h>
#include "atmega_bmp280_lib.h"
#include "uart.h"
int main(void)
{
int32_t temperature;
int32_t pressure;
int32_t altitude;
uint8_t error_code=0;
int32_t var1, var2;
// Initialize UART0
uart_init();
// Initialize TWI
i2cSetBitrate(1000);
// Initialize BMP280
BMP280_Begin(&error_code);
if (error_code > 0) {
printf("Error code: %d ",error_code);
return -1;
}
while(1)
{
bmp280Convert(&temperature, &pressure, &error_code);
altitude = bmp280CalcAltitude(pressure);
var1 = temperature/10;
var2 = temperature - var1*10;
printf("Temperature: %ld.%ld", var1, var2);
printf("Pressure: %ld Pa", pressure);
var1 = altitude/100;
var2 = (altitude - var1*100)/10;
printf("Altitude: %ld.%ld", var1, var2);
_delay_ms(200);
}
}
Скачати документацію на BMP280
Скачати бібліотеку GCC для AVR і приклад
Успіхів.
Дивись також:
Доброго дня! У мене питання - де Ви його придбали і в яку ціну? А також, чи не могли б ви мені допомогти з 180-м?
Доброго дня. Купував у китайців по $2. Наприклад тут: http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150409222319&SearchText=bmp280 В Україні поки не знайшов. Щодо BMP180 пишіть мені: [email protected] чим зможу допоможу.
Tags
bme280 bmp280 gps mpu-6050 options stm32 ssd1331 ssd1306 eb-500 3d-printer soldering tim mpu-9250 dma watchdog piezo exti web raspberry-pi docker ngnix solar bluetooth foc html css brushless flask dc-dc capture gpio avr rs-232 mpx4115a atmega mongodb st-link barometer pwm nvic git java-script programmator dht11 hih-4000 pmsm encoder max1674 smd sensors rtc adc lcd motor timer meteo examples i2c usb flash sms rfid python esp8266 servo books bldc remap eeprom bkp battery ethernet uart usart displays led websocket nodemcu wifi
Архіви



