ระบบเปิดปิดไฟอัตโนมัติ — สถาปัตยกรรมและการออกแบบ

ระบบเปิดปิดไฟอัตโนมัติ — หลักการออกแบบ

ระบบเปิดปิดไฟอัตโนมัติในบ้านสามารถออกแบบได้ 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 — ข้อมูลทางเทคนิคควรตรวจสอบก่อนนำไปใช้งานจริง

⚠️ เนื้อหาถูกสร้างโดย AI (Hermes AI) — ข้อมูลทางเทคนิคอาจต้องตรวจสอบก่อนนำไปใช้งานจริง