#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
// กำหนดขา Pin
#define DHTPIN 19
#define DHTTYPE DHT22
#define RELAY1 12
#define RELAY2 13
#define RELAY3 14
#define TRIG_PIN 5
#define ECHO_PIN 4
#define PIR_PIN 15
#define LED_PIN 27
// ประกาศตัวแปรอุปกรณ์
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 rtc;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY3, LOW);
digitalWrite(LED_PIN, LOW);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
lcd.init();
lcd.backlight();
dht.begin();
if (!rtc.begin()) {
while (1);
}
}
void loop() { // เริ่มต้นฟังก์ชัน loop
DateTime now = rtc.now();
float h = dht.readHumidity();
float t = dht.readTemperature();
int pirStatus = digitalRead(PIR_PIN);
// คำนวณระยะทาง Ultrasonic
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distanceCm = duration * 0.034 / 2;
// เงื่อนไข LED จาก PIR
if (pirStatus == HIGH) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
// จัดการสถานะ Relay
String r1_st, r2_st, r3_st;
if (t > 30) { digitalWrite(RELAY1, HIGH); r1_st = "ON "; }
else { digitalWrite(RELAY1, LOW); r1_st = "OFF"; }
if (h < 50) { digitalWrite(RELAY2, HIGH); r2_st = "ON "; }
else { digitalWrite(RELAY2, LOW); r2_st = "OFF"; }
if (distanceCm < 30) { digitalWrite(RELAY3, HIGH); r3_st = "ON "; }
else { digitalWrite(RELAY3, LOW); r3_st = "OFF"; }
// แสดงผลบนจอ LCD 2004
lcd.setCursor(0, 0);
char timeBuf[20];
sprintf(timeBuf, "Time: %02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.print(timeBuf);
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distanceCm, 1);
lcd.print(" cm. ");
lcd.setCursor(0, 2);
lcd.print("T:"); lcd.print(t, 1); lcd.print("C H:"); lcd.print(h, 1); lcd.print("% ");
lcd.setCursor(0, 3);
lcd.print("R1:"); lcd.print(r1_st);
lcd.print(" R2:"); lcd.print(r2_st);
lcd.print(" R3:"); lcd.print(r3_st);
delay(500);
} // ปิดฟังก์ชัน loop (จุดที่เคย Error)FAN
PUMP
Motor