一、DHT11溫濕度傳感器電氣特性
官網(wǎng):https://learn.adafruit.com/dht
??DHT11 數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC 測(cè)溫元件,并與一個(gè)高性能8 位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11 傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式儲(chǔ)存在OTP 內(nèi)存中,傳感器內(nèi)部在檢測(cè)信號(hào)的處理過程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡(jiǎn)易快捷。超小的體積、極低的功耗,信號(hào)傳輸距離可達(dá)20 米以上,使其成為各類應(yīng)用甚至最為苛刻的應(yīng)用場(chǎng)合的最佳選則。
??DHT11 數(shù)字溫濕度傳感器模塊為3 針PH2.0 封裝。連接方便。

二、溫濕度傳感器DHT11封裝形式及接口說明
??建議連接線長(zhǎng)度短于20米時(shí)用5K上拉電阻,大于20米時(shí)根據(jù)實(shí)際情況使用合適的上拉電阻(若購(gòu)買的是已集成的模塊,模塊上已加上拉電阻,以下請(qǐng)忽略),當(dāng)然,如果你想要精簡(jiǎn)電路的話, STC增強(qiáng)型單片機(jī)自帶的推挽輸出功能不失為一個(gè)選擇,其相當(dāng)于外接了一個(gè)2k的上拉電阻,但在設(shè)計(jì)電路時(shí)需注意:整個(gè)單片機(jī)的電流推薦不超過55mA,即從MCU-VCC流入的電流不超過55mA,從MCU-GND流出的電流不超過55mA,整體流入、流出電流均不超過55mA,封裝尺寸及典型應(yīng)用電路圖如下圖所示。

DHT11溫濕度傳感器典型應(yīng)用電路


三、電路原理圖


DHT11的正極與5V電源接口相連,負(fù)極與GND相連,中間的數(shù)據(jù)接口與8號(hào)引腳相連。
注意:
模塊上 標(biāo)有-號(hào)的接負(fù)極,中間接正極,S接數(shù)據(jù)口8。
四、代碼
https://github.com/adafruit/DHT-sensor-library
下載dht11庫(kù)文件:
將dht11壓縮文件解壓到arduino安裝文件夾的libraryies中。
包括一個(gè)頭文件和一個(gè).cpp文件。



#include "Arduino.h"
#include <DHT.h> //引用dht11庫(kù)文件,使得下面可以調(diào)用相關(guān)參數(shù)
#define DHTPIN 8 //定義溫濕度針腳號(hào)為8號(hào)引腳
#define DHTTYPE DHT11 // DHT 11 實(shí)例化一個(gè)對(duì)象
DHT dht(DHTPIN, DHTTYPE);
void setup() { //設(shè)置
Serial.begin(9600); //設(shè)置波特率參數(shù)
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
delay(2000); //在測(cè)量之間等待幾秒鐘。
//讀取溫度或濕度大約需要250毫秒!
//傳感器讀數(shù)也可能長(zhǎng)達(dá)2秒(傳感器速度非常慢)
float h = dht.readHumidity();
//讀取溫度為攝氏度(默認(rèn)值)
float t = dht.readTemperature();
//讀取溫度為華氏溫度(isFahrenheit = true)
float f = dht.readTemperature(true);
//檢查是否有任何讀取失敗并提前退出(再試一次)。
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("無法從DHT傳感器讀?。?));
return;
}
// 以華氏度計(jì)算熱量指數(shù)(默認(rèn)值)
float hif = dht.computeHeatIndex(f, h);
// 以攝氏度計(jì)算熱量指數(shù)(isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
// Humidity濕度
Serial.print(F("Humidity: "));
Serial.print(h);
//Temperature 溫度
Serial.print(F("% Temperature: "));
Serial.print(t);
Serial.print(F("°C "));
Serial.print(f);
//熱度指數(shù) Heat index
Serial.print(F("°F Heat index: "));
Serial.print(hic);
Serial.print(F("°C "));
Serial.print(hif);
Serial.println(F("°F"));
}
