การใช้งานโมดูลเซนเซอร์ตรวจจับการเคลื่อนไหว

เซนเซอร์ตรวจจับการเคลื่อนไหว

การตรวจจับการเคลื่อนไหวที่จะกล่าวถึงในบทนี้ คือการตรวจจับการเคลื่อนไหวของมนุษย์ด้วยเซนเซอร์ชนิดไพโรอิเล็กทริกอินฟราเรด (pyroelectric infrared sensor) หรือมีอีกชื่อหนึ่งว่าเซนเซอร์อินฟราเรดชนิดพาสซิฟ (passive infrared sensor) และเรียกย่อ ๆ ว่า พีไออาร์เซนเซอร์ (PIR sensor) โดยเซนเซอร์นี้สามารถแปลงคลื่นแสงอินฟราเรด  (infrared, IR) ที่เกิดจากการแผ่รังสีจากวัตถุที่มีอุณหภูมิสูงกว่าสิ่งแวดล้อมให้เป็นสัญญาณทางไฟฟ้าได้ รูปที่ 1(ก) แสดงภาพถ่ายของเซนเซอร์ชนิดนี้

พีไออาร์เซนเซอร์มีส่วนประกอบภายในที่สำคัญคือ ภายในตัวเซนเซอร์จะมีช่องรับคลื่นแสงอินฟราเรดสองช่อง (ดูรูปที่ 1(ข)) ซึ่งเปรียบได้ว่าภายในมีเซนเซอร์สองตัวที่ต่ออนุกรมกันอยู่ภายใน และมีวงจรทรานซิสเตอร์ (เจเฟต) อยู่ด้วย เซนเซอร์ที่ใช้นี้จะตรวจจับคลื่นแสงอินฟราเรดที่เปล่งออกมาจากสิ่งมีชีวิต เนื่องจากสิ่งที่มีความร้อนทุกชนิดจะเปล่งรังสีอินฟราเรดออกมา นั่นคือ ในขณะที่ไม่มีการเคลื่อนไหว เซนเซอร์ทั้งสองช่องจะได้รับสัญญาณพื้นหลังจากสิ่งของต่าง ๆ เท่ากันทำให้ไม่มีความต่างของสัญญาณจากเซนเซอร์ทั้งสอง แต่เมื่อมีวัตถุที่เปล่งคลื่นแสงอินฟราเรดเคลื่อนที่ผ่านเซนเซอร์ก็จะก่อให้เกิดสัญญาณความต่างขึ้น เนื่องจากเซนเซอร์ตรวจจับสัญญาณจากวัตถุได้ไม่เท่ากันในขณะที่วัตถุเคลื่อนที่ โดยสัญญาณนี้จะเป็นค่าบวกและลบสลับกันตามลำดับเวลา รูปที่ 2 แสดงลักษณะการเคลื่อนที่ผ่านของวัตถุและลักษณะสัญญาณที่ได้รับ โดยเมื่อได้รับสัญญาณแล้ว วงจรประมวลผลก็จะเอาค่าสูงสุดของสัญญาณมาเปรียบเทียบกับค่าเทรสโฮลด์ (threshold value) ในลำดับถัดไป เพื่อบ่งบอกว่ามีการเคลื่อนที่ของวัตถุหรือไม่

 

image description

 

รูปที่ 1 (ก) ภาพถ่ายและ (ข) ลักษณะวงจรภายในของพีไออาร์เซนเซอร์

 

 

image description

 

รูปที่ 2 หลักการและสัญญาณจากการตรวจจับการเคลื่อนไหวด้วยพีไออาร์เซนเซอร์

 

 

