Arduino讀取DHT sensor資料後可以輸出到com port監視畫面,

但這樣使用上很不方便,所以底下程式將讀取資料輸出到LCD上:

 

/*
使用1602A I2C LCD模組及函式庫
使用DHT11 Sensor讀取溫度與濕度
LCD I2C Library,從這裡可以下載:
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
本程式使用Newliquidcrystal_1.3.5版函式庫
作者:Lu yaku
日期:2018.04.15
*/

#include <Wire.h>               
#include <LiquidCrystal_I2C.h>  

// DHT sensor系列程式庫下載
// http://github.com/adafruit/DHT-sensor-library 
// 程式庫名稱為 DHT-sensor-library-master
// 注意:只下載此程式庫的話,編譯範例程式會出現錯誤,需下載以下程式庫並放入Arduino函式庫中
// https://github.com/adafruit/Adafruit_Sensor
// 程式庫名稱為 Adafruit_Sensor-master

#include "DHT.h" 
#define DHTPIN 2    
#define DHTTYPE DHT11   

// 初始化 DHT sensor
DHT dht(DHTPIN, DHTTYPE);

// 初始化 I2C 1602A LCD,I2C預設地址為0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);


void setup() {

  dht.begin();

  lcd.begin(16, 2);
    // 閃爍三次
  for(int i = 0; i < 3; i++) {
    lcd.backlight(); // 開啟背光
    delay(250);
    lcd.noBacklight(); // 關閉背光
    delay(250);
  }
  lcd.backlight();
  delay(250);
  
// 輸出初始化文字
  lcd.setCursor(0, 0); // 設定游標位置在第一行行首
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0, 1); // 設定游標位置在第二行行首
  lcd.print("LCD is Working!");
  delay(2000);
  
  }

void loop() {
//DHT11建議讀取時間間隔不小於1秒,DHT22建議讀取時間間隔不小於2秒,故設2秒為安全讀取時間
  delay(2000);
//h等於濕度,t等於攝氏溫度,f等於華氏溫度
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  
//檢查sensor是否正常,如不正常則在LCD上顯示 Sensor Error!
  if (isnan(h) || isnan(t) || isnan(f)) {
//    Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.setCursor(0, 0); 
lcd.print("Sensor Error!");
    return;
    }

//預設顯示攝氏溫度
lcd.clear();
lcd.setCursor(0, 0); 
  lcd.print("Humidity:");
  lcd.print(h);
  lcd.print("%");
  lcd.setCursor(4, 1); 
  lcd.print("Temp:");
  lcd.print(t);
  lcd.print((char)0xDF);
  lcd.print("C");

//要顯示華氏溫度拿掉以下遮罩
//lcd.print(f);
//lcd.print((char)0xDF);
//lcd.print("F");
  }

 

接線示意圖

image

 

相關照片

DHT11

 

Arduino

 

系統

 

LCD顯示

arrow
arrow

    呂阿谷 發表在 痞客邦 留言(1) 人氣()