|
在飞行机器人、气象站、改善路线性能、运动等众多项目中,测量压力和高度非常重要。在本篇文章中,您将学习如何使用BMP180传感器,这是最常用的压力测量传感器之一。
什么是气压? 气压或大气压力来自地球上空气的重量。该压力在海平面约为每平方厘米1千克。
有几个单位表示大气压力,可以很容易地相互转换。用于测量压力的单位是帕斯卡(Pa)。 单位 | 1hPa当量 | 帕斯卡(Pa) | 100 | 大气压(atm) | 0.000986923 | Milibar(MBR) | 1 | 毫米汞柱(mmHg) | 0.750063755 | 英寸汞柱(inHg) | 0.02953 | Torr(托) | 0.750061683 | 磅/平方英寸(psi) | 0.014503774 | 牛顿每平方米(N /平方公尺) | 100 |
气压与海平面的高度具有近似线性的反比,因此如果我们测量地点的气压,我们可以使用简单的数学运算从海平面计算海拔高度。
GY-68 BOSCH BMP180压力传感器特点 BOSCH BMP180是测量压力和海拔高度最常用的传感器之一。该模块最重要的功能如下: ● 压力测量范围为300至1100hPa ● -0.1hPa绝对压力的测量精度 ● 12hPa相对压力的测量精度 ● 低功耗(标准模式下为5μA,每秒一次采样) ● 内部温度传感器,精度为0.5°C ● 支持I2C协议进行通信 ● 完全校准
所需的材料 ● Arduino UNO R3开发板 ● BOSH BMP180模块 ● 跳线 ● Arduino IDE
如何在Arduino中使用GY-68 BMP180压力传感器? ● 该传感器可作为模块使用,方便使用。 BMP180传感器模块的主要部件是: ● BMP180传感器 ● 3.3伏稳压器。此稳压器允许您将模块连接到5V。 ● 需要上拉电阻才能正确通信I2C
电路链接
下载BMP180_Breakout_Arduino_Library以使用BMP180传感器模块:BMP180_Breakout_Arduino_Library。
计算不同单位的绝对压力和基于海平面的海拔高度 - */
- BMP180
- modified on 23 Apr 2019
- by Saeed Hosseini @ Electropeak
- https://electropeak.com/learn
- */
- #include <SFE_BMP180.h>
- #include <Wire.h?
- SFE_BMP180 pressure;
- #define ALTITUDE 943.7 // Altitude of Electropeak Co. in meters
- void setup() {
- Serial.begin(9600);
- if (pressure.begin())
- Serial.println("BMP180 init success");
- else
- {
- Serial.println("BMP180 init fail\n\n");
- Serial.println("Check connection");
- while (1);
- }
- }
- void loop() {
- char status;
- double T, P, p0, a;
- status = pressure.startTemperature();
- if (status != 0)
- {
- delay(status);
- status = pressure.getTemperature(T);
- if (status != 0)
- {
- Serial.print("temperature: ");
- Serial.print(T, 2);
- Serial.println(" deg C ");
- 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(" hpa = ");
- Serial.print(P * 100, 2);
- Serial.print(" pa = ");
- Serial.print(P * 0.000986923, 2);
- Serial.print(" atm = ");
- Serial.print(P * 0.750063755, 2);
- Serial.print(" mmHg = ");
- Serial.print(P * 0.750061683, 2);
- Serial.print(" torr = ");
- Serial.print(P * 0.014503774, 2);
- Serial.println(" psi");
- p0 = pressure.sealevel(P, ALTITUDE); // we're at 943.7 meters
- Serial.print("relative (sea-level) pressure: ");
- Serial.print(p0, 2);
- Serial.println(" hpa ");;
- a = pressure.altitude(P, p0);
- Serial.print("your altitude: ");
- Serial.print(a, 0);
- Serial.println(" meters ");
- }
- 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");
- Serial.println("==========================================================================");
- delay(5000);
- }
复制代码
让我们更准确地查看压力和高度计算的过程:
根据上述算法,首先我们使用startTemperature()开始计算温度,然后使用getTemperature(T)将温度存储在变量T中。之后,我们用startPressure(3)计算压力。数字3是可以在0和3之间变化的最大分辨率。使用getPressure(P)我们将绝对压力存储在变量P中。此压力的量以hPa为单位,可以根据之前的表格转换为不同的单位。绝对压力随高度而变化。为了消除高度对计算压力的影响,我们应该根据存储在ALTITUDE变量中的高度使用sealevel(P,ALTITUDE)函数,并将测量值存储在任意变量中,例如p0。 使用altitude(P,p0)计算您的高度。此函数计算仪表的高度。
制作一个高度计! 与许多其他压力传感器一样,BMP180压力传感器测量绝对压力,绝对压力随高度的变化而变化。因此,您可以通过测量压力来计算相对高度。 - /*
- BMP180 - altimeter
- modified on 23 Apr 2019
- by Saeed Hosseini @ Electropeak
- https://electropeak.com/learn
- */
- #include <SFE_BMP180.h>
- #include <Wire.h>
- SFE_BMP180 pressure;
- double baseline;
- void setup()
- {
- Serial.begin(9600);
- Serial.println("REBOOT");
- if (pressure.begin())
- Serial.println("BMP180 init success");
- else
- {
- Serial.println("BMP180 init fail (disconnected?)\n\n");
- while (1);
- }
- baseline = readPressure();
- Serial.print("baseline pressure: ");
- Serial.print(baseline);
- Serial.println(" hpa");
- }
- void loop()
- {
- double a, P;
- P = readPressure();
- a = pressure.altitude(P, baseline);
- Serial.print("relative altitude: ");
- if (a >= 0.0) Serial.print(" ");
- Serial.print(a, 1);
- Serial.println(" meters, ");
- delay(500);
- }
- double readPressure()
- {
- char status;
- double T, P, p0, a;
- status = pressure.startTemperature();
- if (status != 0)
- {
- delay(status);
- status = pressure.getTemperature(T);
- if (status != 0)
- {
- status = pressure.startPressure(3);
- if (status != 0)
- {
- delay(status);
- status = pressure.getPressure(P, T);
- if (status != 0)
- {
- return (P);
- }
- 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");
- }
复制代码startPressure(3)函数计算绝对压力值。 由于压力随温度和湿度的变化而变化,我们将初始压力存储在变量baseline中。 根据该值和瞬时压力,altitude(P,baseline)函数计算以米为单位的相对高度。
|