bmp180的简介:

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

• 电源电压:.8V~.6V(VDDA), .62V~.6V(VDDD)

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

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

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

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

• 含温度输出

• I2C 接口

• 温度补偿

• MSL  反应时间:.5ms

• 待机电流:.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

代码:

 #include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 pressure;
double baseline; // baseline pressure void setup()
{
Serial.begin();
Serial.print("重启中");
Serial.print(",正在获取最新校准值");
if (pressure.begin())
{
int i;
for(i=;i<;i++){
Serial.print(".");
delay();}
Serial.println();
Serial.println("BMP180传感器初始化成功");
}
else
{
Serial.println("BMP180传感器初始化失败 (请检查连接是否正确)\n\n");
while();
}
baseline = getPressure();
Serial.print("海平面气压: ");
Serial.print(baseline);
Serial.println(" 百帕");
} void loop()
{
double a,P,T,status;
P = getPressure();
a = pressure.altitude(P,baseline);
Serial.print("实时气压: ");
Serial.print(P,);
Serial.print(" 百帕, ");
Serial.print("相对高度: ");
if (a >= 0.0) Serial.print(" "); // add a space for positive numbers
Serial.print(a,);
Serial.print(" 米, ");
status = pressure.startTemperature();
if(status!=)
{
delay(status);
status = pressure.getTemperature(T); Serial.print("温度: ");
Serial.print(T,);
Serial.println(" 摄氏度");
}
delay();
} double getPressure()
{
char status;
double T,P,p0,a;
status = pressure.startTemperature();
if (status != )
{
delay(status);
status = pressure.getTemperature(T);
if (status != )
{
status = pressure.startPressure();
if (status != )
{
for a number of pressure measurements.)
status = pressure.getPressure(P,T);
if (status != )
{
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");
}

工作原理:

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

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

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

4、输出打印。


总结:

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

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

基于arduino的气象站的更多相关文章

  1. 初探物联网 - 基于Arduino的气象站和View and Data API的结合实例

    如果你参加了上个月在北京的Autodesk 开发者日,你应该看到了我做的关于Arduino的物联网实例演示,如果你没看到,欢迎参加14号在上海的开发者日,到时候我会再演(xian)示(bai)一下. ...

  2. 基于 Arduino 开发板,这款插座是可编程且开源的

    基于 Arduino 开发板,这款插座是可编程且开源的 https://www.oschina.net/news/74861/open-source-socket https://github.com ...

  3. 基于Arduino开发的智能蓝牙小车

    基于Arduino的智能蓝牙小车 材料准备: Arduino开发板一块.四驱小车底板及相关配件一套.L298N驱动模块一个.HC-05/06蓝牙模块一块,九伏电源一块(用于主板供电).12V锂电池一块 ...

  4. 基于arduino的红外传感系统

    一.作品背景 在这个科技飞速发展的时代,物联网已经成为了我们身边必不可少的技术模块,我这次课程设计做的是一个基于arduino+树莓派+OneNet的红外报警系统,它主要通过识别人或者动物的运动来判断 ...

  5. 基于Arduino、STM32进行红外遥控信号接收

    catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...

  6. 基于 Arduino 的 RFID 识别实验

    http://www.it165.net/embed/html/201512/3287.html 2015年12月04日(周五) 上午  博士的智能卡实验--RFID识别实验,基于51单片机: 我们的 ...

  7. 基于Arduino的按键控制LED实验

    I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功 ...

  8. 基于 arduino 的低功耗无线传感结点设计

    发送端 仿真图: *仿真图中使用使用TMP传感器(LM34)代替实际使用的DHT11传感器. 连接方式: DHT11的正极(VCC)与5V电源接口连接 DHT11的负极(GND)与GND连接 DHT1 ...

  9. 进阶之路(中级篇) - 018 基于arduino的简易版智能衣架

    一.    设备及要求 目的:制作一个可以自动根据事实的天气的状况进行对衣架上的衣服进行晾晒. 基础装置:可伸缩的晾衣架. 开发环境:Arduino1. 8.1 主控板:Arduino UNO 动力装 ...

随机推荐

  1. JVM: JVM 内存划分

    概述 如果在大学里学过或者在工作中使用过 C 或者 C++ 的读者一定会发现这两门语言的内存管理机制与 Java 的不同.在使用 C 或者 C++ 编程时,程序员需要手动的去管理和维护内存,就是说需要 ...

  2. laravel 队列服务使用总结

    laravel 队列服务使用总结 使用步骤 配置队列驱动 //env文件,有的版本是QUEUE_DRIVER QUEUE_CONNECTION=database 迁移队列需要的数据表,在数据库中生成j ...

  3. springIOC源码接口分析(四):MessageSource

    一 定义方法 MessageSource接口用于支持信息的国际化和包含参数的信息的替换 这个接口定义了三个方法: public interface MessageSource { /** * 解析co ...

  4. Vue系列教程(一)基础介绍

    什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也可以进行手机App的开发,需要借助Weex) V ...

  5. Unreal Engine 4 蓝图完全学习教程(三)—— 节点的基本知识

    Ⅰ.节点的种类 ①标题:在节点的上方显示着节点的标题,标题部分会根据节点类型显示不同的颜色. ②输入:用于从其他节点接收数据以获取必要的数值. ③输出:将这个节点计算出结果用于传递数值到其他节点. ( ...

  6. ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的po ...

  7. (三)maven创建部署javaweb

    http://how2j.cn/k/idea/idea-maven-web/1356.html#nowhere 这个网站讲的很详细了,下载很慢的话按照他的提示配置阿里云即可,很快 另外可能会出现各种j ...

  8. C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id

    紧接上一篇,将List<Menu>的扁平结构数据, 转换成树形结构的数据 返回给前端   ,   废话不多说,开撸! --------------------- 步骤: 1. 建 Menu ...

  9. Ubuntu18 永久设置分辨率1920x1080

    起因 虚拟机(virtualBox)中设置 1920*1080 的分辨率后, 每次重启后都会回到默认,永久设置的方式如下 步骤: 添加系统设置 sudo xrandr --newmode " ...

  10. PYTHON 学习笔记1 PYTHON 入门 搭建环境与基本类型

    简介 Python,当然大家听到这个名词不再是有关于像JAVA 一样的关于后台,我们学习Python 的目的在于对于以后数据分析和机器学习AI 奠定基础,Python 在数据分析这一块,可谓是有较好的 ...