LabVIEW Arduino ZigBee無線氣象站(項目篇—3)
1
項目概述
目前,國內氣象站對地面氣象數據的采集大多采用傳統的有線方式,其布線成本高,維護不方便,尤其對于山區(qū)等一些復雜的地形來說,這種缺點更為明顯。傳統的無線通信方式有很多,無線電、微波、紅外線、藍牙、射頻等,在某些只需簡單的無線連接的應用領域對數據速率的要求并不很高,設備的功耗是更需要考慮的問題。ZigBee網絡是低功耗、低成本、高可靠性的無線傳感器網絡,其在環(huán)境檢測等領域中有著廣闊的應用前景。
2
項目架構
本篇博文將要介紹一種基于Arduino、LabVIEW和ZigBee的個人小型無線自動氣象站,可以實現自主采集溫度、濕度、氣壓、粉塵濃度,并且將數據實時上傳至LabVIEW上位機軟件。氣象站終端設備采用Arduino作為控制核心,上位機軟件采用LabVIEW,兩者通過基于ZigBee技術的XBee模塊實現無線通信。
個人小型氣象站的總體框圖如下圖所示:
3
傳感器選型
3.1、溫濕度傳感器
SHT11是瑞士Sensirion公司推出的一款數字溫濕度傳感器芯片,將傳感元件和信號處理電路集成在一塊微型電路板上,輸出完全標定的數字信號,采用CMOSens專利技術,確保產品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器芯片內部包括一個電容性聚合體測濕敏感元件、一個用能隙材料制成的測溫元件,并在同一芯片上與14位的A/D轉換器以及串行接口電路實現無縫連接。因此,具有品質卓越、響應迅速、抗干擾能力強、性價比高等優(yōu)點,廣泛應用于暖通空調、汽車、消費電子、自動控制等領域。
每個傳感器芯片都在極為精確的濕度腔室中進行標定,校準系數以程序形式儲存在OTP內存中,用于內部的信號校準。兩線制的串行接口與內部的電壓調整,使外圍系統集成變得快速而簡單。微小的體積、極低的功耗,使SHT11成為各類應用的首選。
![圖片](http://editerupload.eepw.com.cn/fetch/202208/64da8b3b1492b6e7b0e6d57a0386e071.png)
拓展學習:
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規(guī)范。BMP085氣壓傳感器模塊如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/c6f0a042f6d2bc07398144a622d98ee7.png)
3.3、空氣質量傳感器
粉塵是指懸浮在空氣中的固體微粒。按照國際標準化組織規(guī)定,粒徑小于75um的固體懸浮物定義為粉塵。大氣中粉塵的存在是保持地球溫度的主要原因之一,大氣中過多或過少的粉塵將對環(huán)境產生災難性的影響。但在生活和工作中,過多的粉塵是人類健康的天敵,是誘發(fā)多種疾病的主要原因。
隨著經濟的發(fā)展,環(huán)境污染越發(fā)嚴重,隨著生活水平的提高,人們的健康意識也越來越強,在小型氣象站中增加粉塵傳感器,用于監(jiān)測空氣中的粉塵等可吸入固體顆粒。
GP2Y1010AU0F是夏普公司的光學空氣質量傳感器,可以測量空氣中塵埃的含量。該裝置中包含一個紅外發(fā)光二極管和光電晶體管,且呈對角布置,允許其檢測的反射光在空氣中的灰塵,可以非常有效地檢測比較微小的顆粒,如香煙煙霧,并且是常用的空氣凈化器系統。GP2Y1010AU0F實物圖效果如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/4b1140d56cb92b68672a98312942146e.png)
4
硬件環(huán)境
將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的硬件連接,如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/d22b1ffb92962e7ac87ae332000cc5be.png)
5
Arduino功能設計
在基于Arduino與LabVIEW的個人小型氣象站中,Arduino Uno控制器需要完成兩個功能:接收和判斷命令,采集和傳輸溫濕度、氣壓、粉塵濃度的數據,Arduino Uno控制器通過XBee模塊接收上位機發(fā)來的命令,分析得到有效命令,讀取溫濕度、氣壓、粉塵濃度等數據,并上傳給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 SHT1x object#define dataPin A3#define clockPin A2SHT1x 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(); //延時一會,讓串口緩存準備好下一個字節(jié),不延時可能會導致數據丟失, 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控制器發(fā)送溫度、濕度、氣壓數據的采集命令,Arduino控制器通過串口接收上位機命令,完成相應的數據采集之后并將采集的數據回傳,LabVIEW軟件將回傳的數據顯示在前面板上。
2、向下位機Arduino控制器發(fā)送粉塵濃度的采集命令,Arduino控制器通過串口接收上位機命令,完成粉塵濃度的電壓采集之后并將采集的電壓數據轉換為粉塵濃度,LabVIEW軟件接收Arduino返回的粉塵濃度并顯示在前面板上,同時將粉塵濃度的變化顯示在波形圖上。
6.1、前面板設計
LabVIEW前面板分為儀表盤顯示和波形圖顯示兩個部分,儀表盤部分用于顯示當前的數據,包括溫度、濕度、氣壓和粉塵濃度;波形圖顯示部分用于顯示粉塵濃度的變化趨勢。基于Arduino與LabVIEW的個人小型氣象站的LabVIEW上位機前面板,如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/2fd70042505089504a8fdb58fed50a5e.png)
6.2、程序框圖設計
在LabVIEW上位機的程序設計中,溫度、濕度、氣壓和粉塵濃度的采集需要向Arduino Uno控制器發(fā)送不同的命令碼,并獲取Arduino Uno控制器返回的測量數據,為了使得程序結構更加清晰明朗,此處將溫度、濕度、氣壓和粉塵濃度采集分別編寫成子VI。
溫度采集子程序的前面板和程序框圖,如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/24329243c60f2a33bfc62bffeec2b9f2.png)
![圖片](http://editerupload.eepw.com.cn/fetch/202208/77239d9abd6b8cf81f1a537a716dd9a2.png)
濕度采集子程序的前面板和程序框圖,如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/ddd3ee0f4b2837bde9bf5e3de4dbf931.png)
![圖片](http://editerupload.eepw.com.cn/fetch/202208/3e6efebe45d7bd552de63821027c95af.png)
氣壓采集子程序的前面板和程序框圖,如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/6c6d8e76f2bf76cf6702f6ed5b67303a.png)
![圖片](http://editerupload.eepw.com.cn/fetch/202208/90f9c522284b2ac13c2afe3df8df1072.png)
粉塵濃度采集子程序的前面板和程序框圖,如下圖所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/7a1cc8224f95bded5eaa876603d3fcb5.png)
![圖片](http://editerupload.eepw.com.cn/fetch/202208/58bc1282f2b93770dbe95327101b60d5.png)
采用條件結構+移位寄存器的狀態(tài)機來實現LabVIEW上位機主程序,將主程序劃分為5個狀態(tài):0狀態(tài)為串口初始化,1狀態(tài)為溫度測量,2狀態(tài)為濕度測量,3狀態(tài)為氣壓測量,4狀態(tài)為粉塵濃度測量,且初始狀態(tài)為0狀態(tài)(串口初始化)。
在0狀態(tài)中,通過設置的串口號來初始化串口通信。在1狀態(tài)中,讀取溫度數據并顯示,在2狀態(tài)中,讀取濕度數據并顯示,在3狀態(tài)中,讀取氣壓數據并顯示,在4狀態(tài)中,讀取粉塵濃度數據并顯示在波形圖上。最后,關閉串口通信。
串口初始化程序框圖如下所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/5a7d82a6643820d2ecf4c2e24afc9b38.png)
溫度采集程序框圖如下所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/3cd168716c79e2883f2508b1fc76267f.png)
濕度采集程序框圖如下所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/53876ced0c29532ec8207d39a468d672.png)
氣壓采集程序框圖如下所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/ebe9261e16bd2f7510cb2b1c8237f08a.png)
粉塵濃度采集程序框圖如下所示:
![圖片](http://editerupload.eepw.com.cn/fetch/202208/14a59622b57c8282c6eb2ffce499c55e.png)
本節(jié)介紹的基于ZigBee的個人小型氣象站可以通過無線方式實現溫濕度、氣壓和粉塵濃度的測量,如需要增加其他的測量參數,則需要添加相應的傳感器即可。
另外,利用ZigBee的組網技術,在一定的區(qū)域內布置多個測量站點,可以實現區(qū)域性的氣象參數的測量。
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。
電容式接近開關相關文章:電容式接近開關原理 光電開關相關文章:光電開關原理