风筝
发表于: 2019-12-20 23:52:58 | 显示全部楼层

如果您想要搭建属于自己的温度监控系统或测量无人机的飞行高度,或者只是想测量您所在区域的大气压力,那么BMP280气压传感器模块是您在项目中使用的最佳选择之一。 BMP280是绝对气压和温度传感器,是BMP085、BMP180、BMP183传感器的升级版。为什么称为升级版本?将在以下各节中进行讨论。


BMP280传感器模块可与Arduino、PIC、AVR等微控制器一起使用。在本篇文章中,我们将使用Arduino Uno开发板连接BMP280传感器,并在LCD1602显示模块上显示温度和压力值。在将BMP280与Arduino连接之前,我们需要下载Adafruit开发的BMP280 Arduino库。单击此Adafruit BMP280库链接以打开相应的Github页面,然后将头文件添加到Arduino IDE。


所需组件

●    Arduino开发板

●    BMP280传感器模块

●    连接线

●    面包板

●    液晶屏1602

Arduino-and-Pressure-Sensor.jpg


BMP280压力传感器模块

BMP280-Pressure-Sensor.jpg


BMP280传感器模块的最小电压(VDD)为1.71V,而早期版本的传感器模块的工作电压为1.8V(VDD)。就电流消耗而言,BMP280消耗2.7uA,而BMP180消耗12uA,BMP183和BMP085分别消耗5uA。 BMP280还支持新的过滤器模式。 BMP280传感器模块支持I2c和SPI协议,而其余的传感器则支持I2c或SPI。 BMP280传感器模块的精度为±0.12 hPa,相当于高度差为±1 m。由于这些关键参数,它通常用于各种应用程序中。 BMP传感器由压力感测元件、湿度感测元件和温度感测元件组成,它们还连接到压力前端、湿度前端和温度前端。这些前端IC是灵敏度模拟放大器,用于放大小信号。该模拟前端IC的输出作为输入信号馈入ADC。在这种情况下,模拟值被转换为数字电压,并且该电压被馈送到逻辑电路以进一步与外界连接。


BMP280传感器模块包括三种电源模式:睡眠模式(Sleep Mode)、强制模式(Forced Mode)和正常模式(Normal Mode)。在睡眠模式下,不执行任何测量,并且功耗最小。在强制模式下,将根据所选的测量和过滤器选项执行一次测量。正常模式在测量和待机时间之间连续循环,循环时间将由Tstandby定义。待机模式下的电流略高于睡眠模式。


Arduino与BMP280连接的电路图

连接Arduino与BMP280传感器和LCD的电路图如下所示。

BMP280-Pressure-Sensor-Intefacing-with-Arduino-Circuit-Diagram.png


传感器的VCC和GND引脚连接到Arduino的3v3和GND引脚。传感器的SCL和SDA引脚连接到Arduino板的A5和A4。


BMP280与Arduino连接的程序

在本文的末尾处给出了完整的BMP280 Arduino代码,可以直接上传到Arduino开发板。


包含这些库是为了启用特殊函数。 #include <Adafruit_BMP280.h>头文件,我们可以直接读取来自传感器的值。 #include <Wire.h>头文件我们可以使用I2C通信。 #include <LiquidCrystal.h>标头用于访问LCD的特殊函数,如lcd.print()Lcd.setCursor()等。可以使用上面提供的链接下载这些头文件。下载的文件将是zip格式。现在打开Arduino,选择Sketch>include library>Add.zip library,添加下载的文件。

  1. #include <Wire.h>
  2. #include <SPI.h>
  3. #include <Adafruit_BMP280.h>
  4. #include <LiquidCrystal.h>
复制代码

创建对象BMP上。创建一个目标文件以访问函数。

  1. Adafruit_BMP280 bmp; // I2C
复制代码

设置Arduino与LCD通信的LCD引脚。使用这些引脚传输数据。

  1. LiquidCrystal LCD(9, 8, 5, 4, 3, 2);
复制代码

初始化LCD和串口通讯。

  1. void setup() {
  2.   lcd.begin(16,2);
  3.   Serial.begin(9600);
  4.   Serial.println(F("BMP280 test"));
  5.   lcd.print("Welcome to ");
  6.   lcd.setCursor(0,1);
  7.   lcd.print("CIRCUIT DIGEST");
  8.   delay(1000);
  9.   lcd.clear();
  10.   if (!bmp.begin()) {
  11.     Serial.println(F("Could not find a valid BMP280 sensor, check the wiring!"));
  12.     while (1);
  13.   }
复制代码

当bmp对象的初始化失败时,调用以下函数。

  1.   /* Default settings from datasheet. */
  2.   bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
  3.                   Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
  4.                   Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
  5.                   Adafruit_BMP280::FILTER_X16,      /* Filtering. */
  6.                   Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
  7. }
复制代码

以下代码在串口监视器上打印温度,用于调试目的。

  1. void loop() {
  2.     Serial.print(F("Temperature = "));
  3.     Serial.print(bmp.readTemperature());
  4.     Serial.println(" *C");
复制代码

函数bmp.readPressurebmp.readTemprature用于调用特殊函数以及返回温度和压力值。

  1.     lcd.print(bmp.readTemperature());
  2.     lcd.print(bmp.readPressure());
复制代码

Arduino BMP280压力传感器连接的工作过程

函数bmp.readTemprature()和bmp.readPressure()用于返回温度和气压值。 lcd.setCursor将LCD的光标设置在液晶屏上所需的位置。 lcd.print命令从设置的位置打印数据。如果默认情况下没有为LCD设置位置,则它将(0,0)作为初始位置,并连续打印数据。下一个数据将占据下一个列的位置,并且过程将继续直到到达行末尾并移至下一行。

BMP280-Pressure-Sensor-Module-Interfacing-with-Arduino.jpg

BMP280可用于飞行玩具、手机、平板电脑、PC、GPS设备、便携式医疗设备、家庭气象站等。通过遵循此过程并使用头文件和某些特殊函数,我们可以轻松地将BMP280与Arduino进行连接。如果您有任何疑问,可以在本帖下面进行回复。


代码

以下是本文使用的完整代码: main.rar (724 Bytes, 下载次数: 110)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-28 19:31 , Processed in 0.100312 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表