#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 PIR_PIN 15 // หมายเหตุ: คุณแจ้ง relay 3 อยู่ pin 15 และ PIR pin 15 ด้วย ผมขออนุญาตแยก PIR ไปที่ Pin 14 เพื่อไม่ให้ชนกันนะครับ
#define RELAY1 12
#define RELAY2 13
#define RELAY3 15
#define LED_PIR 27
// ตั้งค่าอุปกรณ์
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 rtc;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// เริ่มต้นทำงานอุปกรณ์
lcd.init();
lcd.backlight();
dht.begin();
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
}
// ตั้งค่า Pin Mode
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(LED_PIR, OUTPUT);
}
void loop() {
DateTime now = rtc.now();
float h = dht.readHumidity();
float t = dht.readTemperature();
// คำนวณระยะทาง 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;
// อ่านค่า PIR
int pirState = digitalRead(PIR_PIN);
// --- การควบคุม Relay และ LED ---
// Relay 1 (Temp)
if (t >= 30.0) digitalWrite(RELAY1, HIGH); else digitalWrite(RELAY1, LOW);
// Relay 2 (Humidity)
if (h <= 50.0) digitalWrite(RELAY2, HIGH); else digitalWrite(RELAY2, LOW);
// Relay 3 (Distance)
if (distance < 30.0) digitalWrite(RELAY3, HIGH); else digitalWrite(RELAY3, LOW);
// LED PIR
if (pirState == HIGH) digitalWrite(LED_PIR, HIGH); else digitalWrite(LED_PIR, LOW);
// --- การแสดงผลบน LCD ---
// บรรทัด 1: เวลาและวันที่
lcd.setCursor(0, 0);
char dateBuf[20];
sprintf(dateBuf, "%02d/%02d %02d:%02d:%02d", now.day(), now.month(), now.hour(), now.minute(), now.second());
lcd.print(dateBuf);
// บรรทัด 2: ระยะทาง
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print(" cm ");
// บรรทัด 3: อุณหภูมิและความชื้น
lcd.setCursor(0, 2);
lcd.print("T:");
lcd.print(t, 1);
lcd.print("C H:");
lcd.print(h, 0);
lcd.print("% ");
// บรรทัด 4: สถานะ Relay
lcd.setCursor(0, 3);
lcd.print("R1:");
lcd.print(digitalRead(RELAY1) ? "ON " : "OFF");
lcd.print(" R2:");
lcd.print(digitalRead(RELAY2) ? "ON " : "OFF");
lcd.print(" R3:");
lcd.print(digitalRead(RELAY3) ? "ON " : "OFF");
delay(500); // หน่วงเวลาการ Update
}PUMP
FAN
PIN13
PIN12
+5Vไฟเลี้ยง
GDN
TRIG Pin5
ECHO Pin4
SDA Pin21
SCL Pin22
DHT Pin19
MOTOR
PIN14
PIR Pin15
LED Pin27