#電子元件:DHT11溫濕度傳感器
這個傳感器是你學習使用的第一個傳感器之一,因為每個人都有一個很好的應用:建立室內或室外溫度計。
在這裡,你可以看到它安裝在一個分輔板上:
請注意,該傳感器有4個輸出引腳,但我得到的分輔板只有3個(原因是DHT11的引腳3未連接到任何地方 - 別問我為什麼)。
從左邊開始,保持底部的引腳,我們有:
Vdd
,正輸入(+
)Vss
,負輸入(-
)- 輸出信號
輸出是一個持續4ms的40位序列化信號。
這意味著每4ms傳感器發送一次溫度信息,為了讀取它,我們必須獲取值並將其反序列化。
在Arduino程序中,我們使用由Adafruit維護的DHT Sensor Library(這是存儲庫的鏈接),它使我們可以非常簡單地讀取溫度:
你可以使用#include <DHT.h>
將其包含,然後通過傳遞傳感器信號引腳和類型(在這種情況下使用常量DHT11
)初始化DHT
類的對象。
該庫還可以與其他傳感器一起使用,如更精確的
DHT22
和`DHT21。
然後,你可以調用readHumidity()
和readTemperature()
方法以``float`變量的方式獲取值。
readTemperature()
以攝氏度表示該值,但該庫還提供convertCtoF()
方法來獲取華氏值。
該庫還提供了其他方法,例如computeHeatIndex()
。我建議你查看GitHub上的DHT.h
頭文件源代碼(https://github.com/adafruit/DHT-sensor-library/blob/master/DHT.h)。
這個簡單的Arduino程序從DHT11上的信號引腳連接到數字引腳#2,並將其打印到串行監視器上:
#include <DHT.h>
DHT dht(2, DHT11);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("無法讀取數值");
return;
}
Serial.println((String)"濕度:" + h + "%,溫度:" + t + "C");
}
濕度:56.00%,溫度:20.20C
濕度:56.00%,溫度:20.20C
濕度:56.00%,溫度:20.10C
濕度:56.00%,溫度:20.20C