「雕爷学编程」Arduino动手做(27)——BMP280气压传感器
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。
【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验二十七:GY-BMP280-3.3 高精度大气压强传感器模块
BMP280
博世Sensortec - BMP280 是一种专为移动应用设计的绝对气压传感器。该传感器模块采用极其紧凑的封装。得益于小尺寸和低功耗特性,这种器件可用在如移动电话、GPS 模块或手表等电池供电型设备中。与上代产品相同,BMP180、BMP280 也基于Bosch 成熟的压阻式压力传感器技术,具有高确度和线性度,以及长期稳定性和很高的 EMC 稳健性。多种设备工作选择带来了最高灵活性,可以在功耗、分辨率和滤波性能方面对设备进行优化。
BMP280是博世最新推出的数字气压传感器,具有卓越的性能和低廉的价格,相对精度为±0.12 hPa(相当于±1米),传感器功耗仅有2.7μA。BMP280具有业界最小封装,采用极其紧凑的8引脚金属盖LGA封装,占位面积仅为2.0×2.5mm2,封装高度为0.95 mm。包括有压力和温度测量功能。该气压传感器支持SPI和IIC通信接口,相比上一代的BMP180,精度已有相当大的提升,非常适合应用于低成本的多旋翼飞行器飞行控制器上,价格仅有目前流行的MS5611的四分之一。传感器模块它的小尺寸和2.74μA@ 1Hz的低功耗允许在电池驱动的设备中实现。门内导航,医疗保健以及GPS改进的新兴应用需要高相对精度和低TCO。
BMP280芯片结构图
BMP280非常适用于地板水平检测等应用,因为传感器具有±0.12 hPa的优异相对精度,相当于±1m高度差,偏移温度系数(TCO)仅为1.5 Pa / K(相当于12.6厘米/ K)。作为广泛实施的BMP180的继承者,BMP280最初在2011年开始大量使用手机中的气压测量,BMP280在所有需要精确压力测量的应用中实现了高性能。同时,BMP280具有更高的应用灵活性,新的滤波器模式和SPI接口,而且相对于BMP180,占位面积缩小了63%。
应用范围
1、GPS 导航增强(例如改进初次定位时间、航位推算、斜率检测)
2、室内导航(室内检测、电梯检测)
3、户外导航,休闲和运动应用
4、天气预报
5、健康保健应用(如肺活量测定)
6、垂直速度指示(如上升/下沉速度)
GY-BMP280-3.3 高精度大气压强传感器模块
是个低功耗数字复合传感器,它可以测量环境温度和大气压强。气压敏感元件是一个低噪高精度高分辨率绝对大气压力压电式感应元件;温度感测元件具有低噪高分辨率特性,温度值可以对气压进行温度补偿自校正。通过配置采样率寄存器,可以设置敏感元件的采样率。非常适合空间有限的移动设备,如智能是手机、平板电脑、智能手表和可穿戴设备、天气预报、垂直速度指示、飞控设备、室内室外导航、智能家居装置。
模块电原理图
Adafruit_BMP280_Library,用于BMP280传感器的Arduino库
下载地址
https://github.com/adafruit/Adafruit_BME280_Library
https://github.com/mahfuz195/BMP280-Arduino-Library
https://github.com/adafruit/Adafruit_BMP280_Library/releases(最新版本1.0.3)
还要下载这个库--Adafruit_Sensor
https://github.com/adafruit/Adafruit_Sensor
需要的材料和硬件连接
注意的是这块板子的额定电压是3.3v,且同时支持两种连接方式: I²C 和 SPI ,下面的连接方式是SPI的连接方式和程序。
左边的是BMP280的6个接口,右边是Arduino的6个接口,两者用杜邦线连接即可。将USB线缆连接到电脑,选择好合适的开发板以及端口,上传并打开串口监视器,查看数值变化。
GY-BMP 280 Arduino UNO
VCC 3.3v
GND gnd
SCL 13
SDA 11
CSB 10
SDO 12
备注:不要使用5V,可能会损坏BMP280传感器
/* 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真) 实验二十七:GY-BMP280-3.3 高精度大气压强传感器模块(高度与温度计) */ #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 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); void setup() { Serial.begin(9600); Serial.println(F("BMP280 测试")); if (!bmp.begin()) { Serial.println(F("找不到对应的传感器")); while (1); } } void loop() { Serial.print(F("温度 = ")); Serial.print(bmp.readTemperature()); Serial.println(" *C"); Serial.print(F("气压 = ")); Serial.print(bmp.readPressure()); Serial.println(" Pa"); Serial.print(F("海拔 = ")); Serial.print(bmp.readAltitude(1013.25)); Serial.println(" m"); Serial.println(); delay(2000); }
I²C 的连接方式和程序