博客專欄

        EEPW首頁 > 博客 > LabVIEW控制Arduino采集DHT11溫濕度數(shù)值(進階篇—4)

        LabVIEW控制Arduino采集DHT11溫濕度數(shù)值(進階篇—4)

        發(fā)布人:美男子玩編程 時間:2022-06-24 來源:工程師 發(fā)布文章

        1


        項目概述


        在多數(shù)情況下,測量溫度的同時需要測量濕度,本篇博文將介紹使用DHT11溫濕度傳感器、Arduino Uno和LabVIEW組成溫濕度測量系統(tǒng),可用于糧倉等場合的溫濕度監(jiān)控。


        DHT11數(shù)字溫濕度傳感器,是一款含有已校準數(shù)字信號輸出的溫濕度復合傳感器,采用專用的數(shù)字模塊采集技術和溫濕度傳感技術,具有極高的可靠性與卓越的長期穩(wěn)定性,內(nèi)部包含一個電阻式感濕元件和一個NTC測溫元件。DHT11傳感器都經(jīng)過實驗室校準,校準系數(shù)以程序的形式儲存在OTP內(nèi)存中,傳感器內(nèi)部在檢測信號的處理過程中要調(diào)用這些校準系數(shù)。采用單線制串行接口,超小的體積、極低的功耗,使系統(tǒng)集成變得簡易快捷,信號傳輸距離可達20米以上。


        圖片


        關于LabVIEW控制Arduino在基礎篇已經(jīng)講解過很多種類溫度傳感器的采集方法。具體可參見以下鏈接:


        LabVIEW控制Arduino采集LM35溫度傳感器數(shù)值(基礎篇—12)

        LabVIEW控制Arduino采集熱敏電阻溫度數(shù)值(基礎篇—13)

        LabVIEW控制Arduino采集多路DS18B20溫度數(shù)值(進階篇—3)



        2


        項目架構


        溫濕度測量系統(tǒng)框圖如下圖所示:


        圖片


        在整個系統(tǒng)中,Arduino Uno作為下位機,負責DHT11的讀寫以及數(shù)據(jù)傳輸,LabVIEW編寫的顯示軟件作為上位機,上下位機利用USB-TTL接口實現(xiàn)通信。



        3


        硬件環(huán)境


        需要將將DHT11溫濕度模塊的VCC、GND、DOUT引腳分別接至Arduino Uno控制板上的+5V、GND、數(shù)字端口2,還需要在DOUT與VCC之間串聯(lián)5KΩ的上拉電阻。濕度測量系統(tǒng)硬件連接圖如下所示:


        圖片



        4


        Arduino功能設計 


        Arduino Uno控制器負責讀取LabVIEW上位機發(fā)來的溫度和濕度采集命令,并讀取DHT11從而獲取溫度或濕度的數(shù)據(jù),通過串口發(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};      //定義數(shù)組數(shù)據(jù),存放串口接收數(shù)據(jù) void receive_data(void);      //接受串口數(shù)據(jù)void test_do_data(void);         //測試串口數(shù)據(jù)是否正確,并更新數(shù)據(jù) void setup(){  Serial.begin(9600);      
        }void loop(){  while (Serial.available() > 0)   //不斷檢測串口是否有數(shù)據(jù)   {        receive_data();            //接受串口數(shù)據(jù)        test_do_data();               //測試數(shù)據(jù)是否正確并更新標志位   }}void receive_data(void)       {   int i ;   for(i=0;i<3;i++)   {      comdata[i] =Serial.read();      //延時一會,讓串口緩存準備好下一個字節(jié),不延時可能會導致數(shù)據(jù)丟失,       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控制器通過串口接收上位機命令,完成溫度數(shù)據(jù)的采集之后將數(shù)據(jù)回傳,LabVIEW軟件將回傳的溫度數(shù)據(jù)顯示在前面板上;

        2、向下位機Arduino控制器發(fā)送濕度采集命令,Arduino控制器通過串口接收上位機命令,完成濕度數(shù)據(jù)的采集之后將數(shù)據(jù)回傳,LabVIEW軟件將回傳的濕度數(shù)據(jù)顯示在前面板上。


        5.1、前面板設計


        LabVIEW前面板分為溫度和濕度顯示,溫濕度測量系統(tǒng)的LabVIEW上位機前面板如下圖所示:


        圖片


        5.2、程序框圖設計


        LabVIEW上位機主程序的結構為順序結構+While循環(huán)。首先,在順序結構中的第-幀中,通過設置的串口號來初始化串口通信。然后,程序進入While循環(huán)和順序結構,依次向Arduino Uno控制器發(fā)送溫度和濕度測量的命令碼,接收到返回的溫度和濕度數(shù)據(jù)之后,顯示在前面板上。最后,關閉串口通信。


        為了保證通信的正確性,在數(shù)據(jù)幀中設置0X55和0XAA為校驗幀,0X11為溫度采集命令碼,0X10為濕度采集命令碼。LabVIEW上位機程序框圖如下圖所示:


        圖片


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



        關鍵詞: LabVIEW

        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 洛阳市| 岳池县| 澄城县| 习水县| 灵璧县| 明星| 奉新县| 定边县| 务川| 额济纳旗| 昌平区| 武城县| 吉木乃县| 壶关县| 绥棱县| 会泽县| 泸水县| 平山县| 阳朔县| 麦盖提县| 瓮安县| 临猗县| 留坝县| 突泉县| 达孜县| 吴川市| 封丘县| 页游| 湖口县| 邯郸县| 苍梧县| 冕宁县| 新田县| 醴陵市| 扎赉特旗| 京山县| 济阳县| 佛坪县| 中宁县| 绥阳县| 三台县|