10 ต.ค. 2020 เวลา 19:28 • วิทยาศาสตร์ & เทคโนโลยี
Temperature Monitoring With DHT22 & Arduino
DHT22 Sensor Temperature-Humidity
ใช้บอร์ด Arduino UNO เป็นเครื่องวัดและแสดง อุณหภูมิ/ความชื้น บนจอ LCD
* แก้ไข Code ใหม่ เพิ่มการแสดงเครื่องหมาย °C
ค่าความชื้นในบรรยากาศนิยมวัดกันใน 2 รูปแบบดังนี้
1. การวัดความชื้นสัมพัทธ์ (relative humidity) คือ การวัดอัตราส่วน (เป็นร้อยละ) ของปริมาณไอน้ำที่มีอยู่จริงในอากาศในขณะนั้น ต่อ ปริมาณไอน้ำที่อาจจะมีอยู่ได้ เมื่ออากาศนั้น อิ่มตัวด้วยไอน้ำที่อุณหภูมิเดียวกัน หรือ“อัตราส่วนของความดันไอน้ำที่มีอยู่จริง ต่อ ความดันไอน้ำอิ่มตัว” มีหน่วยวัดเป็น % โดยอากาศอิ่มตัวจะมีค่าความชื้นสัมพัทธ์อยู่ที่ 100 % หมายถึงความชื้นที่มีไอน้ำอยู่เต็มอากาศ สังเกตจากช่วงฝนตกใหม่ ๆ อาจจะมีความชื้นที่สูงเกือบ 100%
2. การวัดความชื้นสัมบูรณ์ (absolute humidity) คือการวัดปริมาณของไอน้ำในอากาศเป็นกรัมต่อ อากาศชื้นหนัก 1 กิโลกรัม หรือ อัตราส่วนระหว่างมวลน้ำที่มีอยู่จริง ต่อ ปริมาตรอากาศ
**ในที่นี้เครื่องจะทำการวัดแบบ การวัดความชื้นสัมพัทธ์ มีหน่วยเป็น %RH
อุปกรณ์ที่ต้องมี
1. บอร์ดไมโครคอนโทรลเลอร์ Arduino UNO R3
2. 16x2 LCD Display พร้อมกับบอร์ด I2C Interface
3. DHT22 *Digital Temperature Humidity Sensor AM2302 Measure Module (ตัววัดอุณหภูมิและความชื้น)
4. สายต่อแบบตัวผู้-ตัวเมีย
Arduino Uno R3
DSC22 Digital Temperature and Humidity Sensor for arduino
I2C Interface
16x2 LCD Display
การสร้างรูปแบบที่จะแสดงบนจอ LCD พร้อม Code
Schematics :
Connect the GND with Arduino GND, VCC with 5V pin on Arduino, SDA with A4 pin, and finally SCL with A5 pin, D3 pin to DHT data pin.
Code :
/*
Temperature Monitoring With DHT22 & Arduino
*/
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f, 16, 2); //Module IIC/I2C Interface บางรุ่นอาจจะใช้ 0x27
//รูปแบบสัญลักษณ์องศา
byte tmp[] = {
B01110,
B01110,
B01110,
B01010,
B01010,
B10001,
B10001,
B01110
};
byte hum[] = {
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110
};
byte degree[] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
#define DHTPIN 3 //กำหนด Pin สำหรับขา Data ของ DHT Senser
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // เลือกใช้ เซ็นเซอร์ DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHT22 Senser test!");
dht.begin();
lcd.begin();
lcd.createChar(0, tmp);
lcd.createChar(1, hum);
lcd.createChar(2, degree); //กำหนดสัญลักษณ์องศา
lcd.backlight();//กำหนดให้หน้าจอเปิดไฟพื้นหลัง
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
float hif = dht.computeHeatIndex(f, h);
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: "); //สั่งให้แสดงตัวอักษรที่อยู่ในเครื่องหมายฟันหนูในหน้าต่าง Serial Monitor
Serial.print(h);
Serial.print(" %RH\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.setCursor(0, 0); //กำหนดตำแหน่งตัวอักษรตัวแรกที่เริ่มให้แสดงและกำหนดบรรทัดของหน้าจอ
lcd.print("Temp "); //สั่งให้แสดงตัวอักษรที่อยู่ในเครื่องหมายฟันหนู
lcd.write(0); //แสดงรูปปรอท
lcd.setCursor(9, 0);
lcd.print(t);
lcd.setCursor(14, 0);
lcd.write(2); //แสดงสัญลักษ์องศา
lcd.setCursor(15, 0);
lcd.print("C");
lcd.setCursor(0, 1); //กำหนดตำแหน่งตัวอักษรตัวแรกที่เริ่มให้แสดงและกำหนดบรรทัดที่สองของหน้าจอ
lcd.print("Hum rh ");
lcd.write(1); //แสดงรูปหยดน้ำ
lcd.setCursor(9, 1);
lcd.print(h);
lcd.print(" %");
}
โฆษณา