什么是BMP180温度传感器?

BMP180传感器是BMPXXX系列的高精度数字压力传感器,用于教育和商业目的。它基于压电电阻技术,以实现EMC鲁棒性,高精度和线性,以及长期稳定性。它用于测量大气压或气压。气压或大气压是由我们上方的空气重量施加的压力。BMP180传感器测量该压力并将其输出为数字信号,可以通过使用I2C总线接口传感器如Arduino Uno等任何微控制器进一步读取。为了获得高精度的压力读数,它使用内置温度测量传感器。因此,BMP180也可用作非常好的温度测量传感器。在这里,我们将使用库与Arduino Uno相互连接。此外,我们将编写一个代码来制作高度计。

BMP180传感器的特点

·压力范围:300-1000HPa(-500米至+ 9000米到海平面)

·供电电压(架空传感器):1.8-3.6V DC

·电流消耗:1000μA(峰值)。

·使用I2C接口

·完全校准

·内置温度测量传感器

BMP180传感器的应用

· 天气预报

·Smartwatches.

·移动电话

·GPS导航

·垂直速度指示

使用BPM180传感器的模式

使用BMP180总共有四种模式,可以通过C代码中的变量覆盖率(0,1,2,3)选择。这些模式是;

·超低功耗模式

·标准模式

·高模式

·超高分辨率模式

每个模式具有不同的采样值,转换时间和电流消耗。类似,第一模式是超低功率模式。在这种模式下,电流消耗非常低,但转换时间更多。以下是所有其他模式的值。

模式 代码 内部没有。样本 转换时间(MS) 电流消耗(最大值)
超低功率 0. 1 4.5 3.
标准 1 2 7.5 5.
高的 2 4. 13.5 7.
超高分辨率 3. 8. 25.5 12.

如何使用Arduino Uno Board接口BMP180传感器?

为了接口BMP180传感器,我们将使用BMP180传感器模块,由BMP180传感器和一些必要的电子组件组成。此外,我们将使用Arduino库来使用I2C接口从传感器读取数据。

BMP180传感器模块的销图

VCC引脚用于将3.3-5V连接到模块。
GND引脚用于将GND​​连接到模块。
SCL和SDA引脚用于I2C接口。

接口BMP180传感器模块与Arduino Uno板

我们需要一个Arduino图书馆。从此链接下载库https://github.com/sparkfun/bmp180_breakout_arduino_library.并在Arduino IDE中安装它。如果您不知道如何在Arduino IDE中安装库,则访问此链接(根据如何在Arduino IDE中安装库)来访问其他文章的链接)。完成安装库后,您可以进一步进行。遵循此电路。

测量气压,温度和高度的流程图

#include  #include  sfe_bmp180压力;#define海拔1655.0 //用当前的城市高度void setup(){serial.begin(9600)替换1655.0;serial.println(“重启”);if(pressure.begin())serial.println(“bmp180 init成功”);else {serial.println(“bmp180 init失败\ n \ n”);而(1);}} void循环(){char状态;双t,p,p0,a;serial.println();serial.print(“提供高度:”); Serial.print(ALTITUDE,0); Serial.print(" meters, "); Serial.print(ALTITUDE*3.28084,0); Serial.println(" feet"); status = pressure.startTemperature(); if (status != 0) { delay(status); status = pressure.getTemperature(T); if (status != 0) { // Print out the measurement: Serial.print("Temperature: "); Serial.print(T,2); Serial.print(" °C, "); Serial.print((9.0/5.0)*T+32.0,2); Serial.println(" °F"); status = pressure.startPressure(3); if (status != 0) { delay(status); status = pressure.getPressure(P,T); if (status != 0) { Serial.print("Absolute Pressure: "); Serial.print(P,2); Serial.print(" mb, "); Serial.print(P*0.0295333727,2); Serial.println(" inHg"); p0 = pressure.sealevel(P,ALTITUDE); Serial.print("Relative Pressure(Sea Level): "); Serial.print(p0,2); Serial.print(" mb, "); Serial.print(p0*0.0295333727,2); Serial.println(" inHg"); a = pressure.altitude(P,p0); Serial.print("Altitude: "); Serial.print(a,0); Serial.print(" meters, "); Serial.print(a*3.28084,0); Serial.println(" feet"); } else Serial.println("error retrieving pressure measurement\n"); } else Serial.println("error starting pressure measurement\n"); } else Serial.println("error retrieving temperature measurement\n"); } else Serial.println("error starting temperature measurement\n"); delay(5000); }

代码工作

#include  #include 

首先,包括BMP180传感器的库和I2C接口的库。这两个库将包括所有必要的功能,以便使用Arduino Uno接口传感器。

SFE_BMP180压力;

创建类SFE_BMP180的对象。我们将使用此对象访问库的所有功能。

