0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用BMP180进行温度压力和高度测量

454398 来源:网络整理 作者:网络整理 2019-12-05 10:12 次阅读

BMP180 是博世Sensortec的新一代数字气压和温度传感器。在本教程中,我们将简要回顾该设备并描述如何将其与Arduino Uno板连接以测量周围的温度和压力。我们还将讨论从压力读数中检索传感器高度的问题。

使用BMP180的温度,压力和高度测量

实验设置

Bosch Sensortag的BMP180是一款超低功耗数字温度和压力传感器,具有高精度和稳定性。它由压阻传感器,模数转换器,带EEPROM和串行I2C接口的控制单元组成.BMP180传感器对压力和温度的原始测量必须使用校准数据补偿温度影响和其他参数。保存到EEPROM中。在本教程中,我们将使用Arduino开发板从BMP180传感器读取温度和气压测量值,并在基于1.44英寸ILI9163的TFT显示器上显示数据。如果您想重复此实验,则需要做以下事情。

1。任何以3.3V电压运行的Arduino开发板 。我正在使用Elecrow的 Crowduino Uno 板,它具有一个板载滑动开关,可在3.3V至5.0V之间选择工作电压。如果要使用此板,请确保将开关滑动到3.3V位置。

Elecrow的Crowduino Uno板

2。 BMP180传感器模块

BMP180传感器突破模块

3。基于ILI9163的TFT显示屏 (我使用的是Elecrow的1.44“尺寸显示屏)。

1.44” TFT显示屏(ILI9163驱动程序)

4。 一块面包板和少量跳线,用于将传感器和显示器连接到Arduino板上。

下图描述了本教程的实验设置。 BMP180和TFT显示屏均由3.3V供电。 BMP180支持I2C接口,因此SDA和SCL引脚连接到Arduino板的A4和A5引脚。 ILI9163 TFT驱动器支持SPI接口。下图右侧所示的表描述了显示器和Arduino之间的接线。 I2C和SPI引脚名称印在BMP180和TFT显示模块的底层丝网上。

o4YBAF3XGfGAMklXAAEwRNsfB2g403.jpg

传感器和显示设置

这是在实验板上进行的该实验的实际设置。

与Arduino的BMP180传感器连接

Arduino固件

对于传感器读数,我使用的是Love Electronics Ltd.的BMP180 Arduino库(我不确定这家公司现在是否存在,或者它在库中的含义是不是) 。您需要下载它(下面提供的链接)并将此库安装到Arduino/库/位置。

下载BMP180库

用于ILI9163 TFT LCD,我正在使用另一个免费的开源Arduino库TFT_ILI9163C,您可以从以下链接下载。

下载TFT_ILI9163C Arduino库

TFT库将Adafruit_GFX库用于字体,因此您也需要下载并安装它。

下载Adafruit_GFX_Library

这两个库都安装好了为Arduino编写固件。我在下面编写和共享的固件以摄氏度和华氏度为单位显示温度,以毫巴和inHg为单位的大气压力。为了计算传感器高度,我们需要了解以下部分中讨论的参考表面压力值。

关于检索传感器高度的重要说明

请注意,BMP180传感器提供温度和压力的绝对测量值,但不提供海拔高度的直接输出。由于大气压力随高度降低,因此您可以通过了解地面的参考压力值来找出传感器的垂直位移。例如,为了从海平面计算传感器高度,您需要知道您当地的当前平均海平面压力。平均海平面压力不是恒定的,而是随环境温度和天气模式而变化。找出当前海平面压力的最简单方法是查看您最近的机场或国家气象服务的网站。他们通常每小时大约在其网站上更新一次。我住在弗吉尼亚州的威廉斯堡,我从Weather.gov网站检查了平均海平面压力。在我进行此实验时,平均海平面压力为1027.7毫巴或102770帕斯卡。在下面的Arduino代码中( float seaLevelPressure = 102770; ),我使用此值作为平均海平面压力,并使用传感器读取压力的差值和该值来计算传感器位置的高度,那是我在弗吉尼亚州威廉斯堡的房子的二楼。因此,为了计算传感器位置的高度,您必须用当前的本地海平面压力值(帕斯卡)(1毫巴= 100帕斯卡)替换该值。有了本地海平面压力的知识,下面的Arduino固件也以英尺和米为单位显示海平面上方的高度。

o4YBAF3XGgaAWzueAAJhAwdLoEc765.jpg

平均海平面压力数据

这是此项目的完整Arduino代码。我建议使用下面的下载文件,而不是从此处复制和粘贴代码,这有时无法正常工作。

#include

#include

#include

#include

#include // Define pins for ILI9163 SPI display

#define __CS 10

#define __DC 9 // Labeled as A0 in some modules

#define __RST 8

// Connect SDA to Arduino pin 11 (MOSI), and SCK to 13 (SCK) // Color definitions

#define BLACK 0x0000

#define BLUE 0x001F

#define RED 0xF800

