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

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

    关注

    2573

    文章

    54363

    浏览量

    785868
  • bmp180
    +关注

    关注

    2

    文章

    7

    浏览量

    11736
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HPSD3900:差压与绝压双测量,赋能高精度航空压力传感

    在航空领域,压力测量是飞行控制与安全的关键技术之一。飞机空速管(又称皮托管)作为最早且广泛使用的压力式流速传感装置,通过捕捉气流的动压与静压,结合膜盒机械结构实现空速、高度与升降速度的
    的头像 发表于 08-26 12:04 390次阅读
    HPSD3900:差压与绝压双<b class='flag-5'>测量</b>,赋能高精度航空<b class='flag-5'>压力</b>传感

    触针式轮廓仪 | 台阶仪 | 纳米级多台阶高度的精准测量

    台阶高度作为纳米结构的关键参数,其测量精度直接影响相关研究与应用。本文利用触针式轮廓仪对三台阶高度样品进行测量与表征的方法。原始
    的头像 发表于 07-22 09:52 479次阅读
    触针式轮廓仪 | 台阶仪 | 纳米级多台阶<b class='flag-5'>高度</b>的精准<b class='flag-5'>测量</b>

    零知开源——STM32F4结合BMP581气压传感器实现ST7789中文显示教程

    581传感器数据采集。通过U8g2库实现高质量中文渲染,混合Adafruit_GFX进行高效数据显示,实时展示温度压力高度数据。教程详细介绍了硬件连接方案(I2C/SPI接口)、软
    的头像 发表于 07-09 09:21 1237次阅读
    零知开源——STM32F4结合<b class='flag-5'>BMP</b>581气压传感器实现ST7789中文显示教程

    SDP810传感器信号补偿专题之高度修正(二)

    大气压随海拔升高而降低。SDP传感器校准条件为海拔425米高度、大气压966毫巴。该传感器基于微热测量原理,使其成为本质质量流量传感器。因此使用SDP进行质量流量测量时无需
    的头像 发表于 05-19 13:26 446次阅读
    SDP810传感器信号补偿专题之<b class='flag-5'>高度</b>修正(二)

    唯一国产MEMS电容式气压计芯片

    厘米。该传感器模块包括高线性压力传感器和超低功率24位,内部具有校准系数。它提供了一个精确的24 位数字压力温度值。一个高分辨率的温度输出允许实现一个
    发表于 03-11 10:11

    高精度气压计与海拔传感器HP203N的技术规格及应用:涵盖压力温度测量与I²C接口

    ×1.15毫米),具有高速度数字IIC接口。该产品不仅实现了精确的压力测量(最小分辨率可达0.01mbar)、温度检测(分辨率达0.01℃)及海拔高度计算(解析度低至
    发表于 03-03 10:11 2次下载

    薄膜压力分布测量系统鞋垫式足底压力分布测试

    引言: 鞋垫式足底压力分布测试系统是一种基于传感器技术的高科技设备,通过嵌入鞋垫中的压力传感器,实时采集足底各个部位的压力数据,并将数据传输到分析软件中进行处理和可视化。该系统能够精确
    的头像 发表于 02-24 16:24 844次阅读
    薄膜<b class='flag-5'>压力</b>分布<b class='flag-5'>测量</b>系统鞋垫式足底<b class='flag-5'>压力</b>分布测试

    MS4525DO-SS3AS015AS传感器:精准气压高度测量的科技利器

    MS4525DO-SS3AS015AS传感器能够同时输出压力温度两项指标,且内置了温度补偿机制,有效降低了温度变化对测量精度的影响,确保了
    的头像 发表于 02-21 14:18 619次阅读
    MS4525DO-SS3AS015AS传感器:精准气压<b class='flag-5'>高度</b><b class='flag-5'>测量</b>的科技利器

    午芯芯科技国产电容式MEMS压力传感器芯片突破卡脖子技术

    传感器和超低功耗 24 位 ADC,内部具有校准系数。它提供了一个精确的 24 位数字压力温度值。一个高分辨率的温度输出允许实现一个高度计/温度
    发表于 02-19 12:19

    薄膜式压力分布测量系统

    压力映射技术为各个行业带来突破,该系统利用高精度阵列式传感器实时捕捉被测物体的压力变化并以直观图形化界面呈现,帮助工程师了解压力分布数据并进行优化设计。 福普生
    的头像 发表于 02-10 15:26 973次阅读
    薄膜式<b class='flag-5'>压力</b>分布<b class='flag-5'>测量</b>系统

    温度探头的测量范围选择

    温度是工业过程中一个关键的参数,它直接影响到产品质量、生产效率和安全性。温度探头作为测量温度的工具,其测量范围的选择直接关系到
    的头像 发表于 01-20 09:54 1436次阅读

    水管行业生产制造配备的测量仪:测径仪、壁厚仪、压力仪…

    ,通过测量超声波在管壁中的传播时间来计算壁厚;磁性测厚仪主要用于铁磁性材料的水管,利用磁性原理测量壁厚。 4、压力测量仪 水压试验机:用于对水管进行
    发表于 01-10 14:25

    温度对电桥测量结果的影响

    温度对电桥测量结果的影响是显著的,主要体现在以下几个方面: 一、电阻值变化 电桥电路中的电阻值会随着温度的变化而变化。通常,电阻的阻值会随着温度的升高而增大,这种变化会导致电桥电路中的
    的头像 发表于 01-09 10:21 1905次阅读

    饱和蒸汽流量计测量时补偿方式的选择

    在饱和蒸汽流量测量中,补偿方式的选择是确保测量准确性的关键。由于饱和蒸汽的密度与温度压力之间存在固定的对应关系,因此可以通过温度补偿或
    的头像 发表于 12-29 09:38 769次阅读

    无线压力传感器的测量范围如何拓展?

    无线压力传感器的测量范围如何拓展?
    的头像 发表于 12-14 10:12 810次阅读