2018年11月12日 星期一

溫溼度量測與LCD顯示


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);  
    }