#define GREEN 0x07E0

#define CYAN 0x07FF

#define MAGENTA 0xF81F

#define YELLOW 0xFFE0

#define WHITE 0xFFFF

#define TRANSPARENT -1

TFT_ILI9163C display = TFT_ILI9163C(__CS, __DC, __RST); // Store an instance of the BMP180 sensor.

BMP180 barometer;

// Store the current sea level pressure at your location in Pascals.

float seaLevelPressure = 102770; // Williamsburg, VA on Dec 31, 2014, 14:54 Eastern Time void setup()

{

display.begin();

display.setBitrate(24000000);

display.setRotation(2);

display.clearScreen();

// We start the serial library to output our messages.

Serial.begin(9600);

// We start the I2C on the Arduino for communication with the BMP180 sensor.

Wire.begin();

// We create an instance of our BMP180 sensor.

barometer = BMP180();

// We check to see if we can connect to the sensor.

if(barometer.EnsureConnected())

{

Serial.println(“Connected to BMP180.”); // Output we are connected to the computer.

// When we have connected, we reset the device to ensure a clean start.

barometer.SoftReset();

// Now we initialize the sensor and pull the calibration data.

barometer.Initialize();

}

else

{

Serial.println(“No sensor found.”);

}

} void loop()

{

if(barometer.IsConnected)

{

// Retrive the current pressure in Pascals.

long currentPressureP = barometer.GetPressure();

float currentPressuremb = currentPressureP/100.0;

float currentPressureinHg = currentPressuremb*0.02953;

// Print out the Pressure.

Serial.print(“Pressure: ”);

Serial.print(currentPressureP);

Serial.println(“ Pa”);

Serial.print(“Pressure: ”);

Serial.print(currentPressuremb);

Serial.println(“ mbar”);

Serial.print(“Pressure: ”);

Serial.print(currentPressureinHg);

Serial.println(“ inHg”);

// Retrive the current altitude (in meters)。 Current Sea Level Pressure is required for this.

float altitudem = barometer.GetAltitude(seaLevelPressure);

float altitudeft = altitudem*3.2808;

// Print out the Altitude.

Serial.print(“ Altitude: ”);

Serial.print(altitudem);

Serial.print(“ m”);

Serial.print(“ Altitude: ”);

Serial.print(altitudeft);

Serial.print(“ ft”);

// Retrive the current temperature in degrees celcius.

float currentTemperatureC = barometer.GetTemperature();

float currentTemperatureF = (9.0/5.0)*currentTemperatureC+32.0;

// Print out the Temperature

Serial.print(“ Temperature: ”);

Serial.print(currentTemperatureC);

Serial.write(176);

Serial.print(“C”);

Serial.print(currentTemperatureF);

Serial.write(176);

Serial.print(“F”);

Serial.println(); // Start a new line.

// Now display results on LCD

display.fillScreen();

display.setCursor(0, 0);

display.setTextColor(WHITE);

display.setTextSize(1);

display.print(“BMP180 Sensor Demo”);

// Display temperature in F

display.setCursor(0, 16);

display.setTextColor(YELLOW);

display.setTextSize(2);

display.print(“T=”);

display.print(currentTemperatureF);

display.setTextSize(1);

display.print(“ o”);

display.setTextSize(2);

display.print(“F”);

// Display temperature in C

display.setCursor(24, 32);

display.print(currentTemperatureC);

display.setTextSize(1);

display.print(“ o”);

display.setTextSize(2);

display.print(“C”);

//Now display pressure in mbar

display.setCursor(0, 48);

display.setTextColor(CYAN);

display.setTextSize(2);

display.print(“P=”);

display.print(currentPressuremb,1);

display.print(“mb”);

// Display pressure in inHg

display.setCursor(24, 64);

display.setTextColor(CYAN);

display.print(currentPressureinHg,1);

display.print(“inHg”);

//Now display pressure in mbar

display.setCursor(0, 80);

display.setTextColor(WHITE);

display.setTextSize(2);

display.print(“H=”);

display.print(altitudeft,1);

display.print(“ft”);

// Display pressure in inHg

display.setCursor(24, 96);

display.setTextColor(WHITE);

display.print(altitudem,1);

display.print(“m”);

delay(5000); // Show new results every second.

}

}

在此处下载Arduino草图

输出

所示的传感器高度大约是海拔88英尺,与此处发布的城市数据相比是正确的:http://en.wikipedia.org/wiki/威廉斯堡,_弗吉尼亚州

pIYBAF3XGlyAES5FAAGcSH2TtSo242.jpg

二楼测量值

传感器对高度非常敏感。通过将传感器放在我一楼的餐桌上进行以下测量。高度降低了约8英尺,这似乎是合理的。

pIYBAF3XGmmAHQZDAAIEmsjOcss210.jpg

一楼的测量
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2548

    文章

    50689

    浏览量

    752027
  • bmp180
    +关注

    关注

    2

    文章

    7

    浏览量

    11515
