// กำหนดขาพินอุปกรณ์ (สามารถเปลี่ยนได้ตามการต่อสายจริง)
const int LDR_PIN = 34; // เซนเซอร์แสง (ต้องต่อขาที่อ่าน Analog ได้ เช่น 34, 35, 32, 33)
const int PIR_PIN = 27; // เซนเซอร์จับความเคลื่อนไหว
const int BUZZER_PIN = 25; // ลำโพง
const int RF_PIN = 26; // ตัวส่งสัญญาณ 433MHz
// กำหนดระดับความสว่างที่ถือว่า "ไฟเปิดอยู่" (ESP32 อ่านค่า Analog ได้ 0-4095)
const int LIGHT_THRESHOLD = 2000;
void setup()
{
// ตั้งค่าสถานะของพินต่างๆ
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RF_PIN, OUTPUT);
// เปิดการสื่อสาร Serial (ตั้ง Baud rate ที่ 115200) เพื่อไว้ดูค่าแสงตอนทดสอบ
Serial.begin(115200);
}
void loop()
{
yield(); // ป้องกันระบบค้าง (Watchdog Reset)
// อ่านค่าจากเซนเซอร์
int lightLevel = analogRead(LDR_PIN);
int motion = digitalRead(PIR_PIN);
// แสดงค่าทาง Serial Monitor เพื่อไว้เช็คว่าควรตั้งค่า LIGHT_THRESHOLD เท่าไหร่
Serial.print("Light Level: ");
Serial.print(lightLevel);
Serial.print(" | Motion: ");
Serial.println(motion);
// ตรวจสอบเงื่อนไข: ไฟเปิดอยู่ (แสงมากกว่าที่ตั้งไว้) และ ไม่มีคน (PIR เป็น 0 หรือ LOW)
if (lightLevel > LIGHT_THRESHOLD && motion == LOW) {
// 1. เปิดเสียงลำโพง และ ส่งสัญญาณ RF
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(RF_PIN, HIGH); // สั่งจ่ายไฟให้ตัวส่ง 433MHz
// 2. ให้ลำโพงดังค้างไว้ 10 วินาที (10,000 มิลลิวินาที)
delay(10000);
// 3. ปิดเสียงลำโพง และ ปิดการส่งสัญญาณ
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RF_PIN, LOW);
// 4. พักการทำงาน 5 วินาทีก่อนเริ่มเช็คใหม่ เพื่อไม่ให้ลำโพงดังรัวติดกันเกินไป
delay(5000);
} else {
// สภาวะปกติ (มีคนอยู่ หรือ ปิดไฟแล้ว) ให้ปิดลำโพง
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(RF_PIN, LOW);
}
// หน่วงเวลาเล็กน้อยในลูปเพื่อไม่ให้บอร์ดทำงานหนักเกินไป
delay(500);
}