ระบบเปิดปิดไฟอัตโนมัติ — หลักการออกแบบ
ระบบเปิดปิดไฟอัตโนมัติในบ้านสามารถออกแบบได้ 3 ระดับ:
ระดับ 1: LDR + Relay (เปิดเมื่อมืด)
ตรวจจับแสงธรรมชาติด้วย LDR เมื่อแสงน้อยกว่า Threshold → เปิดไฟ เหมาะกับไฟสวน ไฟทางเดิน
ระดับ 2: RTC Timer (เปิดตามเวลา)
ใช้ RTC Module เปิด-ปิดไฟตามเวลาที่ตั้ง เช่น เปิด 18:00 ปิด 06:00 เหมาะกับไฟที่ต้องการความแน่นอน
ระดับ 3: PIR + Auto-Off (ตรวจจับคนแล้วดับเอง)
ใช้ PIR Motion Sensor ตรวจจับการเคลื่อนไหว → เปิดไฟ → ตั้งเวลาปิดอัตโนมัติ เหมาะกับห้องน้ำ โรงจอดรถ
Source Code — Hybrid Mode (LDR + RTC + PIR)
#include "RTClib.h"
RTC_DS3231 rtc;
const int LDR_PIN = A2;
const int PIR_PIN = 3;
const int RELAY_LIGHT = 9;
// โหมดการทำงาน
enum LightMode { LDR_MODE, TIMER_MODE, PIR_MODE };
LightMode mode = LDR_MODE;
int ldrThreshold = 400;
int pirTimeout = 120000; // 2 นาที
unsigned long pirLastTrigger = 0;
bool pirLightOn = false;
void setup() {
Serial.begin(9600);
if (!rtc.begin()) while(1);
pinMode(PIR_PIN, INPUT);
pinMode(RELAY_LIGHT, OUTPUT);
digitalWrite(RELAY_LIGHT, HIGH);
}
void setLight(bool on) {
if (on) digitalWrite(RELAY_LIGHT, LOW);
else digitalWrite(RELAY_LIGHT, HIGH);
}
void loop() {
DateTime now = rtc.now();
int hourMin = now.hour() * 60 + now.minute();
// Timer Mode: 06:00-07:30 (เช้า) และ 17:30-22:00 (เย็น)
bool timerOn = (hourMin >= 360 && hourMin < 450) ||
(hourMin >= 1050 && hourMin < 1320);
// LDR Mode
int ldr = analogRead(LDR_PIN);
bool ldrOn = (ldr < ldrThreshold);
// PIR Mode
int pir = digitalRead(PIR_PIN);
if (pir == HIGH && !pirLightOn) {
pirLightOn = true;
pirLastTrigger = millis();
setLight(true);
}
if (pirLightOn && (millis() - pirLastTrigger > pirTimeout)) {
pirLightOn = false;
if (!ldrOn && !timerOn) setLight(false);
}
// Logic รวม
if (pirLightOn) {
// PIR มีสิทธิ์สูงสุด
} else if (mode == LDR_MODE) {
setLight(ldrOn);
} else if (mode == TIMER_MODE) {
setLight(timerOn);
}
delay(1000);
}
LED Strip 12V — ควบคุมความสว่างด้วย PWM
// ใช้ PWM (Arduino D9 หรือ D10) + MOSFET IRLZ44N
const int LED_PWM = 10;
void setup() { pinMode(LED_PWM, OUTPUT); }
void setBrightness(int percent) {
int pwm = map(percent, 0, 100, 0, 255);
analogWrite(LED_PWM, pwm);
}
void sunsetSimulation() {
// ค่อยๆ มืดลง (จำลองพระอาทิตย์ตก)
for (int p = 100; p >= 0; p -= 2) {
setBrightness(p);
delay(30000); // 30 วินาทีต่อ 2%
}
}
Tip: แยกวงจรไฟกับวงจรปั๊มน้ำคนละ Relay Module เพื่อป้องกัน Noise จากมอเตอร์ปั๊มรบกวนระบบไฟ
💰 ราคาประมาณการ
| อุปกรณ์ | ราคา |
|---|---|
| LED Strip 12V SMD2835 1m | ~60-120 บาท |
| LED Strip 12V SMD5050 1m | ~80-150 บาท |
| MOSFET IRLZ44N + Heatsink | ~30-50 บาท |
| Relay Module 1ch 12V | ~30-50 บาท |
| LDR + Resistor | ~5-10 บาท |
| PIR HC-SR501 | ~30-60 บาท |
| Adapter 12V 2A | ~80-150 บาท |
🔋 ทางเลือกใช้แบตเตอรี่
ไฟ LED Strip 12V ใช้กระแส ~1A/m ต่อ 1 เมตร — ถ้าต้องการให้เปิดได้นานโดยไม่ใช้ปลั๊กไฟ ใช้ แบต 12V 7Ah (~350 บาท) เปิด LED 1 เมตรได้ ~7 ชม. ต่อการชาร์จ 1 ครั้ง
สำหรับโหมด PIR (ตรวจจับคนแล้วเปิด) ที่เปิดไม่บ่อย แบต 12V 2.5Ah (~150 บาท) ก็อยู่ได้หลายวัน
Tip: เลือก LED Strip แบบใช้กระแสต่ำ (SMD2835 60LED/m) เพื่อประหยัดแบตเตอรี่
⚠️ หมายเหตุ: เนื้อหานี้ค้นคว้าและเรียบเรียงโดย Hermes AI — ข้อมูลทางเทคนิคควรตรวจสอบก่อนนำไปใช้งานจริง