资讯详情

LabVIEW Arduino ZigBee无线气象站(项目篇—3)

1、项目概述

2、项目架构

3.传感器选型

3.1.温湿度传感器

力传感器-toc" style="margin-left:40px;">3.2.压力传感器

3.3.空气质量传感器

4、硬件环境

5、Arduino功能设计

6、LabVIEW功能设计

6.1.前面板设计

6.2.程序框图设计


1、项目概述

目前,国内气象站大多采用传统的地面气象数据地面气象数据,布线成本高,维护不方便,特别是对山区等复杂地形。传统的无线通信方式有很多,如无线电、微波、红外线、蓝牙、射频等。在一些只需要简单无线连接的应用领域,对数据速率的要求不是很高,需要考虑设备的功耗。ZigBee该网络是一种低功耗、低成本、高可靠性的无线传感器网络,在环境检测等领域具有广阔的应用前景。

2、项目架构

本博文将介绍一个基于Arduino、LabVIEW和ZigBee个人小型无线自动气象站可实现温度、湿度、气压、粉尘浓度的自主采集,并实时上传数据LabVIEW上位机软件。采用气象站终端设备Arduino上位机软件作为控制控制核心LabVIEW,基于两者ZigBee技术的XBee模块实现无线通信。

小型个人气象站的总体框图如下图所示:

资源下载请参见:LabVIEWArduinoZigBee无线气象站【实战项目】-单片机文档类资源

3.传感器选型

3.1、温湿度传感器

SHT11是瑞士Sensirion公司推出的数字温湿度传感器芯片将传感元件和信号处理电路集成在微电路板上,输出完全校准的数字信号CMOSens专利技术,保证产品具有极高的可靠性和卓越的长期稳定性。传感器芯片内部包括量间隙材料制成的电容聚合物湿度敏感元件和温度测量元件,并在同一芯片上与14位A/D实现转换器和串行接口电路的无缝连接。因此,广泛应用于暖通空调、汽车、消费电子、自动控制等领域。

每个传感器芯片都标记在非常精确的湿度腔内,校准系数以程序形式存储在OTP内存用于内部信号校准。两线系统的串行接口和内部电压调整使外围系统集成快速简单。体积小,功耗极低,使SHT成为各种应用的首选。

拓展学习:

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和SHT如下图所示:

5、Arduino功能设计

在基于Arduino与LabVIEW个人小气象站,Arduino Uno控制器需要完成两个功能:接收和判断命令,采集和传输温湿度、气压、粉尘浓度的数据,Arduino Uno控制器通过XBee模块接收上位机发出的命令,分析有效命令,读取温湿度、气压、粉尘浓度等数据,并上传给LabVIEW软件。

个人气象站Arduino控制器程序代码如下:

#include <Wire.h> #include <BMP085.h> #include <SHT1x.h>  #define temp_Command      0x10   //收集命令字 #define humidity_Command  0x20   //A1采集命令字 #define pressure_Command  0x30   //D0采集命令字 #define dust_Command      0x40   //D1采集命令字  // Specify data and clock connections and instantiate SHT1xobject
#define dataPin  A3
#define clockPin A2
SHT1x sht1x(dataPin, clockPin);
BMP085 bmp; 

byte comdata[3]={0};      //定义数组数据,存放串口接收数据
float temp_c;
float humidity;
int dustPin=0;
int dustVal=0;
int PressureVal=0; 
int ledPower=2;
int delayTime=280;
int delayTime2=40;
float offTime=9680; 

void receive_data(void);      //接受串口数据
void test_do_data(void);         //测试串口数据是否正确,并更新数据

void setup()
{
  Serial.begin(9600);      
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(ledPower,OUTPUT);
  pinMode(4, OUTPUT);
  analogReference(INTERNAL);
  bmp.begin();  
}
void loop()
{
  while (Serial.available() > 0)   //不断检测串口是否有数据
   {
        receive_data();            //接受串口数据
        test_do_data();               //测试数据是否正确并更新标志位
   }
}
void receive_data(void)       
{
   int i ;
   for(i=0;i<3;i++)
   {
      comdata[i] =Serial.read();
      //延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失,
       delay(2);
   }
}
 
void test_do_data(void)
{
  if(comdata[0] == 0x55)            //0x55和0xAA均为判断是否为有效命令
   {
     if(comdata[1] == 0xFF)
     {
        switch(comdata[2])
          {   
            case temp_Command:   
                temp_c = sht1x.readTemperatureC();
                Serial.print(temp_c, 2);  
                 break;
            case humidity_Command:   
                 humidity = sht1x.readHumidity();
                 Serial.print(humidity,2);
                 break;
            case pressure_Command:   
                 PressureVal=bmp.readPressure();
                 Serial.print(PressureVal,2);                    
                 break;
            case dust_Command:   
                 digitalWrite(ledPower,LOW); // power on the LED
                 delayMicroseconds(delayTime);
                 dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor
                 delayMicroseconds(delayTime2);
                 digitalWrite(ledPower,HIGH); // turn the LED off
                 delayMicroseconds(offTime);
                 Serial.println(dustVal);                             
                 break;               
          }
       }
   }
}

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的组网技术,在一定的区域内布置多个测量站点,可以实现区域性的气象参数的测量。

资源下载请参见:LabVIEW Arduino ZigBee无线气象站【实战项目】-单片机文档类资源

标签: 晶体管光电外围电路传感器将变得更复杂电容传感器布置结构电容a3d发布无铅玻璃封装二极管labview如何控制红外传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台