LabVIEW Arduino ZigBee 无线气象站(项目篇—3)
1、项目概述
目前,国内气象站对地面气象数据的采集大多采用传统的有线方式,其布线成本高,维护不方便,尤其对于山区等一些复杂的地形来说,这种缺点更为明显。传统的无线通信方式有很多,无线电、微波、红外线、蓝牙、射频等,在某些只需简单的无线连接的应用领域对数据速率的要求并不很高,设备的功耗是更需要考虑的问题。ZigBee 网络是低功耗、低成本、高可靠性的无线传感器网络,其在环境检测等领域中有着广阔的应用前景。
2、项目架构
本篇博文将要介绍一种基于 Arduino、LabVIEW 和 ZigBee 的个人小型无线自动气象站,可以实现自主采集温度、湿度、气压、粉尘浓度,并且将数据实时上传至 LabVIEW 上位机软件。气象站终端设备采用 Arduino 作为控制核心,上位机软件采用 LabVIEW,两者通过基于 ZigBee 技术的 XBee 模块实现无线通信。
个人小型气象站的总体框图如下图所示:
资源下载请参见:LabVIEWArduinoZigBee无线气象站【实战项目】-单片机文档类资源
3、传感器选型
3.1、温湿度传感器
SHT11 是瑞士 Sensirion 公司推出的一款数字温湿度传感器芯片,将传感元件和信号处理电路集成在一块微型电路板上,输出完全标定的数字信号,采用 CMOSens 专利技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器芯片内部包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件,并在同一芯片上与 14 位的 A/D 转换器以及串行接口电路实现无缝连接。因此,具有品质卓越、响应迅速、抗干扰能力强、性价比高等优点,广泛应用于暖通空调、汽车、消费电子、自动控制等领域。
每个传感器芯片都在极为精确的湿度腔室中进行标定,校准系数以程序形式储存在 OTP 内存中,用于内部的信号校准。两线制的串行接口与内部的电压调整,使外围系统集成变得快速而简单。微小的体积、极低的功耗,使 SHT11 成为各类应用的首选。
拓展学习:
LabVIEW控制Arduino采集热电偶温度数值(进阶篇—2)_不脱发的程序猿的博客LabVIEW控制Arduino采集多路DS18B20温度数值(进阶篇—3)_不脱发的程序猿的博客LabVIEW控制Arduino采集DHT11温湿度数值(进阶篇—4)_不脱发的程序猿的博客
3.2、压力传感器
气压是指作用在单位面积上的大气压力,它等于单位面积上到大气上界的垂直空气柱的重量,大气压力测量的基本单位是帕斯卡(Pa,即牛顿每平方米)。此处采用 BMP085 气压传感器实现气压的测量。
BMP085 是一款高精度、超低能耗的压力传感器,可以应用在移动设备中。它的性能卓越,绝对精度最低可以达到 0.03hPa,并且耗电极低,只有 3uA。BMP085 采用强大的 8-pin 陶瓷无引线芯片承载(LCC)超薄封装,可以通过 I2C 总线直接与各种微处理器相连。而且,BMP085 利用温度补偿来提高气压的测量精度,反应时间 7.5ms,待机电流 0.1uA,无需外部时钟电路,无铅,符合 RoHS 规范。BMP085 气压传感器模块如下图所示:
3.3、空气质量传感器
粉尘是指悬浮在空气中的固体微粒。按照国际标准化组织规定,粒径小于 75um 的固体悬浮物定义为粉尘。大气中粉尘的存在是保持地球温度的主要原因之一,大气中过多或过少的粉尘将对环境产生灾难性的影响。但在生活和工作中,过多的粉尘是人类健康的天敌,是诱发多种疾病的主要原因。
随着经济的发展,环境污染越发严重,随着生活水平的提高,人们的健康意识也越来越强,在小型气象站中增加粉尘传感器,用于监测空气中的粉尘等可吸入固体颗粒。
GP2Y1010AU0F 是夏普公司的光学空气质量传感器,可以测量空气中尘埃的含量。该装置中包含一个红外发光二极管和光电晶体管,且呈对角布置,允许其检测的反射光在空气中的灰尘,可以非常有效地检测比较微小的颗粒,如香烟烟雾,并且是常用的空气净化器系统。GP2Y1010AU0F 实物图效果如下图所示:
4、硬件环境
将 SHT11 温湿度传感器的 VCC、GND、SCK、DATA 分别接至 Arduino Uno 控制板上的+5V、GND、模拟端口 A2 和 A3。
将 BMP085 气压传感器的 VCC、GND、SCL、SDA 分别接至 Arduino Uno 控制板上的 3.3V、GND、SCL 和 SDA。若 Arduino Uno 控制板上没有标注的 SCL 和 SDA 端口,则将 BMP085 的 SCL 和 SDA 分别接至模拟端口 A5 和 A4 上。
GP2Y1010AU0F 粉尘传感器 VLED 串联 150Ω电阻接至 Arduino Uno 控制板上的+5V,LED-GND 接至 GND,LED 接至数字引脚 D2,S-GND 接至 GND,Vo 接至模拟输入 A0,Vcc 接至 5V。
Arduino Uno 控制器与 XBee 模块、BMP085 和 SHT11 的硬件连接,如下图所示:
5、Arduino 功能设计
在基于 Arduino 与 LabVIEW 的个人小型气象站中,Arduino Uno 控制器需要完成两个功能:接收和判断命令,采集和传输温湿度、气压、粉尘浓度的数据,Arduino Uno 控制器通过 XBee 模块接收上位机发来的命令,分析得到有效命令,读取温湿度、气压、粉尘浓度等数据,并上传给 LabVIEW 软件。
个人气象站 Arduino 控制器程序代码如下所示:
6、LabVIEW 功能设计
LabVIEW 上位机部分需要完成以下功能:
1、向下位机 Arduino 控制器发送温度、湿度、气压数据的采集命令,Arduino 控制器通过串口接收上位机命令,完成相应的数据采集之后并将采集的数据回传,LabVIEW 软件将回传的数据显示在前面板上。
2、向下位机 Arduino 控制器发送粉尘浓度的采集命令,Arduino 控制器通过串口接收上位机命令,完成粉尘浓度的电压采集之后并将采集的电压数据转换为粉尘浓度,LabVIEW 软件接收 Arduino 返回的粉尘浓度并显示在前面板上,同时将粉尘浓度的变化显示在波形图上。
6.1、前面板设计
LabVIEW 前面板分为仪表盘显示和波形图显示两个部分,仪表盘部分用于显示当前的数据,包括温度、湿度、气压和粉尘浓度;波形图显示部分用于显示粉尘浓度的变化趋势。基于 Arduino 与 LabVIEW 的个人小型气象站的 LabVIEW 上位机前面板,如下图所示:
6.2、程序框图设计
在 LabVIEW 上位机的程序设计中,温度、湿度、气压和粉尘浓度的采集需要向 Arduino Uno 控制器发送不同的命令码,并获取 Arduino Uno 控制器返回的测量数据,为了使得程序结构更加清晰明朗,此处将温度、湿度、气压和粉尘浓度采集分别编写成子 VI。
温度采集子程序的前面板和程序框图,如下图所示:
湿度采集子程序的前面板和程序框图,如下图所示:
气压采集子程序的前面板和程序框图,如下图所示:
粉尘浓度采集子程序的前面板和程序框图,如下图所示:
采用条件结构+移位寄存器的状态机来实现 LabVIEW 上位机主程序,将主程序划分为 5 个状态:0 状态为串口初始化,1 状态为温度测量,2 状态为湿度测量,3 状态为气压测量,4 状态为粉尘浓度测量,且初始状态为 0 状态(串口初始化)。
在 0 状态中,通过设置的串口号来初始化串口通信。在 1 状态中,读取温度数据并显示,在 2 状态中,读取湿度数据并显示,在 3 状态中,读取气压数据并显示,在 4 状态中,读取粉尘浓度数据并显示在波形图上。最后,关闭串口通信。
串口初始化程序框图如下所示:
温度采集程序框图如下所示:
湿度采集程序框图如下所示:
气压采集程序框图如下所示:
粉尘浓度采集程序框图如下所示:
本节介绍的基于 ZigBee 的个人小型气象站可以通过无线方式实现温湿度、气压和粉尘浓度的测量,如需要增加其他的测量参数,则需要添加相应的传感器即可。
另外,利用 ZigBee 的组网技术,在一定的区域内布置多个测量站点,可以实现区域性的气象参数的测量。
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/460b840523127e503d7007b51】。文章转载请联系作者。
评论