เนื้อหาในบทความ
ภาพรวมโปรเจกต์
ไฟตรวจจับความเคลื่อนไหว (Motion Sensor Light) เป็นหนึ่งในโปรเจกต์ IoT ยอดนิยมที่ใช้งานได้จริงและมีประโยชน์มาก โดยในบทความนี้เราจะมาเรียนรู้วิธีสร้างระบบไฟอัจฉริยะที่:
- ตรวจจับความเคลื่อนไหวของมนุษย์ด้วย PIR Sensor
- เปิดไฟอัตโนมัติเมื่อตรวจจับเจอคน
- ปิดไฟอัตโนมัติเมื่อไม่มีความเคลื่อนไหว
- สามารถนำไปประยุกต์ใช้กับ CynoIoT Platform ได้
โปรเจกต์นี้เหมาะสำหรับมือใหม่ที่ต้องการเริ่มต้นศึกษาเรื่อง IoT และ Home Automation ครับ!
อุปกรณ์ที่ต้องใช้
🔧 Hardware
ใช้เป็นสมองกลางในการประมวลผล
ตรวจจับความเคลื่อนไหวของคน
หรือใช้ Relay เพื่อควบคุมหลอดไฟ 220V ก็ได้
สำหรับป้องกันกระแสไหลผ่าน LED เกิน
สำหรับต่อวงจรชั่วคราว
💻 Software
ดาวน์โหลดฟรีที่ arduino.cc
สำหรับอัปโหลดโค้ดและจ่ายไฟเลี้ยง
💡 เกร็ดความรู้: งบประมาณโดยประมาณสำหรับโปรเจกต์นี้คือ 150-300 บาท (ถ้าใช้ Arduino Uno และ PIR Sensor รุ่น HC-SR501)
การต่อวงจร Hardware
ทำความรู้จักกับ PIR Sensor (HC-SR501)
PIR (Passive Infrared) Sensor คือเซ็นเซอร์ที่ตรวจจับความเคลื่อนไหวโดยการวัดการเปลี่ยนแปลงของรังสีอินฟราเรดที่มนุษย์ปล่อยออกมา โดยรุ่น HC-SR501 มีขา 3 ขา:
- VCC: ต่อเข้ากับ 5V บน Arduino
- OUT: ต่อเข้ากับขา Digital บน Arduino (เช่น ขา 2)
- GND: ต่อเข้ากับ GND บน Arduino
ขั้นตอนการต่อวงจร
ต่อ PIR Sensor
ต่อขา VCC เข้ากับ 5V, ขา OUT เข้ากับขา Digital 2, และขา GND เข้ากับ GND
ต่อ LED
ต่อขาบวก (+) ของ LED เข้ากับขา Digital 13 ผ่านตัวต้านทาน 220Ω, และขาลบ (-) เข้ากับ GND
เช็คการต่อวงจร
ตรวจสอบให้แน่ใจว่าทุกการต่อสายถูกต้อง และไม่มีสายขาดหรือต่อผิดขา
⚠️ คำเตือน: ก่อนเชื่อมต่อ Arduino เข้ากับคอมพิวเตอร์ ให้แน่ใจว่าการต่อวงจรถูกต้อง การต่อผิดอาจทำให้เกิดความเสียหายต่อ Arduino หรือ Sensor ได้
การเขียนโปรแกรม
หลังจากต่อวงจรเสร็จแล้ว ตอนนี้มาเขียนโค้ดกันเลย! เปิด Arduino IDE แล้วพิมพ์หรือคัดลอกโค้ดด้านล่าง:
// ตั้งค่าขา PIR Sensor
const int pirPin = 2; // ขาที่ต่อกับ PIR Sensor (OUT)
// ตั้งค่าขา LED
const int ledPin = 13; // ขาที่ต่อกับ LED (บน Arduino Uno มี LED built-in อยู่ที่ขา 13)
// ตัวแปรสำหรับเก็บสถานะของ PIR Sensor
int pirState = LOW; // เริ่มต้นด้วยสถานะไม่มีความเคลื่อนไหว
int val = 0; // ตัวแปรสำหรับเก็บค่าที่อ่านได้จาก PIR Sensor
// ตั้งค่าเวลาที่ LED จะยังคงเปิดอยู่หลังจากตรวจจับเจอคน (มิลลิวินาที)
const int stayOnTime = 5000; // 5 วินาที
unsigned long lastMotionTime = 0; // เวลาที่ตรวจจับความเคลื่อนไหวครั้งล่าสุด
void setup() {
Serial.begin(9600); // เปิด Serial Monitor สำหรับ debugging
pinMode(pirPin, INPUT); // ตั้งค่า PIR pin เป็น input
pinMode(ledPin, OUTPUT); // ตั้งค่า LED pin เป็น output
digitalWrite(ledPin, LOW); // เริ่มต้นด้วยการปิด LED
Serial.println("Motion Sensor Light เริ่มทำงานแล้ว!");
Serial.println("รอการตรวจจับความเคลื่อนไหว...");
}
void loop() {
// อ่านค่าจาก PIR Sensor
val = digitalRead(pirPin);
// ตรวจสอบว่ามีความเคลื่อนไหวหรือไม่
if (val == HIGH) {
// ตรวจจับเจอความเคลื่อนไหว!
if (pirState == LOW) {
// เปลี่ยนจากไม่มีความเคลื่อนไหวเป็นมีความเคลื่อนไหว
Serial.println("ตรวจจับเจอความเคลื่อนไหว! เปิดไฟ");
pirState = HIGH;
}
// เปิด LED และอัปเดตเวลาที่ตรวจจับความเคลื่อนไหวล่าสุด
digitalWrite(ledPin, HIGH);
lastMotionTime = millis();
} else {
// ไม่มีความเคลื่อนไหว
// ตรวจสอบว่าผ่านไปเกินเวลาที่ตั้งไว้หรือยัง
if (pirState == HIGH && (millis() - lastMotionTime) > stayOnTime) {
// ปิด LED เพราะไม่มีความเคลื่อนไหวเกิน 5 วินาทีแล้ว
Serial.println("ไม่มีความเคลื่อนไหวเกิน 5 วินาที ปิดไฟ");
digitalWrite(ledPin, LOW);
pirState = LOW;
}
}
delay(100); // หน่วงเวลาเล็กน้อยเพื่อลดการโหลด CPU
}✅ Tip: สามารถปรับค่า stayOnTime เพื่อเปลี่ยนเวลาที่ LED จะยังคงเปิดอยู่หลังจากตรวจจับเจอคน โดยหน่วยเป็นมิลลิวินาที (1000 ms = 1 วินาที)
อธิบายโค้ด
📌 ส่วนประกาศตัวแปร
เรากำหนดค่าขา PIR Sensor และ LED ไว้ที่จุดเริ่มต้นเพื่อให้แก้ไขง่าย ตัวแปร stayOnTime กำหนดเวลาที่ LED จะเปิดอยู่หลังจากตรวจจับเจอคน
📌 ฟังก์ชัน setup()
ใน setup() เราตั้งค่าโหมดของแต่ละขา (input/output) และเริ่มต้น Serial Monitor สำหรับ debugging นอกจากนี้เรายังปิด LED ที่จุดเริ่มต้นด้วย
📌 ฟังก์ชัน loop()
ใน loop() เราอ่านค่าจาก PIR Sensor อย่างต่อเนื่อง ถ้าตรวจจับเจอความเคลื่อนไหว (HIGH) เราจะเปิด LED และอัปเดตเวลาที่ตรวจจับล่าสุด ถ้าไม่มีความเคลื่อนไหวเกินเวลาที่กำหนด เราจะปิด LED
📌 ฟังก์ชัน millis()
เราใช้ millis() ในการติดตามเวลา ซึ่งจะคืนค่าจำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่ Arduino เริ่มทำงาน วิธีนี้ดีกว่าการใช้ delay() เพราะไม่ได้บล็อกการทำงานของโปรแกรม
การทดสอบ
ขั้นตอนการทดสอบ
อัปโหลดโค้ด
เชื่อมต่อ Arduino เข้ากับคอมพิวเตอร์ด้วย USB Cable แล้วอัปโหลดโค้ด
เปิด Serial Monitor
ไปที่ Tools > Serial Monitor หรือกด Ctrl+Shift+M และตั้ง baud rate เป็น 9600
ทดสอบระบบ
เอามือโบกหน้า PIR Sensor และดูว่า LED ติดหรือไม่ พร้อมกับดูข้อความใน Serial Monitor
ปรับเวลา
ลองปรับค่า stayOnTime เพื่อเปลี่ยนเวลาที่ LED จะเปิดอยู่ และทดสอบอีกครั้ง
💡 Tip: ถ้า LED ไม่ติดหรือไม่ทำงานตามที่คาดหวัง ลองดูส่วน "ปัญหาที่พบบ่อย" ด้านล่าง
ปัญหาที่พบบ่อยและวิธีแก้ไข
❗ ปัญหา: LED ไม่ติดเลย
อาการ: ไม่ว่าจะโบกมือหน้า Sensor ก็ไม่เกิดอะไรขึ้น
สาเหตุที่เป็นไปได้:
- ต่อวงจรผิด หรือสายหลวม
- PIR Sensor เสีย
- LED พัง
- ขาต่อ LED ผิดทาง (บวกกับลบกลับ)
วิธีแก้ไข: ตรวจสอบการต่อวงจรทุกจุด, ลองเปลี่ยน PIR Sensor หรือ LED ตัวใหม่
❗ ปัญหา: LED ติดตลอดไม่ปิด
อาการ: LED เปิดอยู่ตลอดเวลาแม้ว่าจะไม่มีความเคลื่อนไหว
สาเหตุที่เป็นไปได้:
- PIR Sensor ไวเกินไป
- มีความเคลื่อนไหรี่อื่นๆ ในบริเวณ
- ขา OUT ต่อกับขาผิด
วิธีแก้ไข: ลองปรับค่า sensitivity บน PIR Sensor หรือย้ายไปติดตั้งที่อื่น
❗ ปัญหา: Serial Monitor ไม่แสดงข้อความ
อาการ: Serial Monitor เปิดแต่ไม่มีข้อความออกมา
สาเหตุที่เป็นไปได้:
- Baud rate ไม่ตรงกัน (ต้องเป็น 9600)
- เลือก COM Port ผิด
- USB Cable ไม่ได้ต่ออยู่
วิธีแก้ไข: ตรวจสอบ baud rate, เลือก COM Port ที่ถูกต้อง, ตรวจสอบการเชื่อมต่อ USB
⚠️ ปัญหา: ตรวจจับได้ไม่ไว
อาการ: ต้องโบกมือใกล้ๆ จึงจะตรวจจับเจอ
สาเหตุที่เป็นไปได้:
- PIR Sensor ไวน้อยไป
- ระยะตรวจจับสั้นเกินไป
- มีสิ่งกีดขวางระหว่าง Sensor และผู้ใช้
วิธีแก้ไข: ปรับค่า sensitivity บน PIR Sensor หรือเปลี่ยนตำแหน่งติดตั้ง
พัฒนาต่อยังไง?
ยินดีด้วย! ตอนนี้คุณสามารถสร้างไฟตรวจจับความเคลื่อนไหวเบื้องต้นได้แล้ว แต่นี่เป็นเพียงจุดเริ่มต้น นี่คือไอเดียสำหรับการพัฒนาต่อ:
🔌 ต่อเข้ากับ CynoIoT Platform
แทนที่จะควบคุมเพียง LED ลองต่อเข้ากับ CynoIoT Platform เพื่อควบคุมผ่านออนไลน์และบันทึกข้อมูล
💡 ใช้ Relay ควบคุมไฟจริง
แทนที่จะใช้ LED ลองใช้ Relay Module เพื่อควบคุมหลอดไฟ 220V ในบ้านจริงๆ
📱 เพิ่ม Display
เพิ่ม LCD หรือ OLED Screen เพื่อแสดงสถานะของระบบและเวลาที่ตรวจจับล่าสุด
🌐 เชื่อมต่อ WiFi
ใช้ ESP32 แทน Arduino แล้วเชื่อมต่อ WiFi เพื่อส่ง Notification ไปยังมือถือ
⚡ ใช้พลังงานแสงอาทิตย์
ต่อเพิ่ม Solar Panel และ Battery เพื่อทำให้ระบบทำงานได้โดยไม่ต้องเสียบปลั๊ก
🎥 เพิ่ม Camera
ต่อเพิ่ม Camera Module เพื่อถ่ายภาพเมื่อตรวจจับเจอความเคลื่อนไหว
🎯 ถัดไป: ลองดูบทความอื่นๆ เช่น ESP32 Spec หรือ ESP32 Deep Sleep Guide เพื่อเรียนรู้วิธีนำไปใช้กับ IoT ขั้นสูง
🎉 สรุป
ในบทความนี้คุณได้เรียนรู้:
- การทำงานของ PIR Motion Sensor
- วิธีต่อวงจร Arduino กับ PIR Sensor และ LED
- การเขียนโค้ดเพื่อตรวจจับความเคลื่อนไหวและควบคุมไฟ
- การแก้ปัญหาที่พบบ่อย
- ไอเดียสำหรับการพัฒนาต่อ
ตอนนี้คุณพร้อมที่จะสร้างโปรเจกต์ Home Automation ของตัวเองแล้ว! ลองปรับแต่งและทดลองดูครับ