#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 13 // ขาที่เชื่อมต่อกับเซ็นเซอร์ DHT
#define DHTTYPE DHT22 // ใช้เซ็นเซอร์ DHT22 (สามารถเปลี่ยนเป็น DHT11 ได้)
#define RELAY_PIN 12 // ขาที่เชื่อมต่อกับรีเลย์
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
float temperature; // ตัวแปรเก็บอุณหภูมิ
float humidity; // ตัวแปรเก็บความชื้น
float tempThreshold = 30.0; // กำหนดอุณหภูมิสูงสุด (เช่น 30 องศาเซลเซียส)
float humidityThreshold = 70.0; // กำหนดความชื้นสูงสุด (เช่น 70%)
void setup() {
// เริ่มต้นการสื่อสารกับ Serial Monitor
Serial.begin(115200);
// เริ่มต้นการใช้งานเซ็นเซอร์ DHT
dht.begin();
lcd.init();
lcd.backlight();
// กำหนดขารีเลย์เป็น OUTPUT
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // รีเลย์เริ่มต้นอยู่ในสถานะ OFF
}
void loop() {
// รอให้เซ็นเซอร์ DHT ได้ค่าครบ
delay(2000); // รอ 2 วินาที
// อ่านค่าอุณหภูมิและความชื้นจากเซ็นเซอร์ DHT
temperature = dht.readTemperature(); // อ่านอุณหภูมิ (เซลเซียส)
humidity = dht.readHumidity(); // อ่านความชื้นสัมพัทธ์
// เช็คว่าอ่านค่าได้ถูกต้องหรือไม่
if (isnan(temperature) || isnan(humidity)) {
Serial.println("ไม่สามารถอ่านค่าจากเซ็นเซอร์ได้!");
return;
}
// แสดงผลอุณหภูมิและความชื้น
Serial.print("อุณหภูมิ: ");
Serial.print(temperature);
Serial.print(" °C ความชื้น: ");
Serial.print(humidity);
Serial.println(" %");
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.setCursor(6,0);
lcd.print(temperature);
lcd.setCursor(0,1);
lcd.print("Humi:");
lcd.setCursor(6,1);
lcd.print(humidity);
// ตรวจสอบเงื่อนไขอุณหภูมิและความชื้น
if (temperature > tempThreshold || humidity > humidityThreshold) {
// ถ้าอุณหภูมิหรือความชื้นเกินที่กำหนด ให้เปิดรีเลย์
digitalWrite(RELAY_PIN, HIGH);
Serial.println("รีเลย์ทำงาน (เปิด)");
} else {
// ถ้าอุณหภูมิหรือความชื้นอยู่ในเกณฑ์ปกติ ให้ปิดรีเลย์
digitalWrite(RELAY_PIN, LOW);
Serial.println("รีเลย์หยุดทำงาน (ปิด)");
}
}