#define海拔1655.0.

定义名称高度的常数以存储您所在城市的当前高度。用您的城市高度替换16655.0。您可以在Google上找到您的城市高度。

void setup(){serial.begin(9600);

启动Setup()函数,首先定义串行通信的波特率。我们将使用此串行通信,以便从Arduino UNO接收传感器数据并在串行监视器上显示它。

if(pressure.begin())serial.println(“bmp180 init成功”);else {serial.println(“bmp180 init失败\ n \ n”);而(1);//永远暂停。}}

使用if语句,我们将启动BMP180传感器。如果成功启动,那么您将看到一条消息“BMP180 Init成功”。否则,您将看到消息“BMP180 Init失败”。Setup()函数在此处完成。

void loop(){char状态;双t,p,p0,a;

启动循环()函数。首先,定义计算所需的所有变量。“状态”用于存储传感器状态,“T”温度,“P'为压力,”P0“的相对压力,高度为”A“。

serial.println();serial.print(“提供高度:”);serial.print(高度,0);serial.print(“米,”);serial.print(海拔* 3.28084,0);serial.println(“脚”);

首先,我们将打印海拔高度,由您提供以米,然后以英寸为单位。

status = pressure.starttemperature();

使用StartTemperature()函数开始测量温度并将状态存储在“状态”变量中。如果测量开始,则“5”将存储在“状态”变量中,如果测量尚未启动'0'将存储在“状态”变量中。

status = pressure.starttemperature();

检查状态是否等于0。如果状态不等于0,则将执行IF语句中的代码。否则,将在串行监视器上打印“启动温度测量时出错”。

延迟(状态);

如果状态不是0,那么将延迟等于5 ms的状态,因为状态的值为5.这是传感器计算温度所花费的时间。

status = pressure.getthemperature(t);

使用getTemperature()函数从传感器获取温度值并将其存储在变量't'中。并将状态存储在“状态”变量中。我已经提到了上面的身份价值。

if(status!= 0){serial.print(“温度:”);serial.print(t,2);serial.print(“deg c,”);serial.print((9.0 / 5.0)* t + 32.0,2);serial.println(“deg f”);

如果状态不等于0,则首先打印温度以°Celsius打印,然后在华氏度的温度下打印温度。

status = pressure.startpressure(3);

使用BUSTPRESS()函数开始测量压力,其中3是使用传感器的模式。3表示您在超高分辨率模式下使用传感器。状态也存储在“状态变量”中。如果未启动测量,则存储在“状态”中的值为0.否则,对于模式3的模式1,14,对于模式3,模式为1,14的模式为0,8为5。

if(状态!= 0){延迟(状态);

如果状态不等于0,则在IF中执行所有语句。首先,给出等于状态值的延迟。我们正在使用模式3所以,延迟值将是24.这是传感器计算压力所花费的时间。

status = pressure.gregruture(p,t);

使用getPressure()函数从传感器获取压力数据,并将压力数据存储在变量'P'中。为了获得准确的压力值,我们也通过使用“T”变量在功能内通过温度值。

if(status!= 0){serial.print(“绝对压力:”);serial.print(p,2);serial.print(“MB,”);Serial.print(P * 0.0295333727,2);serial.println(“Inhg”);

如果状态不等于0,则首先打印“MB”毫巴的压力值,然后在“INHG”英寸汞中打印压力值。

p0 =压力.sealevel(p,高度);

通过使用selevel()函数来计算相对于海平面的压力并将值存储在“p0”变量中。为此,您必须通过您在功能中传递给您的压力和高度的值。通过我们使用变量'p'和'高度'来传递值。

serial.print(“相对(海平面)压力:”);serial.print(p0,2);serial.print(“MB,”);serial.print(p0 * 0.0295333727,2);serial.println(“Inhg”);

在“MB”中打印串行监视器上的相对压力读数,然后以INHG为单位的值。

a =压力。(p,p0);

通过使用Altitude()函数获取高度读数。为了获得高度读取,您必须在功能中压力(P)和绝对压力(P0)值。

serial.print(“计算机高度:”);serial.print(a,0);serial.print(“米,”);serial.print(a * 3.28084,0);serial.println(“脚”);


首先,通过乘以3.28084的仪表打印以米为单位的高度,然后以3.28084的仪表打印高度。

else erial.println(“错误检索压力测量\ n”);else erial.println(“启动压力测量\ n错误”);} else serial.println(“检索温度测量\ n错误”);} else serial.println(“启动温度测量\ n错误”);

您的传感器陷入任何阶段,您将根据舞台获取错误。

延迟(5000);

最后给出5000ms的延迟。

输出屏幕

所以我们已经完成了将BMP180压力传感器连接到Arduino。如果您对项目有任何疑问,请随时向我们发送电子邮件。


作者

评论被关闭。