至於DHT11的函式庫選擇也很多,傑森用的是常見的Adafruit DHT Sensor Library,只要從Arduino IDE的程式管理員就能下載。
不過這個函式庫需要安裝另一個Adafruit Unified Sensor Library函式庫,所以也請一併安裝哦。一樣在Arduino IDE的程式管理員就能下載。
再來就是接線囉,DHT模組只有3條線:GND、VCC,還有DATA,這次我們把DATA資料線接到PIN 9;DHT11可以用3.3V或5V,因為5V要留給LCD用,所以我們DHT就接到3.3V吧。
我們先用函式庫附的範例做個簡單的測試,傑森簡化了整支程式,看起來會更簡單。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include "DHT.h" #define DHTPIN 9 #define DHTTYPE DHT11 //#define DHTTYPE DHT22 // DHT 22 如果用的是DHT22,就用這行 //#define DHTTYPE DHT21 // DHT 21 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); //初始化DHT } // setup() void loop() { delay(1000); float h = dht.readHumidity(); //取得濕度 float t = dht.readTemperature(); //取得溫度C //顯示在監控視窗裡 Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" C "); } // loop() |
程式很簡單,從DHT讀取數值,分別可以得到濕度和溫度,然後顯示在監控視窗中。大家可以試著對DHT哈氣,會發現濕度和溫度都會產生變化。
再來就試著把溫濕度顯示到LCD中吧!有關LCD的部份,大家可以參考另一篇教學:Arduino 1602 LCD 最快速範例 ,把LCD的線也都接上吧!
程式再補上LCD的部份就搞定了!主要是把文字的位置設定好,讓顯示出來漂亮一點就可以了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#include <LiquidCrystal_PCF8574.h> #include "DHT.h" #define DHTPIN 9 #define DHTTYPE DHT11 //#define DHTTYPE DHT22 // DHT 22 如果用的是DHT22,就用這行 //#define DHTTYPE DHT21 // DHT 21 LiquidCrystal_PCF8574 lcd(0x3F); // 設定i2c位址,一般情況就是0x27和0x3F兩種 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); //初始化DHT lcd.begin(16, 2); // 初始化LCD lcd.setBacklight(255); lcd.clear(); lcd.setCursor(0, 0); //設定游標位置 (字,行) lcd.print("~ first line."); lcd.setCursor(0, 1); lcd.print("~* second line."); } // setup() void loop() { delay(1000); float h = dht.readHumidity(); //取得濕度 float t = dht.readTemperature(); //取得溫度C Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); lcd.clear(); lcd.setCursor(0, 0); //設定游標位置 (字,行) lcd.print("RH :"); //Relative Humidity 相對濕度簡寫 lcd.setCursor(7, 0); |
#完整程式下載:
http://jmaker.banner.tw/doc/dht.zip