#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include "DHT.h"
// ตั้งค่าขา Pin
#define DHTPIN 19
#define DHTTYPE DHT22
#define TRIG_PIN 5
#define ECHO_PIN 4
#define RELAY1_PIN 12
#define RELAY2_PIN 13
#define RELAY3_PIN 14 // เพิ่ม Relay 3
// ประกาศ Object
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 rtc;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// เริ่มต้นทำงาน LCD
lcd.init();
lcd.backlight();
// เริ่มต้นทำงาน RTC
if (!rtc.begin()) {
lcd.print("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // ตั้งเวลาตามคอมพิวเตอร์ที่อัปโหลด
}
// เริ่มต้นทำงาน DHT และ Sensor อื่นๆ
dht.begin();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT); // ตั้งค่าขา Relay 3
}
void loop() {
// 1. อ่านค่าเวลาจาก RTC
DateTime now = rtc.now();
// 2. วัดระยะทาง Ultrasonic
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
// 3. อ่านค่า Temp/Hum
float h = dht.readHumidity();
float t = dht.readTemperature();
// 4. ควบคุม Relay (Logic แบบ Active High)
bool r1_stat = false;
bool r2_stat = false;
bool r3_stat = false; // สถานะ Relay 3
if (t > 30) { digitalWrite(RELAY1_PIN, HIGH); r1_stat = true; }
else { digitalWrite(RELAY1_PIN, LOW); r1_stat = false; }
if (h < 50) { digitalWrite(RELAY2_PIN, HIGH); r2_stat = true; }
else { digitalWrite(RELAY2_PIN, LOW); r2_stat = false; }
// ควบคุม Relay 3 ตามระยะทาง
if (distance <= 30) { digitalWrite(RELAY3_PIN, HIGH); r3_stat = true; }
else { digitalWrite(RELAY3_PIN, LOW); r3_stat = false; }
// แสดงผลบนหน้าจอ LCD
// บรรทัดที่ 1: เวลา
lcd.setCursor(0, 0);
char timeStr[20]; // เพิ่มขนาด buffer
sprintf(timeStr, "Time: %02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.print(timeStr);
// บรรทัดที่ 2: ระยะทาง
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print(" cm ");
// บรรทัดที่ 3: Temp & Hum
lcd.setCursor(0, 2);
lcd.print("T:"); lcd.print(t, 1);
lcd.print("C H:"); lcd.print(h, 1);
lcd.print("% ");
// บรรทัดที่ 4: Relay Status (ปรับให้แสดง R1, R2, R3)
lcd.setCursor(0, 3);
lcd.print("R1:"); lcd.print(r1_stat ? "ON" : "OFF");
lcd.print(" R2:"); lcd.print(r2_stat ? "ON" : "OFF");
lcd.print(" R3:"); lcd.print(r3_stat ? "ON" : "OFF");
delay(1000); // หน่วงเวลา 1 วินาที
}
Fan
Pump
TRIG PIN5
SCL PN22
ECHO PIN4
PIN 12
DHT PIN19
SCL PIN 21
GND
PIN 13
+5V ไฟเลี้ยง
motor
Fan
Pump