#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <DHT.h>
#include <NewPing.h>
// ตั้งค่า Pin
#define DHTPIN 19
#define DHTTYPE DHT22
#define TRIG_PIN 5
#define ECHO_PIN 4
#define PIR_PIN 15
#define LED_MOTION 27 // เพิ่มขา LED
#define RELAY1 12
#define RELAY2 13
#define RELAY3 14
#define MAX_DISTANCE 400
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 rtc;
DHT dht(DHTPIN, DHTTYPE);
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(115200);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(LED_MOTION, OUTPUT); // ตั้งค่า LED เป็น Output
pinMode(PIR_PIN, INPUT); // ตั้งค่า PIR เป็น Input
lcd.init();
lcd.backlight();
dht.begin();
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime now = rtc.now();
float temp = dht.readTemperature();
float hum = dht.readHumidity();
unsigned int distance = sonar.ping_cm();
// --- อ่านค่า PIR Sensor และควบคุม LED ---
int motion = digitalRead(PIR_PIN);
if (motion == HIGH) {
digitalWrite(LED_MOTION, HIGH); // มีการเคลื่อนไหว LED ติด
} else {
digitalWrite(LED_MOTION, LOW); // ไม่มีการเคลื่อนไหว LED ดับ
}
// --- Logic Relay ---
if (temp > 30.0) digitalWrite(RELAY1, HIGH);
else digitalWrite(RELAY1, LOW);
if (hum < 50.0) digitalWrite(RELAY2, HIGH);
else digitalWrite(RELAY2, LOW);
if (distance > 0 && distance <= 30) digitalWrite(RELAY3, HIGH);
else digitalWrite(RELAY3, LOW);
// --- แสดงผลบน LCD 2004 ---
// บรรทัดที่ 1: เวลา
lcd.setCursor(0, 0);
char timeBuf[20];
sprintf(timeBuf, "Time: %02d:%02d:%02d", now.hour(), now.minute(), now.second());
lcd.print(timeBuf);
// บรรทัดที่ 2: Distance
lcd.setCursor(0, 1);
lcd.print("Dist: ");
if(distance == 0) lcd.print("Out Range ");
else {
lcd.print(distance);
lcd.print(" cm ");
}
// บรรทัดที่ 3: Temp & Hum
lcd.setCursor(0, 2);
lcd.print("T:"); lcd.print(temp, 1);
lcd.print("C H:"); lcd.print(hum, 1);
lcd.print("%");
// บรรทัดที่ 4: Relay & Motion Status
lcd.setCursor(0, 3);
lcd.print("R1:"); lcd.print(digitalRead(RELAY1) ? "1" : "0");
lcd.print(" R2:"); lcd.print(digitalRead(RELAY2) ? "1" : "0");
lcd.print(" R3:"); lcd.print(digitalRead(RELAY3) ? "1" : "0");
lcd.print(" MOT:"); lcd.print(motion ?"ON ":"OFF");
delay(500);
}Relay2 (PUMP)
Relay1 (FAN)
PIN12
PIN13
PIN19
TRIG : PIN5
ECHO : PIN4
Relay3 (Motor)
PIN14
PIR : PIN15
PIN27
RTC (Real Time Clock)
lcd 2004 i2c
dht 22
Ultrasonic Distance Sensor
HC-SR04
Hum/Temp sensor.
ds1307
SDA : PIN 21
SCL : PIN 22
(Std PIN)
motion sensor
pir
Display
LED Status PIR
SDA : PIN 21 // SCL : PIN 22 // (Std PIN)