PIR Sensor HC-SR501 คืออะไร? วิธีใช้งานกับ Arduino
HC-SR501 คือเซนเซอร์ตรวจจับการเคลื่อนไหว (Motion Sensor) ที่นิยมใช้กันอย่างแพร่หลาย ทำงานโดยใช้หลักการของ PIR (Passive Infrared) ซึ่งหมายถึงเป็นเซนเซอร์ที่คอย "รับ" หรือ "ดักจับ" รังสีอินฟราเรดที่แผ่ออกมาจากวัตถุที่มีความร้อน เช่น ร่างกายของมนุษย์หรือสัตว์ โดยตัวมันเองไม่ได้ปล่อยรังสีใดๆ ออกไป
เมื่อมีคนหรือสัตว์เคลื่อนที่ผ่านหน้าเซนเซอร์ จะทำให้ปริมาณรังสีอินฟราเรดที่ตกกระทบมีการเปลี่ยนแปลงอย่างรวดเร็ว วงจรภายในจะตรวจจับการเปลี่ยนแปลงนี้และส่งสัญญาณลอจิก "HIGH" ออกมา เพื่อแจ้งให้ไมโครคอนโทรลเลอร์ทราบว่า "มีการเคลื่อนไหวเกิดขึ้น"
สเปคของ HC-SR501
แรงดันใช้งาน |
4.5V – 20V DC (ใช้กับ 5V ของ Arduino ได้เลย) |
แรงดันลอจิกเอาต์พุต |
3.3V (แต่เพียงพอสำหรับขา Digital ของ Arduino อ่านค่า HIGH ได้) |
กระแสที่ใช้ |
~50 μA (ประหยัดพลังงานมาก เหมาะกับงานแบตเตอรี่) |
ระยะตรวจจับ |
ปรับได้ประมาณ 3 ถึง 7 เมตร (ปรับด้วย Potentiometer สีส้ม) |
มุมตรวจจับ |
ประมาณ 120 องศา (รูปกรวย) |
เวลาหน่วง (Delay Time) |
ปรับได้ประมาณ 0.3 วินาที ถึง 5 นาที (ปรับด้วย Potentiometer สีส้ม) |
โหมดการทำงาน |
ปรับได้ 2 โหมด ด้วย Jumper บนบอร์ด |
การปรับโหมดการทำงาน (สำคัญมาก)
บนบอร์ดจะมี Jumper ให้เลือกโหมดได้ 2 แบบ:
-
Repeatable (H): หาก Jumper อยู่ตำแหน่ง H (ค่าเริ่มต้น) เซนเซอร์จะส่งสัญญาณ HIGH "ตลอดเวลา" ที่ยังคงตรวจจับการเคลื่อนไหวได้ และจะเริ่มนับเวลาหน่วงใหม่ทุกครั้งที่เจอการเคลื่อนไหวซ้ำ (เหมาะกับไฟอัตโนมัติ)
-
Non-Repeatable (L): หาก Jumper อยู่ตำแหน่ง L เซนเซอร์จะส่งสัญญาณ HIGH เพียง "ครั้งเดียว" ตามเวลาหน่วงที่ตั้งไว้ แม้จะยังมีการเคลื่อนไหวอยู่ก็ตาม จากนั้นจะส่ง LOW และรอสักครู่ก่อนจะเริ่มตรวจจับใหม่ (เหมาะกับระบบเตือนภัย)
การใช้งานกับ Arduino
✅ การต่อสายกับ Arduino
ขาบน HC-SR501 |
ต่อกับขาบน Arduino |
VCC |
5V |
GND |
GND |
OUT |
ขา Digital ใดก็ได้ (เช่น D2) |
✅ ตัวอย่างโค้ด Arduino (ตรวจจับการเคลื่อนไหว)
โค้ดนี้จะอ่านค่าจาก PIR Sensor และเมื่อตรวจพบการเคลื่อนไหว จะสั่งให้ LED บนบอร์ด (ขา 13) ติดสว่าง
// กำหนดขาที่เชื่อมต่อ
const int pirPin = 2; // ขาที่รับสัญญาณจาก OUT ของ PIR Sensor
const int ledPin = 13; // ขา LED Build-in บนบอร์ด Arduino
void setup() {
pinMode(pirPin, INPUT); // กำหนดให้ขา pirPin เป็น Input
pinMode(ledPin, OUTPUT); // กำหนดให้ขา ledPin เป็น Output
Serial.begin(9600); // เริ่มการสื่อสารแบบ Serial
Serial.println("PIR Motion Sensor Test");
}
void loop() {
// อ่านค่าสถานะจาก PIR Sensor
int motionState = digitalRead(pirPin);
// ตรวจสอบสถานะ
if (motionState == HIGH) {
digitalWrite(ledPin, HIGH); // เปิด LED
Serial.println("ตรวจพบการเคลื่อนไหว!");
} else {
digitalWrite(ledPin, LOW); // ปิด LED
Serial.println("สถานะปกติ...");
}
// หน่วงเวลาเพื่อลดการแสดงผลที่เร็วเกินไป
delay(500);
}
💡 การประยุกต์ใช้งาน
โปรเจกต์ |
รายละเอียดการใช้งาน |
ระบบเตือนภัยบุกรุก |
ส่งเสียงเตือนหรือแจ้งเตือนผ่าน Line เมื่อมีคนเดินผ่านในบริเวณที่กำหนด |
ไฟทางเดิน/ห้องน้ำอัตโนมัติ |
เปิดไฟเมื่อมีคนเดินเข้ามาในพื้นที่ และปิดไฟเมื่อไม่พบการเคลื่อนไหวแล้ว |
ระบบบ้านอัจฉริยะ |
ใช้เป็นตัวกระตุ้น (Trigger) เพื่อสั่งงานอุปกรณ์อื่น เช่น เปิดแอร์, เปิดพัดลม เมื่อมีคนอยู่ในห้อง |
กล้องวงจรปิดอัจฉริยะ |
สั่งให้ ESP32-CAM หรือกล้องอื่นเริ่มบันทึกภาพเมื่อตรวจพบการเคลื่อนไหว |
ระบบประหยัดพลังงาน |
ใช้ปลุกไมโครคอนโทรลเลอร์ (เช่น ESP32) จากโหมด Deep Sleep เมื่อมีคนเข้ามาใกล้ |
⭐ ข้อดีของ HC-SR501
-
ใช้งานง่าย: มีเพียง 3 ขา และให้สัญญาณเป็น Digital ทำให้เขียนโค้ดไม่ซับซ้อน
-
ประหยัดพลังงานมาก: ใช้กระแสไฟน้อยมากในสถานะสแตนด์บาย เหมาะกับงานที่ใช้แบตเตอรี่
-
ปรับแต่งได้: สามารถปรับระยะการตรวจจับและเวลาหน่วงได้ตามความต้องการของโปรเจกต์
-
เข้ากันได้ดี: ทำงานได้กับ Arduino, ESP8266, ESP32, และ Raspberry Pi