ในการตรวจจับการเคลื่อนไหวนั้น เรามักจะต้องการให้สัญญาณคลื่นแสงอินฟราเรดมีลักษณะเป็นลำเข้ามายังเซนเซอร์ (เหมือนตัวตรวจจับแสงชนิดอื่น ๆ) ดังนั้น เซนเซอร์นี้จึงมักจะมาพร้อมกับเลนซ์สำหรับรวมคลื่นแสงอินฟราเรด และในทางข้อมูลซึ่งเป็นสัญญาณไฟฟ้านั้น เรามักจะต้องการเพียงข้อมูลดิจิทัลที่บ่งบอกว่า มีการเคลื่อนไหวเกิดขึ้นหรือไม่ ดังนั้น พีไออาร์เซนเซอร์จึงมีการใช้งานในลักษณะเป็นโมดูลที่มาพร้อมกับเลนซ์ที่ติดตั้งด้านหน้าและวงจรดิจิทัลที่อยู่ด้านหลังและที่ทำหน้าที่ประมวลสัญญาณในเบื้องต้นเพื่อส่งต่อให้แก่ไมโครคอนโทรลเลอร์ รูปที่ 3 แสดงลักษณะของพีไออาร์เซนเซอร์โมดูลที่มีขายทั่วไปในท้องตลาด

 

image description

 

รูปที่ 3 พีไออาร์เซนเซอร์โมดูล (ก) ด้านหน้า และ (ข) ด้านหลัง

 

พีไออาร์เซนเซอร์โมดูลนี้จะรับไฟเลี้ยง (VCC และ GND) และส่งสัญญาณขาออก (Output Signal) แบบดิจิทัล ที่บ่งบอกว่าตรวจพบการเคลื่อนไหวหรือไม่ออกไป ในโมดูลบางรุ่น (เช่นรุ่น HC-SR501 ดังแสดงในรูปที่ 3) จะมีตัวต้านทานปรับค่าได้สำหรับปรับค่าความไวของการตรวจจับ (sensitivity) ซึ่งก็คือการปรับค่าเทรสโฮลด์ และปรับค่าระยะเวลาของพัลส์ (time duration) สัญญาณดิจิทัลที่บ่งบอกว่าตรวจพบการเคลื่อนไหวแล้ว รูปที่ 4 แสดงลักษณะสัญญาณจากเซนเซอร์เทียบกับสัญญาณอ้างอิงและสัญญาณดิจิทัลขาออกซึ่งมีค่าระยะเวลาพัลส์ที่ปรับเปลี่ยนได้

สำหรับจัมเปอร์ที่ใช้ในการเลือกลักษณะของสัญญาณขาออกนั้น (ดูรูปที่ 3(ข)) จะเป็นการเลือกให้การตรวจจับการเคลื่อนที่มีความต่อเนื่องหรือไม่ นั่นคือจัมเปอร์นี้สามารถกำหนดให้ค่าระยะเวลาพัลส์สามารถเพิ่มขึ้น หากมีการเคลื่อนไหวอย่างต่อเนื่อง โดยการเซตในรูปที่ 3(ข) นั้นเป็นลักษณะที่สัญญาณเป็นพัลส์เดี่ยว มีระยะเวลาคงที่ ตามค่าที่ปรับด้วยค่าตัวต้านทานปรับค่าหน่วงเวลา ซึ่งหากเลื่อนจัมเปอร์นี้มาที่คู่ล่าง จะเป็นการกำหนดให้พัลส์นี้สามารถยาวนานขึ้นได้ หากเซนเซอร์ยังคงตรวจพบการเคลื่อนไหวต่อไป (หลังจากพบในการเคลื่อนไหวครั้งแรกแล้ว)

 

image description

 

รูปที่ 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 เพื่อแสดงผลการตรวจจับการเคลื่อนไหวผ่านพอร์ตอนุกรม

 

image description

 

รูปที่ 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);

}

 

 

image description

 

รูปที่ 6 ตัวอย่างผลการทดลองที่สังเกตได้ผ่าน Serial Plotter

 

แบบฝึกหัดท้ายการทดลอง

ในการทดลอง หากเราต้องการให้สัญญาณจากพีไออาร์เซนเซอร์ ไปสั่งการทำงานของรีเลย์เปิดปิดไฟที่มีการต่อวงจรดังรูปที่ 7 จงเขียนโปรแกรมคำสั่งเพิ่มเติมในส่วนนี้

 

image description

 

รูปที่ 7 การเชื่อมต่อ NodeMCU v.3 กับบอร์ดพีไออาร์เซนเซอร์โมดูล และ บอร์ดรีเลย์