การใช้งานโมดูลเซนเซอร์ตรวจจับการเคลื่อนไหว
เซนเซอร์ตรวจจับการเคลื่อนไหว
การตรวจจับการเคลื่อนไหวที่จะกล่าวถึงในบทนี้
คือการตรวจจับการเคลื่อนไหวของมนุษย์ด้วยเซนเซอร์ชนิดไพโรอิเล็กทริกอินฟราเรด (pyroelectric
infrared sensor) หรือมีอีกชื่อหนึ่งว่าเซนเซอร์อินฟราเรดชนิดพาสซิฟ
(passive infrared sensor) และเรียกย่อ ๆ ว่า
พีไออาร์เซนเซอร์ (PIR sensor) โดยเซนเซอร์นี้สามารถแปลงคลื่นแสงอินฟราเรด (infrared, IR) ที่เกิดจากการแผ่รังสีจากวัตถุที่มีอุณหภูมิสูงกว่าสิ่งแวดล้อมให้เป็นสัญญาณทางไฟฟ้าได้
รูปที่ 1(ก) แสดงภาพถ่ายของเซนเซอร์ชนิดนี้
พีไออาร์เซนเซอร์มีส่วนประกอบภายในที่สำคัญคือ
ภายในตัวเซนเซอร์จะมีช่องรับคลื่นแสงอินฟราเรดสองช่อง (ดูรูปที่ 1(ข)) ซึ่งเปรียบได้ว่าภายในมีเซนเซอร์สองตัวที่ต่ออนุกรมกันอยู่ภายใน
และมีวงจรทรานซิสเตอร์ (เจเฟต) อยู่ด้วย เซนเซอร์ที่ใช้นี้จะตรวจจับคลื่นแสงอินฟราเรดที่เปล่งออกมาจากสิ่งมีชีวิต
เนื่องจากสิ่งที่มีความร้อนทุกชนิดจะเปล่งรังสีอินฟราเรดออกมา นั่นคือ
ในขณะที่ไม่มีการเคลื่อนไหว เซนเซอร์ทั้งสองช่องจะได้รับสัญญาณพื้นหลังจากสิ่งของต่าง
ๆ เท่ากันทำให้ไม่มีความต่างของสัญญาณจากเซนเซอร์ทั้งสอง แต่เมื่อมีวัตถุที่เปล่งคลื่นแสงอินฟราเรดเคลื่อนที่ผ่านเซนเซอร์ก็จะก่อให้เกิดสัญญาณความต่างขึ้น
เนื่องจากเซนเซอร์ตรวจจับสัญญาณจากวัตถุได้ไม่เท่ากันในขณะที่วัตถุเคลื่อนที่ โดยสัญญาณนี้จะเป็นค่าบวกและลบสลับกันตามลำดับเวลา
รูปที่ 2
แสดงลักษณะการเคลื่อนที่ผ่านของวัตถุและลักษณะสัญญาณที่ได้รับ
โดยเมื่อได้รับสัญญาณแล้ว วงจรประมวลผลก็จะเอาค่าสูงสุดของสัญญาณมาเปรียบเทียบกับค่าเทรสโฮลด์
(threshold value) ในลำดับถัดไป เพื่อบ่งบอกว่ามีการเคลื่อนที่ของวัตถุหรือไม่
รูปที่
1 (ก) ภาพถ่ายและ (ข) ลักษณะวงจรภายในของพีไออาร์เซนเซอร์
รูปที่
2
หลักการและสัญญาณจากการตรวจจับการเคลื่อนไหวด้วยพีไออาร์เซนเซอร์
ในการตรวจจับการเคลื่อนไหวนั้น เรามักจะต้องการให้สัญญาณคลื่นแสงอินฟราเรดมีลักษณะเป็นลำเข้ามายังเซนเซอร์
(เหมือนตัวตรวจจับแสงชนิดอื่น ๆ) ดังนั้น เซนเซอร์นี้จึงมักจะมาพร้อมกับเลนซ์สำหรับรวมคลื่นแสงอินฟราเรด
และในทางข้อมูลซึ่งเป็นสัญญาณไฟฟ้านั้น เรามักจะต้องการเพียงข้อมูลดิจิทัลที่บ่งบอกว่า
มีการเคลื่อนไหวเกิดขึ้นหรือไม่ ดังนั้น
พีไออาร์เซนเซอร์จึงมีการใช้งานในลักษณะเป็นโมดูลที่มาพร้อมกับเลนซ์ที่ติดตั้งด้านหน้าและวงจรดิจิทัลที่อยู่ด้านหลังและที่ทำหน้าที่ประมวลสัญญาณในเบื้องต้นเพื่อส่งต่อให้แก่ไมโครคอนโทรลเลอร์
รูปที่ 3
แสดงลักษณะของพีไออาร์เซนเซอร์โมดูลที่มีขายทั่วไปในท้องตลาด
รูปที่
3
พีไออาร์เซนเซอร์โมดูล (ก) ด้านหน้า และ (ข) ด้านหลัง
พีไออาร์เซนเซอร์โมดูลนี้จะรับไฟเลี้ยง (VCC และ GND) และส่งสัญญาณขาออก (Output Signal) แบบดิจิทัล ที่บ่งบอกว่าตรวจพบการเคลื่อนไหวหรือไม่ออกไป ในโมดูลบางรุ่น (เช่นรุ่น HC-SR501 ดังแสดงในรูปที่ 3) จะมีตัวต้านทานปรับค่าได้สำหรับปรับค่าความไวของการตรวจจับ (sensitivity) ซึ่งก็คือการปรับค่าเทรสโฮลด์ และปรับค่าระยะเวลาของพัลส์ (time
duration) สัญญาณดิจิทัลที่บ่งบอกว่าตรวจพบการเคลื่อนไหวแล้ว รูปที่
4 แสดงลักษณะสัญญาณจากเซนเซอร์เทียบกับสัญญาณอ้างอิงและสัญญาณดิจิทัลขาออกซึ่งมีค่าระยะเวลาพัลส์ที่ปรับเปลี่ยนได้
สำหรับจัมเปอร์ที่ใช้ในการเลือกลักษณะของสัญญาณขาออกนั้น
(ดูรูปที่ 3(ข)) จะเป็นการเลือกให้การตรวจจับการเคลื่อนที่มีความต่อเนื่องหรือไม่
นั่นคือจัมเปอร์นี้สามารถกำหนดให้ค่าระยะเวลาพัลส์สามารถเพิ่มขึ้น
หากมีการเคลื่อนไหวอย่างต่อเนื่อง โดยการเซตในรูปที่ 3(ข)
นั้นเป็นลักษณะที่สัญญาณเป็นพัลส์เดี่ยว มีระยะเวลาคงที่
ตามค่าที่ปรับด้วยค่าตัวต้านทานปรับค่าหน่วงเวลา
ซึ่งหากเลื่อนจัมเปอร์นี้มาที่คู่ล่าง
จะเป็นการกำหนดให้พัลส์นี้สามารถยาวนานขึ้นได้
หากเซนเซอร์ยังคงตรวจพบการเคลื่อนไหวต่อไป (หลังจากพบในการเคลื่อนไหวครั้งแรกแล้ว)
รูปที่
4 ลักษณะ (ก) สัญญาณความต่างเทียบกับค่าเทรสโฮลด์ และ
(ข) สัญญาณขาออกของโมดูลเซนเซอร์ตรวจจับการเคลื่อนไหว
การเขียนโปรแกรมรับค่าดิจิทัล
คำสั่งในการใช้งานพีไออาร์เซนเซอร์โมดูลใน
ภาษา Arduino คือ ฟงกชันอินพุตแบบดิจิทัล (Digital Input)
ซึ่งมีฟังก์ชันที่ต้องทราบ 2 ฟังก์ชัน คือ pinMode(pin,
mode) และ คำสั่ง digitalRead(pin)
เปนคําสั่งให้อ่านสถานะทางลอจิกของขาที่ต่อกับเซนเซอร์
โดยค่าที่ส่งคืนมาคือ ลอจิกสูง (HIGH หรือ ค่าตัวเลข 1)
หรือ ลอจิกต่ำ (LOW หรือ ค่าตัวเลข 0) เท่านั้น ขึ้นกับสถานะการตรวจจับการเคลื่อนไหวของเซนเซอร์
โดยการใช้งานคำสั่งนี้ สามารถศึกษาเพิ่มเติมได้จากบทเสริมที่ 1 การใช้งานสวิตช์
การทดลองอ่านค่าจากพีไออาร์เซนเซอร์โมดูล
วัตถุประสงค์
1.
สามารถตอบอร์ด NodeMCU v.3 กับพีไออาร์เซนเซอร์โมดูลได
2.
สามารถเขียนโปรแกรมให้ NodeMCU รับค่าจากเซนเซอร์โมดูลและแสดงผลผ่านพอร์ตอนุกรมได
3.
สามารถปรับเปลี่ยนค่าความไวในการตรวจจับการเคลื่อนไหว
ค่าระยะเวลาพัลส์ และโหมดการส่งสัญญาณออกของพีไออาร์เซนเซอร์โมดูลได้
อุปกรณ์ที่ใช้ในการทดลอง
1. เครี่องคอมพิวเตอร์ที่มีระบบปฏิบัติการ
Windows
(ตั้งแต่ Windows 7 ขึ้นไป)
พร้อมติดตั้งโปรแกรม Arduino IDE 1.8.8 IoT 1
เครื่อง
2. NodeMCU v.3 1
บอร์ด
3. NodeMCU Base
Ver 1.0 1
บอร์ด
4. พีไออาร์เซนเซอร์โมดูล HC-SR501 1 บอร์ด
5. บอร์ดรีเลย์ชนิด
4 ช่อง 1 บอร์ด
6. สาย USB 1
เส้น
7. สายต่อวงจร
(สายจัมพ์ เมีย-เมีย) 6 เส้น
วิธีการทดลอง
1.
ตอวงจรตามรูปที่ 5
2.
เขียนโค้ดข้างล่างนี้แล้วอัปโหลดลง NodeMCU v.3 เพื่อแสดงผลการตรวจจับการเคลื่อนไหวผ่านพอร์ตอนุกรม
รูปที่
5 การเชื่อมต่อ
NodeMCU
v.3 กับบอร์ดพีไออาร์เซนเซอร์โมดูล
3.
เปิด Serial Monitor (Ctrl+Shift+M)
หรือ Serial Plotter (Ctrl+Shift+L)
และสังเกตแอลอีดีบนบอร์ด
โดยสังเกตผลที่เกิดขึ้นเมื่อมีการเคลื่อนไหวผ่านโมดูลเซนเซอร์
4.
ทำการทดลองปรับตัวต้านทานปรับค่าได้ที่อยู่บนโมดูล
และสังเกตการเปลี่ยนแปลงของผลที่ได้รับ รูปที่ 5 แสดงตัวอย่างผลการทดลองที่สังเกตได้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// Detect Motion with PIR Sensor Module // by NodeMCU ESP8266 #define ON LOW // LED is
active low. #define OFF HIGH int PIR_PIN = D0; int LED_PIN = D4; // Internal LED void setup() { Serial.begin(9600); pinMode(PIR_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } void loop() { int st; // st = state
of PIR_Signal st
= digitalRead(PIR_PIN); if(st == HIGH) { Serial.println(1); digitalWrite(LED_PIN,
ON); } else { Serial.println(0); digitalWrite(LED_PIN,
OFF); } delay(200); } |
รูปที่ 6 ตัวอย่างผลการทดลองที่สังเกตได้ผ่าน
Serial
Plotter
แบบฝึกหัดท้ายการทดลอง
ในการทดลอง หากเราต้องการให้สัญญาณจากพีไออาร์เซนเซอร์
ไปสั่งการทำงานของรีเลย์เปิดปิดไฟที่มีการต่อวงจรดังรูปที่ 7 จงเขียนโปรแกรมคำสั่งเพิ่มเติมในส่วนนี้
รูปที่
7 การเชื่อมต่อ
NodeMCU
v.3 กับบอร์ดพีไออาร์เซนเซอร์โมดูล และ บอร์ดรีเลย์