Basic Tutorial for Arduino, 入門篇

【Arduino 入門教學】第 13 篇:DHT11 溫濕度感測器實作!輕鬆讀取環境溫度與濕度資料

💡 實驗說明:什麼是 DHT11 溫濕度感測器?

DHT11 是一款相當經典且性價比極高的數位溫濕度感測元件。它內部整合了電容式感濕元件與 NTC 測溫元件,並連結一個高性能 8 位元單晶片,能將量測到的溫濕度數據轉換為數位訊號輸出。

🛒 市面上 DHT11 的兩種型態比較:

在購買或使用 DHT11 時,常見有以下兩種規格:

  1. 單純 DHT11 裸件(4 針腳):需自行在 DATA 訊號腳與 VCC 之間加接一顆 4.7kΩ~10kΩ 的上拉電阻(Pull-up Resistor)。

  2. 帶背板的 DHT11 模組(3 針腳):背板上已內建上拉電阻與濾波電容,僅需引出 VCCGNDDATA 3 條線,方便且不易接錯,最推薦新手使用!(本範例採用此版本)

📊 DHT11 核心規格參數:

  • 濕度量測範圍:20% ~ 90% RH(精度 ±5%)

  • 溫度量測範圍:0 ~ 50℃(精度 ±2℃)

  • 工作電壓範圍:3.3V ~ 5V

  • 採樣頻率:最高 0.5Hz(建議每 2 秒以上讀取一次資料,不可過於頻繁)

🛠️ 實驗材料清單

進行本實驗前,請準備以下硬體元件:

  • Arduino Uno R3 開發板 × 1

  • USB 傳輸線 × 1

  • DHT11 溫濕度感測模組(3-Pin 帶背板版) × 1

  • 杜邦線(母對公) × 3 條

🛒 新手必備推薦:

想一次購齊 DHT11 與多種常用感測器?歡迎前往選購 米羅科技程式學習套件組,一次滿足實作需求!

👍爆款推薦:程式學習套件組

購買網址:shop.mirotek.com.tw

🔌 電路接線說明(Circuit Wiring)

DHT11 模組共有 3 個腳位,請依照下表與 Arduino Uno 進行連接:

DHT11 模組腳位標示符號連接至 Arduino Uno 腳位
電源正極VCC / +5V3.3V
數據訊號腳DATA / Out / SDigital Pin 2
電源負極GND / -GND

⚠️ 重要提醒:接線時請務必對照 DHT11 模組背板上的 +- 正負極標示!若將正負極接反,極可能導致 DHT11 內部晶片過熱燒毀。

 

📦 安裝 DHT11 程式庫(Library)

為簡化程式碼撰寫,本教學使用 SimpleDHT 程式庫:

  1. 打開 Arduino IDE

  2. 點選上方選單的 「草稿碼」➔「匯入程式庫」➔「管理程式庫」(或按快捷鍵 Ctrl + Shift + I)。

  3. 在右上角搜尋欄輸入 SimpleDHT

  4. 找到 SimpleDHT 項目後,點擊右下角的 「安裝」 按鈕完成安裝。

💻 Arduino 程式碼範例(Code Example)

程式庫安裝完成後,請將以下程式碼複製並燒錄至您的 Arduino Uno 中:

/*
 * Arduino 入門教學 第13篇:DHT11 溫濕度感測器讀取範例
 * 搭配 SimpleDHT 程式庫使用
 */

#include <SimpleDHT.h>        // 引用 SimpleDHT 程式庫

int pinDHT11 = 2;            // 定義 DHT11 DATA 接頭連接至 Digital Pin 2
SimpleDHT11 dht11;           // 建立 SimpleDHT11 物件

void setup() {
  Serial.begin(9600);        // 初始化序列埠通訊,鮑率設定為 9600 bps
}

void loop() {
  byte temperature = 0;      // 儲存溫度變數
  byte humidity = 0;         // 儲存濕度變數
  int err = SimpleDHTErrSuccess;

  Serial.println("=================================");
  
  // 嘗試讀取 DHT11 數據
  if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err=");
    Serial.println(err);
    delay(1000);             // 若讀取失敗,等待 1 秒後重試
    return;
  }
  
  // 成功讀取後,將溫濕度數值輸出至序列埠監視器
  Serial.print("Humidity = ");
  Serial.print((int)humidity);
  Serial.print("% , ");
  Serial.print("Temperature = ");
  Serial.print((int)temperature);
  Serial.println(" *C");
  
  delay(3000);               // 每 3 秒讀取並更新一次數據(符合採樣時間限制)
}

🔍 程式重點解析(Code Breakdown)

  • #include <SimpleDHT.h>:匯入所需的 DHT11 函數庫。

  • dht11.read(pinDHT11, &temperature, &humidity, NULL):呼叫程式庫讀取函式,將 Pin 2 傳回的溫濕度數值分別存入 temperaturehumidity 變數中。

  • delay(3000);:因為 DHT11 的反應速度較慢,每次讀取之間至少需間隔 2 秒以上,此處設定為 3 秒以確保數據獲取穩定。

🎯 實驗成果與測試步驟

  1. 成功將程式碼燒錄至 Arduino Uno。

  2. 打開 Arduino IDE 的 「序列埠監視器(Serial Monitor)」(右側放大鏡圖示)。

  3. 將右下角鮑率設定為 9600 baud

  4. 您將會看到畫面上每隔 3 秒印出當前環境的溫度(℃)與濕度(%)數據!

  5. 試試看:用手稍微捏住 DHT11 感測器,或對它輕輕吹氣,觀察序列監視器上的溫度與濕度數值是否開始上升!

📚 延伸閱讀與相關課程

相關文章