LabVIEW控制Arduino采集DHT11溫濕度數值(進階篇—4)
1
項目概述
在多數情況下,測量溫度的同時需要測量濕度,本篇博文將介紹使用DHT11溫濕度傳感器、Arduino Uno和LabVIEW組成溫濕度測量系統,可用于糧倉等場合的溫濕度監(jiān)控。
DHT11數字溫濕度傳感器,是一款含有已校準數字信號輸出的溫濕度復合傳感器,采用專用的數字模塊采集技術和溫濕度傳感技術,具有極高的可靠性與卓越的長期穩(wěn)定性,內部包含一個電阻式感濕元件和一個NTC測溫元件。DHT11傳感器都經過實驗室校準,校準系數以程序的形式儲存在OTP內存中,傳感器內部在檢測信號的處理過程中要調用這些校準系數。采用單線制串行接口,超小的體積、極低的功耗,使系統集成變得簡易快捷,信號傳輸距離可達20米以上。
關于LabVIEW控制Arduino在基礎篇已經講解過很多種類溫度傳感器的采集方法。具體可參見以下鏈接:
LabVIEW控制Arduino采集LM35溫度傳感器數值(基礎篇—12)
LabVIEW控制Arduino采集熱敏電阻溫度數值(基礎篇—13)
LabVIEW控制Arduino采集多路DS18B20溫度數值(進階篇—3)
2
項目架構
溫濕度測量系統框圖如下圖所示:
在整個系統中,Arduino Uno作為下位機,負責DHT11的讀寫以及數據傳輸,LabVIEW編寫的顯示軟件作為上位機,上下位機利用USB-TTL接口實現通信。
3
硬件環(huán)境
需要將將DHT11溫濕度模塊的VCC、GND、DOUT引腳分別接至Arduino Uno控制板上的+5V、GND、數字端口2,還需要在DOUT與VCC之間串聯5KΩ的上拉電阻。濕度測量系統硬件連接圖如下所示:

4
Arduino功能設計
Arduino Uno控制器負責讀取LabVIEW上位機發(fā)來的溫度和濕度采集命令,并讀取DHT11從而獲取溫度或濕度的數據,通過串口發(fā)送回上位機LabVIEW軟件。ArduinoUno控制器的程序代碼如代碼如下所示:
#include <dht11.h> #define Temperature_COMMAND 0x10 //采集命令字#define Humidity_COMMAND 0x11 //采集命令字 /*-----( Declare objects )-----*/dht11 DHT11; /*-----( Declare Constants, Pin Numbers )-----*/#define DHT11PIN 2 byte comdata[3]={0}; //定義數組數據,存放串口接收數據 void receive_data(void); //接受串口數據void test_do_data(void); //測試串口數據是否正確,并更新數據 void setup(){ Serial.begin(9600); }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] == 0xAA) { switch (comdata[2]) { case Temperature_COMMAND: DHT11.read(DHT11PIN); Serial.println((float)DHT11.temperature, 2); break; case Humidity_COMMAND: DHT11.read(DHT11PIN); Serial.println((float)DHT11.humidity, 2); break; } } }}
5
LabVIEW功能設計
LabVIEW上位機部分需要完成以下功能:
1、向下位機Arduino控制器發(fā)送溫度采集命令,Arduino控制器通過串口接收上位機命令,完成溫度數據的采集之后將數據回傳,LabVIEW軟件將回傳的溫度數據顯示在前面板上;
2、向下位機Arduino控制器發(fā)送濕度采集命令,Arduino控制器通過串口接收上位機命令,完成濕度數據的采集之后將數據回傳,LabVIEW軟件將回傳的濕度數據顯示在前面板上。
5.1、前面板設計
LabVIEW前面板分為溫度和濕度顯示,溫濕度測量系統的LabVIEW上位機前面板如下圖所示:

5.2、程序框圖設計
LabVIEW上位機主程序的結構為順序結構+While循環(huán)。首先,在順序結構中的第-幀中,通過設置的串口號來初始化串口通信。然后,程序進入While循環(huán)和順序結構,依次向Arduino Uno控制器發(fā)送溫度和濕度測量的命令碼,接收到返回的溫度和濕度數據之后,顯示在前面板上。最后,關閉串口通信。
為了保證通信的正確性,在數據幀中設置0X55和0XAA為校驗幀,0X11為溫度采集命令碼,0X10為濕度采集命令碼。LabVIEW上位機程序框圖如下圖所示:

*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。