大气压强传感器(BMP280)
前言
本实验中大气压强传感器模块使用的是BMP280,这是一款专为移动应用而设计的高精度大气压传感器, 传感器模块采用极其紧凑的封装,其小尺寸和低功耗可以应用在手机、 GPS 模块、 手表的电池供电设备中。 BMP280 传感器除了可以测量大气压强,还可以测量温度(温度精度不高)以及通过计算公式来换算出海拔高度。
实验平台
pyBoard开发套件和超声波传感器模块,传感器模块连接到I2C/UART扩展接口。
实验目的
编程测量当前环境的大气压强、温度信息,将大气压强通过公式计算出当前海拔高度,并在OLED显示。打造自己的气压计!
实验讲解
市面上大多BMP280模块都通用,使用I2C总线通讯,下图是一款BMP280传感器模块:点击购买>>
| 模块参数 | |
|---|---|
| 供电电压 | 3.3V |
| 工作电流 | <20mA |
| 通信方式 | I2C总线 |
| I2C地址 | 0x76(BMP280的SDO默认下拉); 当 BMP280 的 SDO 引脚上拉时,I2C 地址为:0x77 |
| 引脚说明 | VCC: 接3.3V GND: 接地 SDA: I2C数据引脚 SCL: I2C时钟引脚 |
从上面介绍可以看到,BMP280是一款通过I2C接口驱动的传感器。连接到我们的I2C(2)外扩接口上。我们通过前面学习的I2C接口使用的方式,即可以对该模块实现数据通讯。
海拔高度计算:
标准大气压是指把温度为0℃、纬度45度海平面(海拔为0米)上的气压称为1个大气压,其数值为101325 帕斯卡(Pa)。
大气压和海拔高度的关系:P=P0×(1-H/44300)^5.256
因此计算高度公式为:H=44300*(1- (P/P0)^(1/5.256) )
上式中:H为海拔高度,P0=标准大气压(0℃,101325Pa)
从上面公式可以看到,高度是通过大气压强换算出来的,从物理学的角度我们可以知道,高度越高的地方,空气越稀薄,大气压强越低。通过气压的变化我们就可以计算出海拔高度;但是这存在特定条件,那就是温度为0℃的时候,而温度越高的地方,空气越稀薄,大气压强就越低。因此高度数据理论上需要做温度补偿,因此本实验的高度值换算存在一定的误差。有兴趣的小伙伴可以自行深入研究。
Python的强大之处是其有丰富的模块和函数库,一旦模块建立了,那么后来者使用起来就非常简单,无须再去做底层驱动的开发。从而实现面向对象的编程,而当有需要的时候又可以去改底层代码,可以说是进可攻退可守,非常灵活。在这里我们直接调用已经编写好的python驱动文件,该文件实现了对大气压、温度、高度的测量和计算。用户直接使用即可,具体如下:
BMP280对象
构造函数
bmp = bmp280.BMP280(i2c)
构建bmp280对象。
参数说明:
i2c:定义好的I2C对象。
使用方法
bmp.getTemp()
返回温度值,单位℃,数据类型为float。
bmp.getPress()
返回气压值,单位Pa,数据类型为float。
bmp280.pressure()
返回大气压强值,单位hPa (1hPa = 100Pa), 数据类型为float
bmp.getAltitude()
返回海拔高度值,单位m, 数据类型为float。
理解了BMP280传感器原理和对象使用方法后,我们可以整理出编程思路,流程图如下 :
参考代码
'''
实验名称:大气压强传感器
版本:v1.0
平台:pyBoard开发套件
作者:01Studio
说明:测量BMP280温度、气压和计算海拔值,并在OLED上显示。
'''
import bmp280, time
from machine import Pin,SoftI2C
from ssd1306 import SSD1306_I2C
#初始化OLED
i2c = SoftI2C(sda=Pin("Y8"), scl=Pin("Y6"))
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
#初始化BMP280,UART/I2C接口
i2c2 = SoftI2C(sda=Pin("Y10"), scl=Pin("Y9"))
BMP = bmp280.BMP280(i2c2)
while True:
oled.fill(0) # 清屏,背景黑色
oled.text('01Studio', 0, 0)
oled.text('Air Pressure:', 0, 15)
# 温度显示
oled.text(str(BMP.getTemp()) + ' C', 0, 35)
# 湿度显示
oled.text(str(BMP.getPress()) + ' Pa', 0, 45)
# 海拔显示
oled.text(str(BMP.getAltitude()) + ' m', 0, 55)
oled.show()
time.sleep(1) # 每隔1秒采集一次
实验结果
运行代码,可以见到实验结果:温度:28.36℃,气压:101160 Pa,高度:13.74 M。 该数据的实测地点深圳市,楼层5楼,可见数据还是相当合理。
可以将代码 离线部署 ,开接上锂电池供电,尝试上下楼,会发现气压和海拔数值相应的变化。
本节实现了大气压强传感器模块BMP280的应用,而且实验结果的精度很高,有兴趣的小伙伴可以结合自己情况,打造一个属于自己的气压计,然后到户外暴走!