#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
// การตั้งค่าขาเชื่อมต่อ
#define DHTPIN 19
#define DHTTYPE DHT22
#define TRIG_PIN 5
#define ECHO_PIN 4
#define PIR_PIN 15
#define LED_PIN 27 // เพิ่มขา LED
#define RELAY1 12
#define RELAY2 13
#define RELAY3 14
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); // ตั้งค่าขา LED เป็น Output
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
lcd.init();
lcd.backlight();
if (!rtc.begin()) {
while (1);
}
dht.begin();
}
void loop() {
// --- 1. อ่านค่าจาก Sensor ต่างๆ ---
DateTime now = rtc.now();
// วัดระยะทาง HC-SR04
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;
// อ่านค่า DHT22
float hum = dht.readHumidity();
float temp = dht.readTemperature();
// อ่านค่า PIR (Motion)
int motion = digitalRead(PIR_PIN);
// --- 2. ตรรกะการควบคุม ---
// LED: Motion Control (ตรวจจับความเคลื่อนไหว)
if (motion == HIGH) {
digitalWrite(LED_PIN, HIGH); // LED ติด
} else {
digitalWrite(LED_PIN, LOW); // LED ดับ
}
// Relay 1 & 2: Temp/Hum Control
if (temp > 30.0) digitalWrite(RELAY1, HIGH);
else if (temp < 30.0) digitalWrite(RELAY1, LOW);
if (hum < 50.0) digitalWrite(RELAY2, HIGH);
else if (hum > 50.0) digitalWrite(RELAY2, LOW);
// Relay 3: Distance Control (<= 30cm)
if (distance <= 30.0 && distance > 0) digitalWrite(RELAY3, HIGH);
else digitalWrite(RELAY3, LOW);
// --- 3. การแสดงผลบน LCD 2004 ---
// Line 1: Time
lcd.setCursor(0, 0);
char timeStr[20];
sprintf(timeStr, "Time: %02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.print(timeStr);
// Line 2: Distance
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance, 1);
lcd.print(" cm ");
// Line 3: Temp & Hum
lcd.setCursor(0, 2);
lcd.print("T:"); lcd.print(temp, 1);
lcd.print("C H:"); lcd.print(hum, 1);
lcd.print("% ");
// Line 4: Status (เพิ่มแสดงสถานะ PIR/LED)
lcd.setCursor(0, 3);
lcd.print("R1:"); lcd.print(digitalRead(RELAY1) ? "O" : "X");
lcd.print(" R2:"); lcd.print(digitalRead(RELAY2) ? "O" : "X");
lcd.print(" R3:"); lcd.print(digitalRead(RELAY3) ? "O" : "X");
lcd.print(" M:"); lcd.print(motion ? "ON " : "OFF");
delay(500);
}FAN
PUMP
+5V
GND
PIN 12
PIN 13
TRIG PIN 5
DHT PIN 19
ECHO PIN 4
SCL PIN 22
SDA PIN 21
MOTOR
PIN 14
PIR PIN 15