#電子元件: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