凌顺实验室/指南/Arduino 指南/

Arduino Uno 使用气压传感器

实现效果

如果无法播放,请按一下连接查看:
https://www.bilibili.com/video/BV1qV411e7qG

元件说明

专为测量大气压力而设计的基本传感器,
BMP180可以测量300至1100 hPa(海拔9000m至-500m)的大气压,以及-40°C至85°C的温度,精度为±1.0°C。
而大气压随天气变化,因此我们也可以用它来监测天气的变化。

(所以在本次实验当中受天气影响,位置实际海拔为20米,但测量出为-1米,因为同样的程序两天前是正确的海拔高度。)

该模块带有板载LM6206 3.3V稳压器,因此您可以与Arduino等5V逻辑微控制器一起使用,而无需担心。

该模块使用的是I2C通信方式,非常方便与其他开发主板进行交互,其I2C地址已设置为0x77。

引脚说明

VIN 是模块的供电输入,可以在3.3V至5V之间的任何范围内
GND 地线,该连接到Arduino的地线(GND)
SCL 是I2C接口的串行时钟引脚
SDA 是I2C接口的串行数据引脚

BOM表

名称 数量
Arduino Uno x1
气压传感器BMP180 x1
面包板 x1
跳线(杜邦线) 若干

接线方式

Arduino Uno 引脚 <-> 电位器 引脚
3.3V <-> VCC
GND <-> GND
A5 <-> SCL
A4 <-> SDA

程序提点

安装BMP180/BMP085库

在代码编写之前,需要在添加BMP180的库,
从菜单栏中,依次打开:「项目」->「加载库」->「管理库」
在弹出的对话框的搜素栏里,输入:“bmp180” 查找相关的库
我使用的是名为「Adafruit BMP085 Library」的库
点击安装后,等待安装完成即可关闭对话框,进行代码的编写

在视频中有详细的添加步骤,如有不懂可再参考视频。

加载库

安装好之后,则可以在代码中引用加载

#include <Adafruit_BMP085.h>

创建bmp实例

创建名为bmp的实例,这样可以方便我们在代码中,使用Adafruit_BMP085的功能和访问

Adafruit_BMP085 bmp;

bmp常用函数

readTemperature() 获取/返回 传感器的温度。
readPressure() 获取/返回 传感器的气压。
readAltitude(101500) 获取/返回 指定的大气压力(以hPa为单位)计算海拔高度(以米为单位)。
readSealevelPressure() 获取/返回 计算海平面的压力(以hPa为单位)。

程序实现

// lingshunlab.com

#include <Adafruit_BMP085.h> // 加载BMP库,BMP085/BMP180通用
Adafruit_BMP085 bmp;  // 创建名为bmp的实例

void setup() {
  Serial.begin(9600); // 设置波特率
  if (!bmp.begin()) { // 判断bmp是否能正常初始化
    Serial.println("Could not find a valid BMP085 sensor, check wiring!"); 
    while (1) {
    }
  }
}

void loop() {
  Serial.print("Temperature = "); 
  Serial.print(bmp.readTemperature()); // 输出温度
  Serial.println(" *C");
  
  Serial.print("Pressure = "); 
  Serial.print(bmp.readPressure()); // 输出气压
  Serial.println(" Pa");

  Serial.print("Altitude = "); 
  Serial.print(bmp.readAltitude()); // 输出海拔
  Serial.println(" meters");

  Serial.print("Pressure at sealevel (calculated) = "); 
  Serial.print(bmp.readSealevelPressure()); //输出密封面的压力(计算后)
  Serial.println(" Pa");

  Serial.print("Real altitude = "); 
  Serial.print(bmp.readAltitude(101500)); // 输出通过指定海平面气压值计算的实际高度 
  Serial.println(" meters");
  
  Serial.println();
  delay(500);
}

程序上传成功后,打开「串口监视器」可以查看当前的位置信息