收藏 人收藏

    评论

    相关推荐

    外界温度压力变送器的影响

    1. 压力变送器的工作原理 压力变送器通常基于压电效应、应变效应或电容效应来测量压力。它们将机械压力转换为电信号,这些信号随后可以被进一步处
    的头像 发表于 11-04 11:20 277次阅读

    非接触温度传感器如何测量内部温度

    探测器、光学系统、信号处理电路和显示装置等部分组成。红外探测器用于接收物体表面发射的红外辐射;光学系统用于聚焦红外辐射,提高测量精度;信号处理电路用于将接收到的红外辐射信号转换为电信号,并进行温度
    的头像 发表于 10-23 15:52 203次阅读

    使用一种高度集成的ToF位置传感器进行精确的距离测量

    电子发烧友网站提供《使用一种高度集成的ToF位置传感器进行精确的距离测量.pdf》资料免费下载
    发表于 09-21 10:14 0次下载
    使用一种<b class='flag-5'>高度</b>集成的ToF位置传感器<b class='flag-5'>进行</b>精确的距离<b class='flag-5'>测量</b>

    应变测量温度补偿的基本原理

    对应变测量结果的影响是一个不可忽视的因素。因此,进行应变测量时,温度补偿是必要的。 一、温度对应变测量
    的头像 发表于 08-27 16:26 724次阅读

    测量温度的常见测量原理是什么

    温度测量是科学研究和工业生产中非常重要的一个环节,它涉及到各种物理量和化学性质的测量。在不同的领域和应用场景中,人们采用了多种不同的温度测量
    的头像 发表于 08-27 16:23 370次阅读

    立仪光谱共焦传感器行业应用 透明胶水高度测量

    01|检测需求:透明胶水高度测量 光谱共焦传感器行业应用|透明胶水高度测量 02|检测方式 根据客户要求及观察我们使用立仪科技D40A26XL镜头搭配E系列控制器
    的头像 发表于 08-15 17:06 232次阅读
    立仪光谱共焦传感器行业应用 透明胶水<b class='flag-5'>高度</b><b class='flag-5'>测量</b>

    【核桃派ZeroW开发板体验连载】小小气象站 03 aht10、bmp280测试

    %%\" % sensor.relative_humidity) time.sleep(2) 最后点击运行,发现终端打印出了温度和湿度: BMP2880测试 接线和AHT10一样的,安装下库
    发表于 08-10 10:04

    使用RX23E-A对外部电阻式传感器PT100进行温度测量

    RX23E-A系列微控制器配备模拟前端,无需校准即可测量温度压力、流量和重量,精度优于0.1%,是高精度传感、测试和测量设备的理想之选。
    的头像 发表于 05-23 14:18 1430次阅读
    使用RX23E-A对外部电阻式传感器PT100<b class='flag-5'>进行</b><b class='flag-5'>温度</b><b class='flag-5'>测量</b>

    求助,关于STM8L101和BMP180传感器通信的疑问求解

    STM8L101和BMP180传感器通信,我加上一段滤波算法之后,用热风吹传感器,返回数据异常,去掉之后吹就无异常,不管滤波处理还是不处理180的数据,结果都是一样,180的原始数据跳动大概
    发表于 05-14 07:26

    热电偶是如何实现温度测量

    热电偶是一种基于塞贝克效应的温度测量设备,能够将温度转换为电信号,从而进行温度测量
    的头像 发表于 05-08 15:36 2105次阅读

    压力变送器如何进行调校呢?

    压力变送器如何进行调校呢? 压力变送器是一种用于测量和传输压力信号的设备,广泛应用于工业控制系统中。调校
    的头像 发表于 02-04 15:27 4901次阅读

    【开源项目】Arduino ESP32 彩色电子气象站

    BMP180 传感器 BMP180 是一款低成本、低功耗的数字气压传感器,可通过 I2C 与 Arduino 通信。它通常用于测量大气压力温度和海拔
    发表于 01-16 14:01

    在调试BMP180测量海拔高度 出来的温度值是对的,但是气压数据为1026.08hp,换算一下不是变成负海拔了!!!

    附件:*附件:BMP180.rar 1.量测温度是正常的,应该不是通讯有问题。 2.但是气压数据看起来是不对的,1025hp,不是低于海平面啦!!! 有没有大神可以提示,感谢!
    发表于 12-19 15:57

    bmp280气压传感器模块例程

    BMP280 气压传感器是一种高精度的数字气压传感器,可以用于测量大气压力温度高度。它具有低功耗、高线性度和高分辨率的特点,适用于各种应用场景,如天气站、室内气压监测、气象预报和
    的头像 发表于 12-18 13:51 2210次阅读

    扩散硅压力变送器的工作原理

    测量和电流输出这两部分分别进行温度修正。温度修正方法有温度特性公式法、线性插值法等,为了保证有更好的测量
    的头像 发表于 12-01 09:37 785次阅读