亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 BMP280 和 Arduino UNO 实现精准温度、气压与海拔测量

组件与物料清单

组件数量
Arduino UNO1
Adafruit BMP280 气压传感器模块1
Adafruit OLED 128x32 I2C 显示屏1

项目简介

本教程将演示如何结合 Arduino UNO 开发板、BMP280 传感器模块与 OLED 显示屏,实时测量并显示温度、气压及海拔高度。BMP280 是一款高精度、低功耗的数字气压传感器,同时支持温度测量,通过气压数据还可推算海拔。以下是该传感器的关键参数(摘自数据手册):

使用 BMP280 和 Arduino UNO 实现精准温度、气压与海拔测量

项目将同时支持公制(摄氏度、百帕、米)与英制(华氏度、英寸汞柱、英尺)单位显示,代码中可轻松转换。硬件连接采用 I2C 接口,BMP280 与 OLED 共享 SDA/SCL 线(Arduino UNO 对应 A4/A5),供电方面 BMP280 接 5V,OLED 接 3.3V。

接线与故障排查

1. 基础接线

两个模块均通过 I2C 总线连接:

使用 BMP280 和 Arduino UNO 实现精准温度、气压与海拔测量

2. 常见问题:I2C 地址不匹配

部分 BMP280 模块的默认 I2C 地址为 0x76,而 Adafruit 库默认使用 0x77。若串口监视器提示“Could not find a valid BMP280 sensor”,请按以下步骤修正:

  1. 断开其他 I2C 设备,上传 I2C 扫描器代码,记录检测到的地址(如 0x76)。
  2. 打开库文件 Adafruit_BMP280.h(通常位于 Documents/Arduino/libraries/Adafruit_BMP280_Library)。
  3. 在第 41 行左右找到 _i2caddr 定义,将默认的 0x77 修改为扫描到的地址(如 0x76)。
  4. 保存并重新上传测试代码,传感器应能正常识别。
使用 BMP280 和 Arduino UNO 实现精准温度、气压与海拔测量
未检测到传感器时的报错示例
使用 BMP280 和 Arduino UNO 实现精准温度、气压与海拔测量
I2C 扫描器检测到设备地址 0x76

代码示例

提供四个版本的完整代码,分别对应串口输出(公制/英制)与 OLED 显示(公制/英制)。核心库文件均来自 Adafruit 官方仓库:

串口输出版(公制单位)

/* BMP280 公制单位串口输出示例
 * 测量温度、气压、海拔并在串口监视器显示
 * 基于 Adafruit 官方例程修改
 */
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C 接口

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));
  if (!bmp.begin()) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }
  // 默认采样设置
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
                  Adafruit_BMP280::SAMPLING_X2,
                  Adafruit_BMP280::SAMPLING_X16,
                  Adafruit_BMP280::FILTER_X16,
                  Adafruit_BMP280::STANDBY_MS_500);
}

void loop() {
  Serial.print(F("Temperature = "));
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");
  Serial.print(F("Pressure = "));
  Serial.print(bmp.readPressure()/100); // 转换为 hPa
  Serial.println(" hPa");
  Serial.print(F("Approx altitude = "));
  Serial.print(bmp.readAltitude(1019.66)); // 海平面基准气压,需根据当地实况调整
  Serial.println(" m");
  Serial.println();
  delay(2000);
}

OLED 显示版(公制单位)

/* BMP280 + OLED 显示(公制单位)
 * 在 128x32 OLED 上显示温度、气压、海拔
 */
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BMP280.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BMP280 bmp;

void setup() {
  bmp.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.print("SurtrTech");
  display.setCursor(32,12);
  display.setTextSize(2);
  display.println("BMP280");
  display.display();
  delay(2000);
}

void loop() {
  display.clearDisplay();
  float T = bmp.readTemperature();
  float P = bmp.readPressure()/100;
  float A = bmp.readAltitude(1019.66);

  display.setCursor(0,0);
  display.setTextSize(2);
  display.print("Temp");
  display.setCursor(0,18);
  display.print(T,1);
  display.setCursor(50,17);
  display.setTextSize(1);
  display.print("C");

  display.setCursor(65,0);
  display.print("Pres");
  display.setCursor(65,10);
  display.print(P);
  display.setCursor(110,10);
  display.print("hPa");

  display.setCursor(65,25);
  display.print("Alt");
  display.setCursor(90,25);
  display.print(A,0);
  display.setCursor(110,25);
  display.print("m");
  display.display();
  delay(2000);
}

英制单位版本仅在单位换算上不同(温度转华氏度、气压转 inHg、海拔转英尺),代码结构相同,请参考完整源码。

测试效果展示

使用 BMP280 和 Arduino UNO 实现精准温度、气压与海拔测量
使用 BMP280 和 Arduino UNO 实现精准温度、气压与海拔测量

若在复现过程中遇到问题,欢迎在评论区留言交流。

制造工艺

  1. 集成二维码、RFID与体温验证的门禁控制系统
  2. 树莓派多路DS18B20 1-Wire温度监测:接线与编程全指南
  3. 树莓派与 Python 构建远程温度传感器:分步实战指南
  4. 树莓派配合 EzTemp 实现无缝温湿度监测
  5. DIY 家酿温控系统:Arduino 监测与调节发酵温度
  6. 树莓派 I2C 接口 BMP085:高精度温度与气压读取
  7. 实验室级热电偶精密测温与记录:树莓派接 ADS1118
  8. 树莓派多传感器温度光照监测系统:DS18B20 实战构建
  9. 基于模拟传感器的高精度压力与气流测量装置
  10. Arduino + DHT11 + 以太网盾板温湿度数据记录仪
  11. 基于Arduino UNO的精准频率与占空比测量
  12. BME280 环境数据实时显示于 Nextion 触摸屏——Visuino 图形化开发