[演練功能]
1. 測量溫濕度並將量測得知的溫濕度顯示於序列監控視窗中。
2. 測量溫濕度並將量測得知的溫濕度顯示於LCD模組中。
[模組材料]
1. Arduino Nanox 1
2. Nano 擴張板 x 1
3. DHT11溫溼度測量模組 x1
4. LCD模組 2004A x1
5. I2C匯流排 x1(簡化LCD模組控制線路)
6. 杜邦連接線 x 7條
[[DHT11溫濕度測量模組]]
* Supply voltage: 3.3 ~ 5.5V DC
* Output: single-bus digital signal
* Measuring range: Humidity 20-90% RH, Temperature 0 ~ 50 ℃
* Accuracy: Humidity + -5% RH, temperature + -2 ℃
* Resolution: Humidity 1% RH, temperature 1 ℃
* Long-term stability: <± 1% RH / Year
[[LCD模組]]
- 此次實驗的顯示模組採用 2004A,此款LCD模組是最基本、常見的字元型LCD,使用的電壓為5V,4行顯示,每行可顯示20個字元。
- 為了簡化顯示模組配線,另配合I2C匯流排來通訊傳輸,因此最終的LCD顯示模組只有四隻接腳,分別為Vcc、GND、SDA、SCL。
- I2C匯流排能夠讓兩個裝置之間以穩定、高速、雙向的方式只使用兩條線來進行通訊,一條時脈線(SCL)和一條數據線(SDA),所以I2C匯流排所使用的通訊協定也被稱之為「雙線」通訊協定。
演練一:利用DHT11模組測量溫濕度,並將量測得知的溫濕度顯示於序列監控視窗中
#include <DHT.h> //https://github.com/adafruit/DHT-sensor-library #define DHTPIN 3 //設定DHT的接腳 #define DHTTYPE DHT11 //DHT 11 定義DHT的類型為DHT11 DHT myDHT(DHTPIN, DHTTYPE); //建立溫溼度模組物件 void setup() { Serial.begin(9600); delay(500); Serial.println("溫溼度測試\n"); delay(3000); } void loop() { //讀取濕度 float h = myDHT.readHumidity(); //讀取攝氏溫度 float t = myDHT.readTemperature(); //讀取華氏溫度 float f = myDHT.readTemperature(true); //輸出溫溼度資訊 Serial.print("濕度 = "); Serial.print(h); Serial.print("% "); Serial.print("攝氏 = "); Serial.print(t); Serial.print("C ; 華氏 = "); Serial.print(f); Serial.println("F"); delay(2000); }
演練二:利用DHT11模組測量溫濕度,並將量測得知的溫濕度顯示於LCD模組中
#include <DHT.h> //https://github.com/adafruit/DHT-sensor-library #define DHTPIN 3 //設定DHT的接腳 #define DHTTYPE DHT11 //DHT 11 定義DHT的類型為DHT11 DHT myDHT(DHTPIN, DHTTYPE); //建立溫溼度模組物件 #include <LCD.h> #include <LiquidCrystal_I2C.h> // 設定 LCD I2C 位址 // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); void setup() { // 初始化 LCD,一行 20 的字元,共 4 行,預設開啟背光 lcd.begin(20, 4); // 輸出啟動訊息 lcd.setCursor(0, 0); // 設定游標位置在第一行行首 lcd.print("SYSTEM START!!"); delay(500); lcd.clear(); //顯示清除 lcd.print("DHT Sensor Test ..."); myDHT.read(); delay(2000); } void loop() { //讀取濕度 float h = myDHT.readHumidity(); //讀取攝氏溫度 float t = myDHT.readTemperature(); //讀取華氏溫度 float f = myDHT.readTemperature(true); //輸出溫溼度資訊 lcd.setCursor(0, 1); // 設定游標位置在第二行行首 lcd.print("Humidity: "); lcd.setCursor(10, 1); // 設定游標位置在第二行,11的位置 lcd.print(h); lcd.print(" %"); lcd.setCursor(0, 2); // 設定游標位置在第三行行首 lcd.print("Temp : "); lcd.setCursor(7, 2); // 設定游標位置在第三行,8的位置 lcd.print(t); lcd.print(" C"); lcd.setCursor(7,3); // 設定游標位置在第三行,8的位置 lcd.print(f); lcd.print(" F"); delay(2000); }