1、產品概述 DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器,它應用專用的數字模塊采集技術和溫濕度傳感技術,確保產品具有極高的可靠性和卓越的長期穩定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產品具有品質卓越、超快響應、抗干擾能力強、性價比極高等優點。每個DHT11傳感器都在即為精確的濕度校驗室中進行校準。校準系數以程序的形式存在OTP內存中,傳感器內部在檢測型號的處理過程中要調用這些校準系數。單線制串行接口,使系統集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達20米以上,使其成為給類應用甚至最為苛刻的應用場合的最佳選擇。產品為4針單排引腳封裝,連接方便。 2、技術參數 供電電壓: 3.3~5.5V DC 輸 出: 單總線數字信號 測量范圍: 濕度20-90%RH, 溫度0~50℃ 測量精度: 濕度+-5%RH, 溫度+-2℃ 分 辨 率: 濕度1%RH, 溫度1℃ 互 換 性: 可完全互換 , 長期穩定性: <±1%RH/年 3、應用領域 暖通空調 測試及檢測設備 汽車 數據記錄器 消費品 自動控制 氣象站 家電 濕度調節器 醫療 除濕器 4、特性 相對濕度和溫度測量 全部校準,數字輸出 卓越的長期穩定性 無需額外部件 超長的信號傳輸距離 超低能耗 4引腳安裝 完全互換 5、常見電路說明 建議連接線長度短于20米時用5K上拉電阻,大于20米時根據實際情況使用合適的上拉電阻 6、電源引腳描述 DHT11的供電電壓為 3-5.5V。傳感器上電后,要等待 1s 以越過不穩定狀態在此 期間無需發送任何指令。電源引腳(VDD,GND)之間可增加一個100nF 的電容,用以去 耦濾波。 7、串行接口(單線雙向) DATA 用于微處理器與 DHT11之間的通訊和同步,采用單總線數據格式,一次 通訊時間4ms左右,數據分小數部分和整數部分,具體格式在下面說明,當前小數 部分用于以后擴展,現讀出為零.操作流程如下: 一次完整的數據傳輸為40bit,高位先出。 數據格式:8bit濕度整數數據 +8bit濕度小數數據 +8bi溫度整數數據+8bit溫度小數數據+8bit校驗和 數據傳送正確時校驗和數據等于“8bit濕度整數數據+8bit濕度小數數據 +8bi溫度整數數據+8bit溫度小數數據”所得結果的末8位。 用戶MCU發送一次開始信號后,DHT11從低功耗模式轉換到高速模式,等待主 機開始信號結束后,DHT11發送響應信號,送出40bit的數據,并觸發一次信號采集, 用戶可選擇讀取部分數據.從模式下,DHT11接收到開始信號觸發一次溫濕度采集, 如果沒有接收到主機發送開始信號,DHT11不會主動進行溫濕度采集.采集數據后 轉換到低速模式。 8、封裝信息 9、引腳描述: 10、看一下我們實驗所用到的模塊:
連接方法: 測溫濕度模塊信號引腳放在arduino模擬0上,蜂鳴器和LED燈模塊放在arduino數字引腳7,8上,所有模塊的地和電源都直接接在arduino上的地和電源就可以了。完成了硬件部分接下來是代碼的編寫了,下面我就把調試出來的代碼寫出來給大家作參考: #define DHT11_PIN 0 int Led=8; int Buzzer=7; byte read_dht11_dat() { byte i = 0; byte result = 0; for(i=0;i<8;i++) { while(!(PINC&_BV(DHT11_PIN))); delayMicroseconds(30); if(PINC&_BV(DHT11_PIN)) result|=(1<<(7-i)); while((PINC&_BV(DHT11_PIN))); } return result; } void setup() { DDRC|=_BV(DHT11_PIN); PORTC|=_BV(DHT11_PIN); pinMode(Led,OUTPUT); pinMode(Buzzer,OUTPUT); Serial.begin(19200); Serial.println("Ready"); } void loop() { byte dht11_dat[5]; byte dht11_in; byte i; PORTC &= ~_BV(DHT11_PIN); delay(18); PORTC|=_BV(DHT11_PIN); delayMicroseconds(40); DDRC &= ~_BV(DHT11_PIN); delayMicroseconds(40); dht11_in = PINC & _BV(DHT11_PIN); if(dht11_in) { Serial.println("dht11 start condition 1 not met"); return; } delayMicroseconds(80); dht11_in=PINC & _BV(DHT11_PIN); if(!dht11_in) { Serial.println("dht11 start condition 2 not met"); return; } delayMicroseconds(80); for(i=0;i<5;i++) dht11_dat[ i]=read_dht11_dat(); DDRC|=_BV(DHT11_PIN); PORTC|=_BV(DHT11_PIN); byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3]; if(dht11_dat[4]!=dht11_check_sum) { Serial.println("DHT11 checksum error"); } Serial.print("Current humdity= "); Serial.print(dht11_dat[0],DEC); Serial.print("."); Serial.print(dht11_dat[1],DEC); Serial.print("%"); Serial.print("temperature = "); Serial.print(dht11_dat[2],DEC); Serial.print("."); Serial.print(dht11_dat[3],DEC); Serial.println("C"); if(dht11_dat[0]==25) digitalWrite(Led,HIGH); else digitalWrite(Led,LOW); if(dht11_dat[0]==28) digitalWrite(Buzzer,LOW); else digitalWrite(Buzzer,HIGH); delay(2000); } 調試結果,大家可以打開arduino的窗口,在上面可以看到窗口里顯示著溫濕度,溫度和濕度達到我們設置的結果時,蜂鳴器和LED燈模塊會有反應。 這是調試的結果:
實驗遇到的各種問題總結: 1、 這個傳感器資料上說可以讀到小數位,可我怎么也讀不出來哦? 答:DHT11無小數部份,讀回數據只有低8位有效,且是整數,低8位的最高位表示負號。 2、 溫度和度濕的精度是否是一樣的呢? 答:溫度的精度是1%,濕度的精度達不到1%,只有正負5%。分辨率和精度是兩回事。 3、 DHT11的溫漂是怎么樣的? 答:你都不知道dh11多么漂,漂的太厲害了,個人感覺這個模塊不適宜用來做溫度濕度測量。 |