一.DHT11介紹
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器,采用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),無需復(fù)雜的電路處理。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。
二.DHT11主要參數(shù)
(1)濕度分辨率為8bit,測量精度為±4%RH(25℃),最大的測量范圍為20~90%RH,響應(yīng)時間為6-16秒;
(2)溫度分辨率為8bit,測量精度為±1℃,測量范圍為050℃,響應(yīng)時間為630秒。
(3)傳感器工作電壓范圍為35V,工作電流為0.52.5mA,采樣周期為1s(即每次刷新溫濕度數(shù)據(jù)時間至少1s以上)。
三.DHT11電路圖
電路如圖,Pin1接至VDD,Pin2接至單片機引腳,Pin3懸空,Pin4接至GND。DHT11與MCU的連接線長度短于20米時,DATA引腳需外接5K上拉電阻至VDD。
四.DHT11數(shù)據(jù)格式
DHT11每讀取一次完整的數(shù)據(jù)為40bit的數(shù)據(jù),需要根據(jù)以下格式將濕度和溫度數(shù)據(jù)解析出來。
數(shù)據(jù)格式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù) +8bi溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗和;
其中,高位在前,低位在后;校驗和為前4個字節(jié)的累加和的末8位。
五.DHT11操作時序
1.復(fù)位時序
總線空閑狀態(tài)為高電平,MCU引腳設(shè)置為輸出狀態(tài),把引腳設(shè)置為低電平,延時19ms,然后延時30us,并將引腳設(shè)置為輸入狀態(tài),等待DHT11響應(yīng);從時序看,MCU需要保持引腳低電平必須大于18ms,保證DHT11能檢測到起始信號。
根據(jù)時序進行編程代碼如下:
void dht11_reset(void)
{
// DHT11設(shè)置為輸出模式
dht11_gpio_output();
DHT11_OUT_L;
delay_us(19000);
DHT11_OUT_H;
delay_us(30);
dht11_gpio_input();
}
DHT11接收到MCU的開始信號后, 等待MCU開始信號結(jié)束,然后發(fā)送80us低電平響應(yīng)信號。MCU發(fā)送開始信號結(jié)束后,延時等待20-40us后;然后MCU讀取DHT11的響應(yīng)信號(即DHT11信號置低電平80us后,置為高電平80us);確認DHT11響應(yīng)信號有效后,MCU進入數(shù)據(jù)讀取模式。
u16 dht11_read_data(u8 buffer[5])
{
u16 i = 0;
u8 checksum;
dht11_reset();
if (dht11_scan() == RESET)
{
//MCU讀取DHT11響應(yīng)信號
while (dht11_scan() == RESET);
while (dht11_scan() == SET);
//確認DHT11發(fā)出響應(yīng)信號后,進入數(shù)據(jù)讀取模式
for (i = 0; i < 5; i++)
{
buffer[i] = dht11_read_byte();
}
while (dht11_scan() == RESET);
dht11_gpio_output();
DHT11_OUT_H;
checksum = buffer[0] + buffer[1] + buffer[2] + buffer[3];
if (checksum != buffer[4])
{
// checksum error
return 1;
}
}
return 0;
}
MCU讀取完5個字節(jié)數(shù)據(jù)后,確認DHT11信號是否置為低電平,如果是,此次數(shù)據(jù)讀取完畢;單片機引腳切換到輸出模式,并將引腳電平拉高,釋放總線。
完整的數(shù)據(jù)通信時序如圖:
2.讀取數(shù)據(jù)時序
MCU進入數(shù)據(jù)讀取模式時,判斷數(shù)據(jù)位為0或者為1是通過高電平的時間來判斷。時序如圖:
數(shù)據(jù)線低電平50us后,拉至高電平,高電平時間為26us-28us內(nèi),數(shù)據(jù)位為0;高電平時間為28us-70us內(nèi),數(shù)據(jù)位為1;
數(shù)據(jù)位為‘0’
數(shù)據(jù)位為‘1’
讀數(shù)據(jù)位程序:程序通過在DHT11數(shù)據(jù)線拉至高電平時,延時40us,判斷此時數(shù)據(jù)位引腳的狀態(tài),如果為高電平,則高電平狀態(tài)在28us-70us內(nèi),數(shù)據(jù)位為‘1’;否則為‘0’。
u16 dht11_read_bit(void)
{
while (DHT11_IN == RESET);
delay_us(40);
if (DHT11_IN == SET)
{
while (DHT11_IN == SET);
return 1;
}
else
{
return 0;
}
}
-
電阻
+關(guān)注
關(guān)注
86文章
5514瀏覽量
172030 -
單片機
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635289 -
DHT11濕度傳感器
+關(guān)注
關(guān)注
0文章
13瀏覽量
4788 -
測溫元件
+關(guān)注
關(guān)注
0文章
8瀏覽量
2676
發(fā)布評論請先 登錄
相關(guān)推薦
評論