2016年5月15日 星期日

「Android] LCD + DHT11 顯示溫溼度


前言



小弟用的LCD是 DFRoBOT LCD Keypad Shield For Arduino





它是一片16*2的LCD + 6個Button , Button 主要是靠A0在接收,

每個Button 按下會收到不同的數值,本篇暫且不會用到。

基本上這片LCD KEYPad Shield是可以直接疊在Arduino上的,

只是它沒有上層的接口,所以它必須是最頂層了,上圖中我一共

疊了Arduino UNO + Wi-Fi Shield + LCD Pad Shield  。

DHT11 模組












































這顆DHT11 模組己經上了一顆10K電阻(左手邊那顆103的就是SMD封裝的10K)

注意一下,這一款模組很多人做,可是我看了網路上幾篇,3支接角拉出來的順序

有不太一樣,注意一下,像是 (- )應該是GND沒錯,S是DATA,可是VCC就沒有標了

請不要直接套用小弟的順序,看一下模組的說明書。


在本篇中,DATA要接到Arduino 的Pin2


DHT11 讀取的程式,請參考這一篇 ,只需要動手改一下,把

#define DHTTYPE DHT22   --》 #define DHTTYPE DHT11



LCD


LCD的資料接腳( 必須程式中定義)

LCD        Arduino

RS                8

ENABLE      9

D4               4

D5               6
D7               7




16 *2 表示一行可以顯示16個英文字母,共2行32個。

如果你需要顯示中文,可能需要找支援"繁體"中文的LCD。

一片可能要4~500塊。(參考資料中的連結有 )

一般常見的Arduino LCD模組是1602 ,這塊shield也是,只是多搭配了BUTTON


控制LCD主要還是透過 LiquidCrystal Library , Arduino IDE有內建,不必額外下載


程式碼

#include "DHT.h"
//LCD Lib
#include <LiquidCrystal.h>

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT11   // DHT 11
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
//LCD Pin
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
  //init Serial Port 
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  //init dht11 
  dht.begin();
  //set LCD  type  16 * 2 
  lcd.begin(16, 2);
  //LCD  Show init Text
  lcd.print("DHT11 LCD DEMO");
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);
  //Serial Port print Data
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.print(" *C ");
  Serial.print(hif);
  Serial.println(" *F");

  //LCD SHow Data 
   lcd.clear();
  //Line 0
  lcd.setCursor(0, 0);
  lcd.print("Humidity:");
  lcd.print(h);
  lcd.print("%");

  //line 1
  lcd.setCursor(0, 1);
  lcd.print("Temp:");
  lcd.print(t);
  lcd.print(" *C");
}



執行結果





參考資料



LiquidCrystal Library

https://www.arduino.cc/en/Reference/LiquidCrystal


Arduino 上面使用 Hitachi HD44780U 1602 LCD 點陣液晶模組

http://blog.gtwang.org/iot/ywrobot-arduino-lcm-1602-iic-v1-lcd-display/


Arduino 128X64 LCD 繁體中文 字庫 + 圖形




新手 Arduino + DFRobot LCD Keypad Shield


沒有留言:

張貼留言