在Arduino的DHT11模組中有提供溫度與濕度的感測器,有三隻接腳分別為數位訊號腳(S)、VCC、GND。

DHT11模組

要使用程式來控制此模組時必須先上Arduino的網站下載官方所提供的函式庫 DHT.h函式庫下載,進入網站後點選 “Clone or download" >> “Download ZIP",以及Adafruit的驅動程式也是要使用同樣的方式下載完成解壓縮才行。

下載完成後解壓縮,將 “DHT-sensor-library-master" 資料夾放入 /文件/Arduino/libraries 目錄底下即可,如下圖所示,在這個目錄之下要有兩個相關的驅動程式資料夾才行:

接線部分只需要將DHT11模組中S腳位接至Arduino 的第2腳(必須和程式中選擇的腳位相同),VCC與GND分別接至5V與GND。

接線完成後就可以開始寫程式了,


#include "DHT.h"    //載入函式庫
#define DHTPIN 2 //選擇讀取資料的腳位
#define DHTTYPE DHT11 // 在此範例中選用DHT 11

DHT dht(DHTPIN, DHTTYPE); //Initialize DHT sensor

void setup() {
    Serial.begin(9600); //設定鮑率為9600
    Serial.println("DHT11 test!");
    dht.begin(); //啟動DHT
}

void loop() {
    delay(2000); //每2秒鐘更新一次
    float h = dht.readHumidity(); //讀取濕度
    float t = dht.readTemperature(); //讀取攝氏溫度
    float f = dht.readTemperature(true); //讀取華氏溫度

    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("無法從DHT模組讀取資料!");
        return;
    }
    Serial.print("Humidity: "); //在序列監控視窗顯示溫度與濕度
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.print(" *C ");
    Serial.print(f);
    Serial.println(" *F\t");
}

上傳完成後打開序列監控視窗,並將鮑率選擇為9600(必須和程式中相同),

成功在序列監控視窗觀看溫溼度資料後,結合 Unit11:LCD點陣液晶顯示模組操作實習 ,將溫溼度的資訊顯示在LCD模組上。

整合後的程式碼如下:


#include "DHT.h"
#define DHTPIN 2 //選擇讀取資料的腳位
#define DHTTYPE DHT11 // 在此範例中選用DHT 11
#include "Wire.h"
#include "LiquidCrystal_I2C.h"

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
DHT dht(DHTPIN, DHTTYPE); //Initialize DHT sensor

void setup() {
    Serial.begin(9600); //設定鮑率為9600</strong>
    Serial.println("DHTxx test!");
    dht.begin(); //啟動DHT</strong>
    lcd.begin(16,2);
    lcd.backlight();
    delay(2000);
}

void loop() {
    delay(2000); //每2秒鐘更新一次
    float h = dht.readHumidity(); //讀取濕度
    float t = dht.readTemperature(); //讀取攝氏溫度
    float f = dht.readTemperature(true); //讀取華氏溫度

    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("無法從DHT模組讀取資料!");
        return;
    }
    Serial.print("Humidity: "); //在序列監控視窗顯示溫度與濕度
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.print(" *C ");
    Serial.print(f);
    Serial.println(" *F\t");
    //...............................在LCD上顯示溫濕度資訊
    lcd.setCursor(0, 0);
    lcd.print(String("") + "H:" + h + "%");
    lcd.setCursor(0, 1);
    lcd.print(String("") + "T:"+ t + (char)223 + "C");
}

(1739)