基于arduino的气象站

bmp180的简介:

• 压力范围:300~1100hPa(海拔 9000 米~-500 米)

• 电源电压:1.8V~3.6V(VDDA), 1.62V~3.6V(VDDD)

• 尺寸:3.6mmx3.8x0.93mm

• 低功耗:5μA,在标准模式

• 高精度:低功耗模式下,分辨率为 0.06hPa(0.5 米)

• 高线性模式下,分辨率为 0.03hPa(0.25 米)

• 含温度输出

• I2C 接口

• 温度补偿

• MSL 1 反应时间:7.5ms

• 待机电流:0.1μA

可以同时获得所处环境的温度和气压,甚至还可以通过气压、温度间接求出海拔,此换算过程较为复杂,可自行百度,在此给出数值较为粗糙的公式:(p0指的是标准海平面大气压,并不是此时此地的海拔为0m的大气压,p0=101.325kpa)

                                                 

凭个人观点,相比于温湿度传感器dht11,实现的功能可能会更多一些,但不知道,两者哪个精度会高一点。dht11是数字信号输入,bmp系列是模拟信号输入,但是我发现利用公式测算的海拔高度altitude时钟为负值,不知道这是什么情况,暂时且用fabs函数套上,转换为绝对值。

年前tb了一个bmp180的传感器,想用arduino获得实现的可能。当然bmp085也可以,我才用的库就是bmp085的库,当时网络上找不到bmp180的库,甚至动用了某工具。还有,最近在国内似乎连不上arduino的库管理器,于是我从GitHub那获得了库文件,链接在此:https://github.com/drophair/BMP180-BMP085(这个库比较早,而且bmp085已经停产了,其中计算海拔的方法粗在错误)https://github.com/drophair/bmp180(这个是专门用于bmp180的,不妨两个都试一下,而且不用自己去推算海拔,有自己封装的函数,直接就可以用了)

注意,利用以上公式求的是绝对海拔,误差较大;相比之下,可以计算相对海拔,其计算原理下文详细介绍。

接线方式:
arduino bmp180
---------------------- VIN VCC GND GND SCL A5 SDA A4

 代码:

 1 #include <SFE_BMP180.h>
 2 #include <Wire.h>
 3 SFE_BMP180 pressure;
 4 double baseline; // baseline pressure
 5 
 6 void setup()
 7 {
 8   Serial.begin(9600);
 9   Serial.print("重启中");
10   Serial.print(",正在获取最新校准值");
11   if (pressure.begin())
12   {
13     int i;
14     for(i=0;i<3;i++){
15     Serial.print(".");
16     delay(1000);}
17     Serial.println();
18     Serial.println("BMP180传感器初始化成功");
19   }
20   else
21   {
22     Serial.println("BMP180传感器初始化失败  (请检查连接是否正确)\n\n");
23     while(1); 
24   }
25   baseline = getPressure();
26   Serial.print("海平面气压: ");
27   Serial.print(baseline);
28   Serial.println(" 百帕");  
29 }
30 
31 void loop()
32 {
33   double a,P,T,status;
34   P = getPressure();
35   a = pressure.altitude(P,baseline);
36   Serial.print("实时气压: ");
37   Serial.print(P,2);
38   Serial.print(" 百帕, ");
39   Serial.print("相对高度: ");
40   if (a >= 0.0) Serial.print(" "); // add a space for positive numbers
41   Serial.print(a,2);
42   Serial.print(" 米, ");
43   status = pressure.startTemperature();
44   if(status!=0)
45   {
46     delay(status);
47     status = pressure.getTemperature(T);
48   
49   Serial.print("温度: ");
50   Serial.print(T,2);
51   Serial.println(" 摄氏度");
52   }
53   delay(1000);
54 }
55  
56 double getPressure()
57 {
58   char status;
59   double T,P,p0,a;
60   status = pressure.startTemperature();
61   if (status != 0)
62   {
63     delay(status);
64     status = pressure.getTemperature(T);
65     if (status != 0)
66     {
67       status = pressure.startPressure(3);
68       if (status != 0)
69       {
70          for a number of pressure measurements.)
71                status = pressure.getPressure(P,T);
72         if (status != 0)
73         {
74           return(P);
75         }
76         else Serial.println("error retrieving pressure measurement\n");
77       }
78       else Serial.println("error starting pressure measurement\n");
79     }
80     else Serial.println("error retrieving temperature measurement\n");
81   }
82   else Serial.println("error starting temperature measurement\n");
83 }

工作原理:

1、首先传感器会进行一次重启,之后才会正常工作;

2、内部先进行10次大气压的测量,然后计算平均值,作为基准压强(baseline);

3、先测一次温度,然后再测大气压,若大气压的值较为稳定则利用内部的封装函数,直接求得(至于封装函数是怎么样的就不去深究了),若大气压不稳定就会一直等待稳定的时候,因此不管怎么设置delay,时间间隔都会有偏差;

4、输出打印。


 

 总结:

代码在example中就有只是将多个示例结合为一个整体代码。

目前只在arduino上进行搭建,未来还会继续增加温湿度传感器dht11;由于对软串口、串口通讯等方面的不了解,无法在esp8266上实现一旦时机成熟最终会整体移植到esp8266、树莓派上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Arduino,ESP8266和ThingSpeak的IoT无线气象站。 硬件部件 乐鑫Wemos D1 Mini× 1个 DHT11温湿度传感器(4针) × 1个 Seeed Grove-气压计传感器(BMP280)× 1个 软件应用程序和在线服务 ThingSpeak API Arduino IDE 全球变暖导致了不可预测的气候;世界各地的研究人员正在使用气象站来观察记录并分析天气模式,以研究气候变化并提供天气预报。这些气象站通常由很少的传感器来测量环境参数,以及监测或测井系统来分析这些参数。在本教程中,我们将学习如何构建基于无线物联网的气象站,该气象站可以测量关键的环境参数,例如温度,湿度和压力。同样,由于我们的气象站已启用IoT,因此我们可以将这些参数发送到ThingSpeak通道(IoT云),在这里我们可以远程存储,分析和访问数据。较早使用Raspberry Pi的气象站,这与该项目非常相似。 我们将使用Arduino开发板以及DHT11传感器,BMP180传感器和ESP8266 wifi模块。DHT11传感器感应温度和湿度,而BMP180传感器计算压力,ESP8266用于互联网连接。在我们之前的项目中,我们已经学会了使用DHT11传感器通过Arduino监视温度和湿度,在此项目中,我们将添加另一个传感器(BMP180)以使用Arduino制作一个完整的气象站。将这些数据发送到ThingSpeak可以在世界任何地方进行实时监视,我们还可以查看记录的数据,这些数据将存储在他们的网站上,甚至可以随着时间的流逝绘制图表进行分析。 电路原理图 基于Arduino的IoT Weather Station的完整电路如下所示。 DHT11传感器由Arduino的5V引脚供电,其数据引脚连接到引脚5,以进行一条线通信。BMP180传感器由Arduino的3.3V引脚供电,其数据引脚SCL(串行时钟)和SDA(串行数据)连接至Arduino的A4和A5引脚以进行I2C通信。 ESP8266模块还由Arduino的3.3V引脚供电,其Tx和Rx引脚连接到Arduino的数字引脚2和3进行串行通信。您可以使用下表作为建立连接的参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值