<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機實例 >> 正文

      基于51單片機的SHT11溫濕度測量儀設(shè)計(源碼+仿真+文檔)

      作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2023/7/1

      電路原理圖如下:

       


      仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

       
       

       

      一、總體設(shè)計要求3
      二、方案論證 3
      三、系統(tǒng)硬件設(shè)計 3
      3.1復(fù)位電路3
      3.2時鐘電路3
      3.3 溫濕度測量電路4
      3.4顯示電路5
      四、系統(tǒng)軟件設(shè)計
      4.1DHT11軟件設(shè)計6
      4.2軟件設(shè)計流程圖 6
      4.3 原理圖以及原理分析7
      五、電路仿真及仿真結(jié)果分析
      5.1電路仿真圖 7
      5.2仿真結(jié)果分析 8
      六、心得體會8
      七、參考文獻9

       

      一、總體設(shè)計要求:

      1、能夠檢測出環(huán)境中的溫度和濕度,并且顯示在LCD1602上面

      2、技術(shù)參數(shù)有以下要求:
      濕度測量范圍:0%~100%RH;溫度測量范圍-40~+110℃。

      濕度測量分辨率:1%RH;溫度測量分辨率:1℃。

      濕度測量精度:±2.0%RH;溫度測量精度:±0.5℃。

      3、電源工作范圍:DC 4.5~5.5V。


      二、構(gòu)思與選擇:

      方案一:

      使用AM2301數(shù)字溫濕度傳感器。該型號溫濕度傳感器,采用3.3—6V直流電源供電,它的各部分參數(shù):濕度測量范圍為20%~90%RH;溫度測量的范圍為0~+50℃;濕度測量精度為±5.0%RH;溫度測量精度為±2.0℃。雖然它的價格比較便宜,單測溫的范圍和測濕的范圍太小,溫度的精度和濕度的精度太低,不符合設(shè)計的要求。

      方案二:

      使用AM2302電容式數(shù)字溫濕度傳感器。它的各部分參數(shù)如下:由于傳感器參數(shù):濕度0%~100%相對是濕度的測量范圍;溫度測量范圍為40~+80℃;濕度的測量精度為±3.0%RH;溫度的測量精度為±0.5℃。價格也比較適合,基本可以滿足設(shè)計要求。

      方案三:

      使用數(shù)字溫濕度傳感器SHT11。濕度測量范圍:0%~100%RH;溫度測量范圍:40~+120℃;濕度測量精度:±2%相對濕度;溫度測量精度:±0.2%℃溫度測量精度。改傳感器價格便宜。溫度和濕度都達到或超過了標題的精度要求,屬于低功率傳感器。

      綜上分析,設(shè)計應(yīng)以最大化利用內(nèi)部資源,電路簡易,節(jié)約成本為原則,而且利用從系統(tǒng)技術(shù)參數(shù)要求和低功率方面考慮。因此采用方案三。


      三、系統(tǒng)硬件設(shè)計:

      3.1復(fù)位電路:

      復(fù)位是單片機的初始化操作。單片機啟動運行時,都需要先復(fù)位,作用是使CPU和系統(tǒng)中其他部件處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。因此,復(fù)位是一個很重要的操作方式。但單片機本身是不能自動進行復(fù)位的,必須配合相應(yīng)的外部電路才能實現(xiàn)。

      單片機通電時,從初始態(tài)開始執(zhí)行程序,稱為上電復(fù)位。單片機死機時,通過手工按“重啟”鍵使其從初始態(tài)開始執(zhí)行程序,稱為手工復(fù)位。

      復(fù)位條件:復(fù)位引腳RST(全稱RESET)出現(xiàn)2個機器周期以上的高電平時,單片機就執(zhí)行復(fù)位操作;但如果RST持續(xù)為高電平,單片機就處于循環(huán)復(fù)位狀態(tài)。

      3.2時鐘電路:

      1.時鐘電路

      利用芯片內(nèi)部的振蕩電路,在XTAL1、XTAL2的引腳上外接定時元件,內(nèi)部振蕩器便能產(chǎn)生自激振蕩。定時元件可以采用石英晶體和電容組成的并聯(lián)諧振電路。

      晶振可以在1.2~12MHZ之間任選,甚至可以達到24MHz,但是頻率越高功耗也就越大。和晶振并聯(lián)的電容C1、C2的大小對振蕩頻率有微小影響,可以起到頻率微調(diào)作用。當(dāng)采用石英晶振時,電容可以在20~40pF之間選擇。晶體和電容應(yīng)盡可能與單機片芯片靠近,以減少引線的寄生電容,保證振蕩器可靠工作。

       

       

      3.3.溫濕度測量電路:

       

       

      SHT11是瑞士Scnsirion公司推出的一款數(shù)字溫濕度傳感器芯片。該芯片廣泛應(yīng)用于暖通空調(diào)、汽車、消費電子、自動控制等領(lǐng)域。共主要特點如下: 高度集成,將溫度感測、濕度感測、信號變換、A/D轉(zhuǎn)換和加熱器等功能集成到一個芯片上;提供二線數(shù)字串行接口SCK和DATA,接口簡單,支持CRC傳輸校驗,傳輸可靠性高;測量精度可編程調(diào)節(jié),內(nèi)置A/D轉(zhuǎn)換器(分辨率為8~12位,可以通過對芯片內(nèi)部寄存器編程選擇); 測量精確度高,由于同時集成溫濕度傳感器,可以提供溫度補償?shù)臐穸葴y量值和高質(zhì)量的露點計算功能;封裝尺寸超小(7.62 mm×5.08mm×2.5 mm),測量和通信結(jié)束后,自動轉(zhuǎn)入低功耗模式; 高可靠性,采用CMOSens工藝,測量時可將感測頭完全浸于水中。SHT11溫濕度傳感器采用SMD(LCC)表面貼片封裝形式,接口非常簡單,引腳名稱及排列順序如圖下所示。

       

      仿真電路圖

       

       

      3.4、顯示電路:
      3.4.1電路工作原理

      該模塊采用LCD1602液晶屏將電子時鐘工作的實時狀態(tài)顯示在屏幕上,結(jié)構(gòu)簡單,顯示清晰。其中GND接地,VCC接VCC,LCD偏壓輸入引腳V0通過接一個電位器來調(diào)節(jié)顯示屏的背光度,數(shù)據(jù)/命令選擇端RS、讀/寫控制信號端RW、LCD使能端分別由單片機引腳P2.6、P2.5、P2.7進行控制。數(shù)據(jù)傳輸端D0-D7則用單片機的P0口進行控制。如圖是LCD1602詳細的電路引腳連線圖。
       

       

      3.4.2LCD顯示模塊電路圖

       

      系統(tǒng)軟件設(shè)計:

         4.1.1 DHT11軟件設(shè)計
      微處理器和溫濕度傳感器通信采用串行二線接口SCK和DATA,其中SCK為時鐘線,DATA為數(shù)據(jù)線。該二線串行通信協(xié)議和I2C協(xié)議是不兼容的。在程序開始,微處理器需要用一組"啟動傳輸"時序表示數(shù)據(jù)傳輸?shù)膯樱?dāng)SCK時鐘為高電平時,DATA翻轉(zhuǎn)為低電平;緊接著SCK變?yōu)榈碗娖剑S后又變?yōu)楦唠娖剑辉赟CK時鐘為高電平時,DATA再次翻轉(zhuǎn)為高電平。
      根據(jù)SHT11濕度測試時序可以知道。主機發(fā)出啟動命令,隨后發(fā)出一個后續(xù)8位命令碼,該命令碼包含3個地址位(芯片設(shè)定地址為000)和5個命令位;發(fā)送完該命令碼,將DATA總線設(shè)為輸入狀態(tài)等待SHT11的響應(yīng);SHT11接收到上述地址和命令碼后,在第8個時鐘下降沿,將DATA下拉為低電平作為從機的ACK;在第9個時鐘下降沿之后,從機釋放DATA(恢復(fù)高電平)總線;釋放總線后,從機開始測量當(dāng)前濕度,測量結(jié)束后,再次將DATA總線拉為低電平;主機檢測到DATA總線被拉低后,得知濕度測量已經(jīng)結(jié)束,給出SCK時鐘信號;從機在第8個時鐘下降沿,先輸出高字節(jié)數(shù)據(jù);在第9個時鐘下降沿,主機將DATA總線拉低作為ACK信號。然后釋放總線DATA;在隨后8個SCK周期下降沿,從機發(fā)出低字節(jié)數(shù)據(jù);接下來的SCK下降沿,主機再次將DATA總線拉低作為接收數(shù)據(jù)的ACK信號;最后8個SCK下降沿從機發(fā)出CRC校驗數(shù)據(jù),主機不予應(yīng)答(NACK)則 表示測量結(jié)束。
      4.1.2總體程序流圖的設(shè)計:

       

      4.3.原理圖以及原理分析:

       

       


      通過AD19繪制出如上圖所示的原理圖,包括時鐘電路、晶振電路、DHT11溫濕度檢測電路、lcd1602顯示電路,因為溫濕度傳感器與單片機連接電路比較簡單。所以可以容易的繪制出電路圖。

       

      五、仿真圖及仿真分析:

       

      5.1、總體仿真結(jié)果:

       

       


      5.2、仿真分析:

      首先,將程序的hex文件加載到單片機中,開始仿真。可以清楚地看到LCD1602上面顯示了SHT11當(dāng)前的溫度和濕度,雖然有誤差但是誤差并不是很大可以忽略不計,調(diào)節(jié)傳感器上面的按鈕可以實時的將傳感器所在環(huán)境的溫度顯示到LCD1602上面,具有可控性,而且顯示性和可控性較好。

       

      六、心得體會:

      我這次做的是基于單片機的溫濕度測量儀。我們知道,單片機和傳感器的應(yīng)用如今已經(jīng)在工業(yè)、電子等方方面面展示出了它的優(yōu)越性,利用單片機和傳感器設(shè)計電路也逐漸成了趨勢,它與外圍的簡單電路再加上優(yōu)化程序就可以構(gòu)建任意的產(chǎn)品,使得這次設(shè)計成為現(xiàn)實。隨著單片機和傳感器的日益發(fā)展,它們必將在未來顯示出更大的活力,為人們提供更好的產(chǎn)品。
      雖然這個電路我已經(jīng)設(shè)計出來了,但是在這次的設(shè)計當(dāng)中,我遇到了不少的問題。最開始我不知道要用哪一種傳感器作為我的設(shè)計,糾結(jié)了好久,最終我確定了選擇用DHT11作為我的溫濕度傳感器模塊,因為老師說不能用書本上的DS18B20作為此次設(shè)計模塊,因為書上有該模塊的詳細電路圖原理圖以及寫好的程序,所以我就仔細的查閱資料,結(jié)合以前在實驗室學(xué)習(xí)的經(jīng)驗,通過一個多星期的時間來準備,從方案的選擇原理圖的繪制再到程序的編寫和仿真圖的繪制和調(diào)試,最終順利的完成了這一次的傳感器設(shè)計。
      在學(xué)習(xí)傳感器與檢測技術(shù)這門中,我的收獲是特別大的,完成這次設(shè)計,不僅鞏固了單片機的知識,而且對傳感器與單片機的應(yīng)用也熟悉了基本的操作方法。相信在以后的設(shè)計中,就會排除現(xiàn)在遇到的問題,更好的完成設(shè)計。以前我不知道傳感器到底是什么,只是在字面上理解它的意思,把一個物理量轉(zhuǎn)換成另外一個物理量。但是傳感器沒有我們想象的那么簡單,它有它的工作原理,使用條件。通過這一個學(xué)期的學(xué)習(xí),我學(xué)習(xí)了好多傳感器,比如說:溫度傳感器、濕度傳感器、位移傳感器、壓力傳感器等等,現(xiàn)在的我大致地能理解他們的一些特性,也能夠運用他們來設(shè)計作品。在這里,我非常感謝我的老師。同時,對于這門課,我也想提出一些建議,希望我們班能夠經(jīng)常開設(shè)一些關(guān)于傳感器設(shè)計與制作的活動。這樣既能提高我們的動手水平,也能開發(fā)我們設(shè)計傳感器的思維。

      單片機源程序如下:

      #include "all.h"
      typedef union    
      { 
        uint i;        //定義了兩個共用體   
        float f;  
      } value;   
        enum 
        {
                TEMP,HUMI   //TEMP=0,HUMI=1
        };
      void s_transstart(void)   // 生成傳輸啟動
      {        
              DATA=1; 
              SCK=0;              
              _nop_();     
              SCK=1;     
              _nop_();     
              DATA=0;     
              _nop_();     
              SCK=0;        
              _nop_();_nop_();_nop_();     
              SCK=1;     
              _nop_();      
              DATA=1;           
              _nop_();      
              SCK=0;        
      }
      void s_connectionreset(void)  
      {       
              uchar i;      
              DATA=1; 
              SCK=0;                          
              for(i=0;i<9;i++)                  
              {       
                      SCK=1;     
                      SCK=0;    
              }     
              s_transstart();                   //傳輸開始
      }
      char s_write_byte(uchar value)   //在敏總線上寫入一個字節(jié)并檢查應(yīng)答  
      {      
              uchar i,error=0;       
              for (i=0x80;i>0;i/=2)              
              {        
                      if(i&value) 
                              DATA=1;          //用i屏蔽值,寫入敏總線   
                      else 
                              DATA=0;                               
                      SCK=1;                            
                      _nop_();_nop_();_nop_();          
                      SCK=0;    
              }     
              DATA=1;                           //釋放數(shù)據(jù)線
              SCK=1;                              
              error=DATA;                       //DATA在第9個上升沿將被DHT90自動下拉為低電平。    
              _nop_();_nop_();_nop_();   
              SCK=0;    
              DATA=1;                           //釋放數(shù)據(jù)線 
              return error;                     //返回:0成功,1失敗 
      }
      char s_read_byte(uchar ack)        // 從敏感總線讀取字節(jié),并在“ack=1”的情況下給出確認
      {      
              uchar i,val=0;     
              DATA=1;                           //釋放數(shù)據(jù)線 
              for (i=0x80;i>0;i/=2)             //shift bit for masking
              { 
                      SCK=1;                          //clk for SENSI-BUS      
                      if (DATA) val=(val|i);        //read bit      
                      _nop_();_nop_();_nop_();        //pulswith約3 us     
                      SCK=0;                 
              }     
              if(ack==1)
                  DATA=0;                          //如果“ack==1”下拉數(shù)據(jù)線   
              else DATA=1;                      //如果是校驗(ack==0),讀取完后結(jié)束通訊   
                  _nop_();_nop_();_nop_();          //pulswith約3 us    
              SCK=1;                            //clk #9 for ack    
              _nop_();_nop_();_nop_();          //pulswith約3 us     
              SCK=0;                     
              _nop_();_nop_();_nop_();          //pulswith約3 us    
              DATA=1;                           //釋放數(shù)據(jù)線   
              return val;  
      }
      char s_measure(uchar *p_value,uchar *p_checksum,uchar mode)  //用校驗和進行測量(濕度/溫度)
      {      
              uint error=0;    
              uint i;       
              s_transstart();                   //傳輸開始  
              switch(mode)
              {                                //發(fā)送命令給傳感器
                      case TEMP : error+=s_write_byte(MEASURE_TEMP); break;     
                      case HUMI : error+=s_write_byte(MEASURE_HUMI); break;     
                      default: 
                              break;       
              }     
              for (i=0;i<65535;i++) 
              if(DATA==0) 
                      break;                        //等待傳感器完成測量
              if(DATA) error+=1;                // 或超時(~2秒)   
                      *(p_value)  =s_read_byte(ACK);    //讀取第一個字節(jié)(MSB)
                      *(p_value+1)=s_read_byte(ACK);    //讀取第二個字節(jié)(LSB) 
                      *p_checksum =s_read_byte(noACK);  //讀取校驗和
              return error;  
      }
      void calc_dht90(float *p_humidity ,float *p_temperature) 
      {
              const float C1=-4.0;              // 12位
              const float C2=+0.0405;           // 12位
              const float C3=-0.0000028;        // 12位    
              const float T1=+0.01;             // 14位   
              const float T2=+0.00008;           // 14位
              float rh=*p_humidity;             // rh:      濕度[滴答聲]12位    
              float t=*p_temperature;           // t:       溫度[刻度]14位  
              float rh_lin;                     // rh_lin:  濕度線性   
              float rh_true;                    // rh_true: 溫度補償濕度
              float t_C;                        // t_C   :  溫度 [C]     
              t_C=t*0.01-40;                  // 溫度從刻度到[C]  
              rh_lin=C3*rh*rh+C2*rh+C1;     
              rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;   //.溫度補償濕度[%RH]
              if(rh_true>100)rh_true=100;       //如果值在外面,則削減   
              if(rh_true<0.1)rh_true=0.1;       //物理可能范圍  
      ……………………
      …………限于本文篇幅 余下代碼請從下載附件…………
      

      基于51單片機的SHT11溫濕度測量儀設(shè)計.rar
      www.zhimadaxue.com/Article/UploadFiles/202307/2023070115583466.rar

      Tags:溫濕度,溫濕度測量,51單片機  
      責(zé)任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網(wǎng)友評論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 亚洲综合av一区二区三区 | 狠狠色综合网久久久久久| 欧洲97色综合成人网| 狠狠做深爱婷婷久久综合一区| 国产综合成色在线视频| 99久久婷婷免费国产综合精品| 亚洲综合视频在线观看| 亚洲综合色视频在线观看| 亚洲综合在线成人一区| 亚洲综合色在线观看亚洲| 色综合视频一区中文字幕| 国产成人99久久亚洲综合精品| 狼狼综合久久久久综合网| 国产精品激情综合久久| 色综合久久中文字幕网| 色综合合久久天天综合绕视看| 亚洲国产综合无码一区二区二三区 | 国产在线一区二区综合免费视频| 国产精品天天影视久久综合网 | 久久婷婷五月综合色99啪ak| 婷婷国产天堂久久综合五月| 亚洲av一综合av一区| 久久久久久久尹人综合网亚洲| 九九综合九九综合| 国产精品成人免费综合| 国产综合在线观看视频| 色噜噜狠狠色综合中文字幕| 综合无码一区二区三区四区五区| 久久综合久久久久| 亚洲综合一区二区国产精品| 亚洲精品综合一二三区在线| 久久一日本道色综合久| 久久精品亚洲综合| 国产精品国色综合久久| 久久综合给久久狠狠97色| 一本色道久久综合亚洲精品| 亚洲综合自拍成人| 亚洲第一综合天堂另类专| 色婷婷久久综合中文网站| 亚洲国产成人五月综合网| 久久综合给合久久狠狠狠97色 |