ทำไฟตรวจจับความเคลื่อนไหวด้วย Arduino และ PIR Sensor

เรียนรู้วิธีสร้างระบบไฟอัจฉริยะที่ตรวจจับความเคลื่อนไหวและเปิดปิดไฟอัตโนมัติ พร้อมโค้ดตัวอย่างและคำอธิบายภาษาไทย

📅 6 มีนาคม 2026⏱️ 15 นาที🎯 ระดับ: มือใหม่

ภาพรวมโปรเจกต์

ไฟตรวจจับความเคลื่อนไหว (Motion Sensor Light) เป็นหนึ่งในโปรเจกต์ IoT ยอดนิยมที่ใช้งานได้จริงและมีประโยชน์มาก โดยในบทความนี้เราจะมาเรียนรู้วิธีสร้างระบบไฟอัจฉริยะที่:

  • ตรวจจับความเคลื่อนไหวของมนุษย์ด้วย PIR Sensor
  • เปิดไฟอัตโนมัติเมื่อตรวจจับเจอคน
  • ปิดไฟอัตโนมัติเมื่อไม่มีความเคลื่อนไหว
  • สามารถนำไปประยุกต์ใช้กับ CynoIoT Platform ได้

โปรเจกต์นี้เหมาะสำหรับมือใหม่ที่ต้องการเริ่มต้นศึกษาเรื่อง IoT และ Home Automation ครับ!

อุปกรณ์ที่ต้องใช้

🔧 Hardware

Arduino Board (Uno, Nano, หรือ Mega)

ใช้เป็นสมองกลางในการประมวลผล

PIR Motion Sensor (HC-SR501)

ตรวจจับความเคลื่อนไหวของคน

LED (หลอดไฟ)

หรือใช้ Relay เพื่อควบคุมหลอดไฟ 220V ก็ได้

Resistor 220Ω

สำหรับป้องกันกระแสไหลผ่าน LED เกิน

Breadboard และ Jumper Wires

สำหรับต่อวงจรชั่วคราว

💻 Software

Arduino IDE

ดาวน์โหลดฟรีที่ arduino.cc

USB Cable สำหรับ Arduino

สำหรับอัปโหลดโค้ดและจ่ายไฟเลี้ยง

💡 เกร็ดความรู้: งบประมาณโดยประมาณสำหรับโปรเจกต์นี้คือ 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

ขั้นตอนการต่อวงจร

1

ต่อ PIR Sensor

ต่อขา VCC เข้ากับ 5V, ขา OUT เข้ากับขา Digital 2, และขา GND เข้ากับ GND

2

ต่อ LED

ต่อขาบวก (+) ของ LED เข้ากับขา Digital 13 ผ่านตัวต้านทาน 220Ω, และขาลบ (-) เข้ากับ GND

3

เช็คการต่อวงจร

ตรวจสอบให้แน่ใจว่าทุกการต่อสายถูกต้อง และไม่มีสายขาดหรือต่อผิดขา

⚠️ คำเตือน: ก่อนเชื่อมต่อ 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() เพราะไม่ได้บล็อกการทำงานของโปรแกรม

การทดสอบ

ขั้นตอนการทดสอบ

1

อัปโหลดโค้ด

เชื่อมต่อ Arduino เข้ากับคอมพิวเตอร์ด้วย USB Cable แล้วอัปโหลดโค้ด

2

เปิด Serial Monitor

ไปที่ Tools > Serial Monitor หรือกด Ctrl+Shift+M และตั้ง baud rate เป็น 9600

3

ทดสอบระบบ

เอามือโบกหน้า PIR Sensor และดูว่า LED ติดหรือไม่ พร้อมกับดูข้อความใน Serial Monitor

4

ปรับเวลา

ลองปรับค่า 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 ของตัวเองแล้ว! ลองปรับแต่งและทดลองดูครับ