本文使用的溫濕度感測元件是 DHT-11,可用來偵測週邊環境空氣中的溫度及濕度,感測元件本身會將溫度及濕度資訊以數位方式從資料 PIN 腳傳回。

DHT11 是用電阻方式感應濕度,並用 NTC 方式感應溫度,DHT 內本來就有一顆 8 位元MCU,MCU 的工作就是把感測到的溫度、濕度,以數位信號方式,透過 2 號腳位傳遞出去,所以其實那顆 MCU 也內建類比轉數位功效(ADC),而溫濕度感測後的相關校準與係數,其實就燒錄在 MCU 的程式內,不過也無法更改了,因為是 OTP(One Time Program),燒寫一次就不能再更動程式內容。

本文的範例程式使用兩個函數庫來簡化開發流程,範例程式利用序列埠監控視窗顯示傳感器回傳的溫濕度資訊。文末有 DHT11 傳感器的工作原理,有興趣的同學可以從函數庫中的 DHT11.cpp 去理解溫濕度是如何被取得的。

電路示意圖

DHT11 Circuit

傳感器規格

引入函數庫

草稿碼 –> 匯入程式庫 –> 管理程式庫

Import Library

分別安裝 Adafruit Unified Sensor 和 DHT sensor library Import Library Import Library

範例程式

// 引入溫溼度函數庫
#include <DHT.h>

// 定義 DHT 傳感器型號為 DHT11
#define DHT_Type DHT11

// 定義資料PIN腳
#define DHT11_PIN 7

// 宣告物件
DHT DhtObj(DHT11_PIN, DHT_Type);

void setup()
{
Serial.begin(9600);
delay(3000);
}

void loop()
{
Serial.print("Humidity Value = ");
Serial.print(DhtObj.readHumidity());
Serial.print("% , ");

Serial.print("Temperature Value = ");
Serial.print(DhtObj.readTemperature());
Serial.println("C ");

delay(2000);
}

DHT-11 傳感器工作原理

DHT11工作原理

  1. Arduino 給 DHT11 輸出低電平 >18ms(此處單位為毫秒,其餘皆為微秒)
  2. Arduino 給 DHT11 輸出高電平 20~40μs
  3. DHT11 反饋低、高電平各 80μs
  4. DHT11 反饋低、高電平各 80μs
  5. DHT11 反饋低電平 50μs,標誌第一個 bit 馬上就要輸出了
  6. 如果高電平持續 26~28 μs,代表 ‘0’; 如果高電平持續 70μs,代表 ‘1’
  7. DHT11 反饋低電平 50μs,標誌第一個 bit 馬上就要輸出了
  8. 如果高電平持續 26~28 μs,代表 ‘0’; 如果高電平持續 70μs,代表 ‘1’

..(5,6,7,8 的動作一共會輸出 40 個 bit)..

參考資料