<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產(chǎn)品分類

      當(dāng)前位置: 首頁 > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 溫濕度傳感器

      類型分類:
      科普知識(shí)
      數(shù)據(jù)分類:
      溫濕度傳感器

      proteus濕度傳感器:Proteus 基于Arduino DHT11溫濕度傳感器仿真實(shí)驗(yàn)

      發(fā)布日期:2022-10-09 點(diǎn)擊率:55


      proteus濕度傳感器:Proteus 基于Arduino DHT11溫濕度傳感器仿真實(shí)驗(yàn)

      1、首先完成Proteus的安裝以及Arduino庫的安裝和引入。(參考此前教程)
      2、新建一個(gè) Arduino工程。點(diǎn)擊左上角的File——New Project,選擇Arduino 328開發(fā)板。
      3、工作區(qū)中出現(xiàn)Arduino的原理圖。現(xiàn)在開始添加功能電路——添加溫度傳感器 DHT11。
      點(diǎn)擊左側(cè)的P,選擇元件。
      4、在彈出的對(duì)話框中,輸入DHT11,如下圖:
      選擇右側(cè)的 DHT11,點(diǎn)擊右下角的OK
      5、回到工作區(qū)的原理圖位置,空白處點(diǎn)擊鼠標(biāo)左鍵,出現(xiàn)粉紅色的待放置元件,再次點(diǎn)擊左鍵。完成元件的放置。
      6、完成DHT11的連線工作。(電源VDD,接地GND,數(shù)據(jù)DATA)
      6.1接電源線。
      左側(cè)點(diǎn)擊“Terminal Mode”——“Power”
      在工作區(qū),放置一個(gè)電源端子,并完成與VDD的連線。
      6.2 接地。類似于電源端子的連接,“Terminal Mode”——“GROUND”。
      6.3 數(shù)據(jù)接線。選擇DEFAULT端子,完成與DATA接線口的連接。如下面兩個(gè)圖。
      6.4 修改DEFAULT端子的屬性。右鍵該端子,選擇編輯屬性。在String處,填寫IO2.點(diǎn)確定。
      7、增加串口模塊。
      同樣的在設(shè)備庫中(Pick Devices),搜索 COMPIM
      8、放置COMPIM串口模塊,并完成連線。如下圖。
      9、再放置虛擬終端,來觀察串口輸出的數(shù)據(jù)。
      在左側(cè)工具欄,選擇“INSTRUMENTS”——VIRTUAL TERMINAL。
      并完成連線如下圖。
      10、編寫Arduino代碼。進(jìn)入Source Code模式,編寫如下代碼:
      11、將課堂發(fā)送給大家的DHT11的庫文件,解壓后放置在Arduino安裝目錄下的Libraris目錄下。(DHT11庫文件也可以到FTP上下載)
      11.1找到自己的Arduino安裝目錄。
      點(diǎn)擊Proteus的System——Compilers Configuration,找到Arduino AVR(Proteus)和Arduino AVR兩個(gè)。
      11.2 將DHT11庫文件放到這兩個(gè)目錄的Libraries下。如下圖:(兩個(gè)都放一下)
      12、開始編譯運(yùn)行。
      點(diǎn)擊左下角的三角箭頭,開始編譯仿真運(yùn)行。如果代碼編譯成功,會(huì)顯示 Compiled Successfully.
      13、仿真成功。顯示DHT11讀取的數(shù)據(jù)。虛擬終端會(huì)顯示從串口讀來的數(shù)據(jù)。
      14、修改傳感器的值,查看讀取數(shù)據(jù)的情況。
      首先要關(guān)閉仿真。點(diǎn)擊左下角的方塊鍵。
      然后在設(shè)計(jì)圖中,右鍵DHT11傳感器,點(diǎn)擊“編輯屬性”Edit Properties
      修改其中的Actual Humidity(濕度值)和Actual Temp(溫度值),點(diǎn)擊“OK”
      再次仿真運(yùn)行,查看結(jié)果。
      proteus濕度傳感器:Proteus 基于Arduino DHT11<a title=溫濕度傳感器仿真實(shí)驗(yàn) 第1張" title="proteus濕度傳感器:Proteus 基于Arduino DHT11溫濕度傳感器仿真實(shí)驗(yàn) 第1張-傳感器知識(shí)網(wǎng)"/>

      proteus濕度傳感器:proteus仿真溫濕度傳感器dht11,dht22程序

      仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
      單片機(jī)源程序如下:
      使用1602顯示DHT22的溫濕度,精確到小數(shù)點(diǎn)的后一位
      //
      //           DHT21使用范例
      //單片機(jī) AT89S52 或 STC89C52RC
      //功能   串口發(fā)送溫濕度數(shù)據(jù) 晶振 11.0592M 波特率 9600
      //硬件   P2.0口為通訊口連接DHT22,DHT22的電源和地連接單片機(jī)的電源和地,單片機(jī)串口加MAX232連接電腦
      //
      #include

      proteus濕度傳感器:SHT10型溫濕度傳感器工作時(shí)序分析及驅(qū)動(dòng)程序與Proteus仿真的實(shí)現(xiàn)

      一、傳感器概述

      SHT10型傳感器屬于SHT1×系列(其他常用型號(hào)還有SHT11、SHT15),SHT1×屬于Sensirion溫濕度傳感器家族中的貼片封裝系列。傳感器將傳感元件和信號(hào)處理電路集成在一塊微型電路板上,輸出完全標(biāo)定的數(shù)字信號(hào)。傳感器采用專利的CMOSens技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電容性聚合體測(cè)濕敏感元件、一個(gè)用能隙材料制成的測(cè)溫元件以及串行接口電路實(shí)現(xiàn)無縫連接。因此,該產(chǎn)品具有品質(zhì)優(yōu)越、響應(yīng)迅速、抗干擾能力強(qiáng)、性價(jià)比高等優(yōu)點(diǎn)。本篇博文將詳細(xì)分析傳感器的工作時(shí)序并根據(jù)時(shí)序編寫驅(qū)動(dòng)程序。最終,該驅(qū)動(dòng)程序?qū)⑼ㄟ^Proteus仿真軟件進(jìn)行仿真驗(yàn)證。

      ?

      二、傳感器尺寸

      ?

      三、接口定義及電源引腳

      (一)接口定義

      (二)電源引腳

      SHT10的供電電壓范圍為2.3-5.5V,建議供電電壓為3.3V。在電源引腳(VDD與GND)之間必須加一個(gè)100nF的電容,用于去耦濾波(在仿真中可加可不加)

      SHT10的串行接口,在傳感器信號(hào)的讀取及電源損耗方面,都做了優(yōu)化處理;傳感器不能按照I2C協(xié)議進(jìn)行編址,但是,如果I2C總線上沒有掛在別的原件則傳感器可以掛載到I2C總線上,但是單片機(jī)與傳感器之間的通信協(xié)議不能采用I2C協(xié)議,而是要在按照傳感器的協(xié)議進(jìn)行信息交互。

      ?

      四、傳感器電氣特性

      傳感器的電氣特性(如:高/低電平、輸入/輸出電壓等)受供電電壓的影響,下表中的參數(shù)在沒有特殊說明情況下均代表在5V供電條件下的參數(shù)。

      下列時(shí)序圖中,加粗的DATA線由傳感器控制,普通的DATA線由單片機(jī)控制,有效時(shí)間由SCK的時(shí)序決定。尤其要注意的是,數(shù)據(jù)讀取的有效時(shí)間為前一個(gè)切換的下降沿。

      ? ? ?

      ?

      五、傳感器的通訊過程及對(duì)應(yīng)的驅(qū)動(dòng)程序

      (一)啟動(dòng)傳感器

      首先,選擇供電電壓后將傳感器通電,商店速率不能低于1V/ms。通電后傳感器需要有11ms進(jìn)入休眠狀態(tài),在此之前,不允許單片機(jī)對(duì)傳感器發(fā)送任何命令。

      在休眠狀態(tài)之后,要用一組“啟動(dòng)傳輸”時(shí)序。來完成數(shù)據(jù)傳輸?shù)某跏蓟T摗眴?dòng)傳輸”時(shí)序包括:當(dāng)SCK時(shí)鐘為高電平時(shí),DATA由高電平反轉(zhuǎn)為低電平,隨后是在SCK高電平時(shí)DATA由低電平反轉(zhuǎn)為高電平。具體時(shí)序圖如下:

      由上述時(shí)序圖,可以得到“啟動(dòng)傳輸”的驅(qū)動(dòng)程序如下:

      (二)命令集及“寫一字節(jié)”程序

      在啟動(dòng)程序之后,后續(xù)命令包括三個(gè)地址位(目前只支持000)和五個(gè)命令位。SHT10會(huì)以下述方式表示已正確接收指令:在第八個(gè)SCK的下降沿之后將DATA下拉為低電平作為ACK位,并在第九個(gè)SCK時(shí)鐘的下降沿之后釋放DATA(恢復(fù)高電平)。SHT10的命令集如下圖所示。

      根據(jù)已知命令集,即可通過單總線向傳感器發(fā)送命令。發(fā)送濕度測(cè)量命令的工作時(shí)序如下圖所示:

      通過上述時(shí)序圖所展示的“發(fā)送一字節(jié)”的工作時(shí)序,在“發(fā)送一字節(jié)數(shù)據(jù)”的驅(qū)動(dòng)程序中可以采取的思路為:數(shù)據(jù)線先傳送高位后傳送低位,取位的方式為mask=0x80與命令值value進(jìn)行“相與”,之后通過mask<<=1配合循環(huán)操作,即可實(shí)現(xiàn)將命令值由高位向低位逐位取出。在每取出value的一位后,首先延時(shí)一個(gè)_op_()? (在12MHz的工作頻率下為1us),使DATA引腳能夠建立起穩(wěn)定的電平,然后使sck產(chǎn)生上升沿并延時(shí)兩個(gè)_nop_(),使傳感器讀入DATA引腳的數(shù)據(jù),然后再恢復(fù)sck引腳的低電平,依次循環(huán)八次,使傳感器讀入一字節(jié)的命令數(shù)據(jù)。在讀完八位數(shù)據(jù)之后,使SCK變高電平并檢測(cè)DATA引腳是否拉低,以檢測(cè)傳感器是否發(fā)出了確認(rèn)信息ACK。然后,再將SCK恢復(fù)為低電平。具體驅(qū)動(dòng)程序如下: (三)“讀一字節(jié)”驅(qū)動(dòng)程序 在發(fā)布完一組測(cè)量命令之后,單片機(jī)要等待測(cè)量結(jié)束,這個(gè)過程大約需要10/80/120ms,分別對(duì)應(yīng)8/12/14bit測(cè)量,確切時(shí)間由內(nèi)部晶振速度決定,最多有-30%的變化。SHT10通過下拉DATA至電平并進(jìn)入空閑模式表示測(cè)量結(jié)束。單片機(jī)在再次觸發(fā)SCK時(shí)鐘前必須等待這個(gè)“數(shù)據(jù)備妥”信號(hào)來讀出數(shù)據(jù)。(默認(rèn)溫度測(cè)量14bit,濕度測(cè)量12bit),另外,還有一字節(jié)的CRC,用于循環(huán)冗余校驗(yàn)。濕度測(cè)量時(shí)序圖如下: 根據(jù)上述濕度測(cè)量時(shí)序圖可以類推溫度測(cè)量時(shí)序圖(區(qū)別在于默認(rèn)情況下溫度值比濕度值多2bit),并由時(shí)序圖可寫出具體控制時(shí)序,如下: ? 六、測(cè)量結(jié)果轉(zhuǎn)換 測(cè)量結(jié)果轉(zhuǎn)換過程中使用的參數(shù)與供電電壓有關(guān),總控制程序中的轉(zhuǎn)換代碼僅適用于5V供電時(shí)進(jìn)行轉(zhuǎn)換,其他工作電壓下的轉(zhuǎn)換關(guān)系如下圖所示: ? 七、總控制程序 八、Proteus仿真圖的連接及結(jié)果 ? ? ? ? 左肩理想右肩擔(dān)當(dāng),君子不怨永遠(yuǎn)不會(huì)停下腳步! ? ? ? ? ? ? ? ? ? ? ?proteus濕度傳感器:Proteus 基于Arduino DHT11溫濕度傳感器仿真實(shí)驗(yàn)  第2張

      proteus濕度傳感器:SHT11溫濕度傳感器的proteus仿真與程序源碼

      我最近做項(xiàng)目,接觸到了sht11溫濕度傳感器,分享給大家
      仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
      單片機(jī)源程序如下:
      #include

      void LCD_init(void)
      {
      delay_n10us(10);
      LCD_write_command(0x38);//設(shè)置8位格式,2行,5x7
      delay_n10us(10);
      LCD_write_command(0x0c);//整體顯示,關(guān)光標(biāo),不閃爍
      delay_n10us(10);
      LCD_write_command(0x06);//設(shè)定輸入方式,增量不移位
      delay_n10us(10);
      LCD_write_command(0x01);//清除屏幕顯示
      delay_n10us(100);       //延時(shí)清屏,延時(shí)函數(shù),延時(shí)約n個(gè)10us
      }

      void LCD_write_command(uchar dat)
      {
      delay_n10us(10);
      LCD_RS=0;         //指令
      LCD_RW=0;         //寫入
      LCD_E=1;          //允許
      LCD_DB=dat;
      delay_n10us(10);  //實(shí)踐證明,我的LCD1602上,用for循環(huán)1次就能完成普通寫指令。
      LCD_E=0;
      delay_n10us(10);  //實(shí)踐證明,我的LCD1602上,用for循環(huán)1次就能完成普通寫指令。
      }
      void LCD_write_data(uchar dat)
      {
      delay_n10us(10);
      LCD_RS=1;          //數(shù)據(jù)
      LCD_RW=0;          //寫入
      LCD_E=1;           //允許
      LCD_DB=dat;
      delay_n10us(10);
      LCD_E=0;
      delay_n10us(10);
      }
      void LCD_disp_char(uchar x,uchar y,uchar dat)
      {
       uchar address;
       if(y==1)
      address=0x80+x;
       else
      address=0xc0+x;
       LCD_write_command(address);
       LCD_write_data(dat);
      }
      void LCD_disp_str(uchar x,uchar y,uchar *str)
      {
       uchar address;
       if(y==1)
      address=0x80+x;
       else
      address=0xc0+x;
       LCD_write_command(address);
       while(*str!='?')
       {
      LCD_write_data(*str);
      str++;
       }
      }
      void delay_n10us(uint n)  //延時(shí)n個(gè)10us@12M晶振
      {
      uint i;
      for(i=n;i>0;i--)
      {
      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
      }
      }
      /
      void s_transstart(void);               //啟動(dòng)傳輸函數(shù)
      void s_connectionreset(void);          //連接復(fù)位函數(shù)
      char s_write_byte(unsigned char value);//DHT90寫函數(shù)
      char s_read_byte(unsigned char ack);   //DHT90讀函數(shù)
      char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);//測(cè)量溫濕度函數(shù)
      void calc_dht90(float *p_humidity ,float *p_temperature);//溫濕度補(bǔ)償

      void s_transstart(void)
      // generates a transmission start
      //       _____         ________
      // data:      |_______|
      //           ___     ___
      // SCK : ___|   |___|   |______
      {
        DATA=1; SCK=0;                   //Initial state
        _nop_();
        SCK=1;
        _nop_();
        DATA=0;
        _nop_();
        SCK=0;
        _nop_();_nop_();_nop_();
        SCK=1;
        _nop_();
        DATA=1;
        _nop_();
        SCK=0;
      }

      void s_connectionreset(void)
      // communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart
      //       _____________________________________________________         ________
      // data:                                                      |_______|
      //          _    _    _    _    _    _    _    _    _        ___     ___
      // SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|   |___|   |______
      {
       unsigned char i;
       DATA=1; SCK=0;                    //Initial state
       for(i=0;i

      char s_read_byte(unsigned char ack)
      // reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
      {
       unsigned char i,val=0;
       DATA=1;                           //release DATA-line
       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 approx. 3 us
      SCK=0;
       }
       if(ack==1)DATA=0;                 //in case of "ack==1" pull down DATA-Line
       else DATA=1;                      //如果是校驗(yàn)(ack==0),讀取完后結(jié)束通訊
       _nop_();_nop_();_nop_();          //pulswith approx. 3 us
       SCK=1;                            //clk #9 for ack
       _nop_();_nop_();_nop_();          //pulswith approx. 3 us
       SCK=0;
       _nop_();_nop_();_nop_();          //pulswith approx. 3 us
       DATA=1;                           //release DATA-line
       return val;
      }

      char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
      // makes a measurement (humidity/temperature) with checksum
      {
       unsigned error=0;
       unsigned int i;

      s_transstart();                   //transmission start
       switch(mode){                     //send command to sensor
      case TEMP  : error+=s_write_byte(MEASURE_TEMP); break;
      case HUMI  : error+=s_write_byte(MEASURE_HUMI); break;
      default     : break;
       }
       for (i=0;i

      下一篇: PLC、DCS、FCS三大控

      上一篇: 電氣控制線路圖控制原

      推薦產(chǎn)品

      更多
      主站蜘蛛池模板: 四月婷婷七月婷婷综合| 亚洲AⅤ优女AV综合久久久| 亚洲伊人久久综合中文成人网| 曰韩人妻无码一区二区三区综合部 | 国产成人综合野草| 亚洲综合国产精品第一页| 亚洲国产综合人成综合网站00| 亚洲综合激情视频| 久久综合五月丁香久久激情| 丁香婷婷亚洲六月综合色| 伊人激情久久综合中文字幕| 97se亚洲国产综合自在线| 国产综合精品蜜芽| 日日狠狠久久偷偷色综合96蜜桃| 久久综合狠狠色综合伊人| 色综合天天综合网国产成人| 伊人情人综合成人久久网小说| 久久婷婷五月综合成人D啪| 天天欲色成人综合网站| 亚洲国产品综合人成综合网站| 在线亚洲97se亚洲综合在线| 狠狠综合亚洲综合亚洲色| 中文字幕人成无码人妻综合社区| 久久综合噜噜激激的五月天| 综合久久给合久久狠狠狠97色| 色噜噜狠狠狠狠色综合久一| 国产成人综合亚洲| 亚洲国产免费综合| 久久九色综合九色99伊人| 国产综合精品蜜芽| 久久婷婷五月国产色综合| 国内偷自视频区视频综合| 久久精品亚洲综合专区| 久久丝袜精品综合网站| 久久综合久久自在自线精品自| 麻豆狠色伊人亚洲综合网站| 狠狠色丁香久久婷婷综合_中 | 久久综合亚洲色HEZYO国产| 亚洲色欲久久久综合网东京热| 久久综合香蕉久久久久久久| 久久综合亚洲色HEZYO社区|