BMP280气压传感器实验:读取温度、气压并估算海拔
·
1. 简介
BMP280是一款常用MEMS气压传感器,采用I2C通信,可以采集环境气压与温度,并通过气压公式换算出海拔高度,广泛用于简易气象站、物联网项目。BMP280只有气压温度,BME280额外支持湿度。
1.1 传感器原理
BMP280内部集成了压阻式压力传感元件,当外界气压变化时,薄膜上的压阻桥路电阻值随之改变,通过内部ADC转换为数字信号输出。其测量范围约为 300~1100 hPa,精度可达 ±1 hPa,温度测量精度约 ±0.5℃。
1.2 应用场景
- 简易气象站:采集气压、温度数据并上传云端
- 室内外海拔测量:通过气压换算相对高度
- 无人机定高辅助:辅助飞行控制器估算高度变化
- 智能家居:检测门窗开关引起的气压微变
2. 实验硬件
- Arduino Uno
- BMP280模块
- 杜邦线
- 面包板
接线(I2C):
| BMP280 引脚 | Arduino Uno 引脚 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | A4 |
| SCL | A5 |
⚠️ 禁止5V供电,会烧毁模块!
软件:Arduino IDE,Adafruit BMP280库、Adafruit Unified Sensor库
2.1 硬件说明
BMP280模块通常有 4 个引脚(VCC、GND、SDA、SCL),部分模块还带有 CSB 和 SDO 引脚。SDO 引脚用于选择 I2C 地址:接 GND 时地址为 0x76,接 VCC 时地址为 0x77。默认模块通常已将 SDO 接 GND,地址为 0x76。
2.2 接线注意事项
- 务必使用 3.3V 供电,BMP280 不支持 5V 供电
- SDA 接 A4,SCL 接 A5,不要接反
- 杜邦线尽量短,避免信号干扰
- 若使用其他开发板,I2C 引脚位置可能不同,需查阅对应引脚定义
3. 核心代码
#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp;
#define SEALEVELPRESSURE_HPA (1013.25)
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("BMP280初始化失败,检查接线!");
while(1);
}
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X8,
Adafruit_BMP280::STANDBY_MS_500);
}
void loop() {
float temp = bmp.readTemperature();
float pressure = bmp.readPressure() / 100.0F;
float altitude = bmp.readAltitude(SEALEVELPRESSURE_HPA);
Serial.print("温度:");Serial.print(temp);Serial.print(" ℃ ");
Serial.print("气压:");Serial.print(pressure);Serial.print(" hPa ");
Serial.print("估算海拔:");Serial.print(altitude);Serial.println(" m");
delay(1000);
}
4. 实验现象
串口持续输出温度、气压、估算海拔。海拔数值是换算值,不是直接测量,会受天气、气流影响产生小幅跳动。开启内置滤波可以减少抖动。
4.1 串口输出示例
温度:26.32 ℃ 气压:1008.45 hPa 估算海拔:42.18 m
温度:26.31 ℃ 气压:1008.42 hPa 估算海拔:42.35 m
温度:26.35 ℃ 气压:1008.48 hPa 估算海拔:41.96 m
4.2 现象分析
- 温度读数相对稳定,变化幅度通常在 ±0.5℃ 以内
- 气压读数会有小幅波动,这是正常现象,受气流和环境影响
- 海拔数值跳动较大,因为它是根据气压换算而来,气压微小变化会导致海拔明显变化
- 用手轻轻按压传感器(注意不要损坏),可以看到气压和海拔读数明显变化
5. 常见问题
- 初始化失败:SDA/SCL接反、供电5V、I2C地址错误,使用I2C扫描工具排查。
- 海拔误差大:1013.25hPa是标准海平面气压,需要填入当地实时气压才能提高精度。
- 温度偏高:传感器靠近发热的单片机,热量传导导致读数不准。
5.1 初始化失败排查步骤
- 检查供电是否为 3.3V,切勿使用 5V
- 确认 SDA 接 A4、SCL 接 A5,不要接反
- 使用 I2C 扫描程序确认设备地址(0x76 或 0x77)
- 检查杜邦线是否接触良好,可尝试重新插拔
5.2 提高海拔精度的方法
- 查询当地气象站实时气压值,替换
SEALEVELPRESSURE_HPA宏定义 - 在稳定环境下进行多次采样取平均
- 使用
bmp.readAltitude()前先校准基准气压
6. 小结
BMP280利用压阻效应采集气压,依靠标准大气模型计算海拔。该传感器适合做相对高度测量,不能当做高精度测高设备。后续可以拓展OLED显示,制作桌面微型气象站。
6.1 实验收获
通过本次实验,我们掌握了:
- I2C 通信协议的基本使用方法
- BMP280 传感器的数据读取流程
- 气压与海拔之间的换算关系
- 常见硬件故障的排查思路
6.2 拓展方向
- 添加 OLED 显示屏,实时显示温度、气压、海拔
- 接入 WiFi 模块,将数据上传到云端或手机 App
- 结合 DHT11 温湿度传感器,制作完整的气象站
- 记录长时间气压变化,分析天气趋势
更多推荐
所有评论(0)