กลับไปหน้ารวมไฟล์
pir-sensor-integration-9e726a.md

Please visit https://proteshea.com/interface-a-pir-sensor/ for a complete list of materials needed for this project.


บทนำ (Introduction)

ในโปรเจกต์นี้ เราจะยกระดับการเรียนรู้จากโปรเจกต์ที่ผ่านมา (DHT11) โดยการเปลี่ยนมาใช้งานเซนเซอร์ตรวจจับความเคลื่อนไหวชนิด Passive InfraRed (PIR) ซึ่งเป็นอุปกรณ์ที่ได้รับความนิยมอย่างมากในระบบรักษาความปลอดภัยและระบบอัตโนมัติภายในบ้าน เซนเซอร์ PIR รุ่นที่เราเลือกใช้นี้มีความสามารถในการตรวจจับการเคลื่อนไหวได้ไกลถึง 30 ฟุต (ประมาณ 9 เมตร) ในมุมกว้างถึง 180 องศา ซึ่งเหมาะอย่างยิ่งสำหรับการสร้างระบบเตือนภัยเบื้องต้น หรือระบบเปิด-ปิดไฟอัตโนมัติในห้องเรียนและสำนักงานเพื่อการประหยัดพลังงาน


การเชื่อมต่อหน้าจอ LCD Character ขนาด 16x2

สำหรับการแสดงผลสถานะ เรายังคงเลือกใช้หน้าจอ LCD ขนาด 16 ตัวอักษร 2 บรรทัด ในโหมดการเชื่อมต่อแบบ 4-bit mode เพื่อประหยัดขา I/O ของ Arduino Uno โดยคุณสามารถศึกษารายละเอียดเชิงลึกได้จากบทความ "Interface a 16x2 Character LCD" ของเรา

การเชื่อมต่อขา (Pin Mapping):

  • LCD Pin 4 (RS), 6 (E): ต่อเข้ากับขา Digital 2 และ 3 ของ Arduino Uno ตามลำดับ
  • LCD Pin 11, 12, 13, 14 (Data Lines): ต่อเข้ากับขา Digital 4, 5, 6 และ 7 ของ Arduino Uno

หากคุณใช้ระบบ Modulus Canister หน้าจอ LCD จะถูกติดตั้งผ่านเฮดเดอร์ตัวเมียแบบงอ (Right-angle female header) 16 พิน ที่บัดกรีเข้ากับลิงก์แบบ 1-to-1 ดังที่แสดงในภาพด้านล่าง

การติดตั้งจอ LCD 16x2 เข้ากับ Modulus ด้วย 16-Pin Right-Angle Female Header

แต่หากคุณต้องการทดลองบนโปรโตบอร์ด (Solderless Breadboard) ก็สามารถเชื่อมต่อได้ตามวงจรมาตรฐานนี้:

การต่อวงจร LCD บน Solderless Breadboard

เจาะลึกการทำงานของเซนเซอร์ Passive InfraRed (PIR)

เซนเซอร์ PIR ที่เราเลือกใช้ประกอบด้วย 4 พินหลัก ได้แก่ GND, VCC, OUT, และ EN (Enable)

หลักการทางวิศวกรรม: ภายในโดมสีขาวที่เรียกว่า Fresnel Lens (ทำหน้าที่รวมแสงอินฟราเรดจากหลายทิศทางมายังตัวรับ) จะมีเซนเซอร์ชนิด Pyroelectric ที่มีช่องรับสัญญาณสองช่อง (Dual Slots) เซนเซอร์นี้ไม่ได้ "ปล่อย" แสงออกมา แต่จะ "รับ" รังสีอินฟราเรด (ความร้อน) ที่แผ่ออกมาจากวัตถุ

  1. สภาวะปกติ: เมื่อไม่มีการเคลื่อนไหว ทั้งสองช่องจะได้รับรังสีอินฟราเรดในปริมาณที่เท่ากัน (วัดจากอุณหภูมิห้องหรือสิ่งของที่อยู่นิ่ง)
  2. เมื่อมีการเคลื่อนไหว: เมื่อมีสิ่งมีชีวิต (เช่น มนุษย์หรือสัตว์) เคลื่อนที่ผ่าน รังสีความร้อนจากร่างกายจะไปตกกระทบที่ช่องรับสัญญาณช่องแรกก่อนช่องที่สอง ทำให้เกิดความต่างศักย์ระหว่างสองช่องนี้ วงจรภายในจะประมวลผลและส่งสัญญาณ Digital High ออกมาทางขา OUT

คุณสามารถปรับความไว (Sensitivity) และระยะเวลาหน่วงสัญญาณได้ผ่านตัวต้านทานปรับค่าได้ (Potentiometer) ที่อยู่ด้านหลังโมดูล

ข้อมูลทางเทคนิค (Specifications):


การประกอบวงจรและติดตั้ง (Hardware Setup)

หากคุณทำโปรเจกต์ DHT11 มาก่อนหน้านี้ ให้ถอดเซนเซอร์ตัวเดิมออกและเสียบเซนเซอร์ PIR แทนที่ ในกรณีที่ใช้งานร่วมกับ Modulus ให้บัดกรีเฮดเดอร์ตัวเมีย 4 พินแบบงอ และเฮดเดอร์ตัวผู้แถวเดี่ยว 4 พินไว้ข้างกัน จากนั้นทำการสร้าง Solder Bridge (สะพานบัดกรี) เพื่อเชื่อมต่อพินที่สอดคล้องกันสำหรับการ Wire-wrap

การติดตั้ง Header ตัวผู้และตัวเมียบน Modulus
การเชื่อมสะพานบัดกรีระหว่างพิน

ขั้นตอนการเดินสายไฟ:

  1. เสียบ Modulus Canister เข้ากับคอนเน็กเตอร์ 4x26 พินบน FuelCan
  2. GND: เชื่อมต่อพินซ้ายสุดของเฮดเดอร์ตัวผู้ไปยังจุด Ground บน Modulus
  3. VCC (+5Vdc): เชื่อมต่อพินที่สองจากซ้ายไปยังแหล่งจ่ายไฟ +5V
  4. OUT: เชื่อมต่อไปยังขา Digital 8 ของ Arduino Uno (ใช้สาย F/M ยาว 12 นิ้ว)
  5. EN (Enable): เชื่อมต่อไปยังขา Digital 9 ของ Arduino Uno เพื่อสั่งเปิดการทำงานของเซนเซอร์
เซนเซอร์ PIR ที่ติดตั้งบน Modulus เรียบร้อยแล้ว

สำหรับผู้ที่ใช้งาน Breadboard สามารถอ้างอิงแผนผังวงจร (Schematic) ได้ที่นี่:

แผนผังวงจร (Circuit Schematic)

การเชื่อมต่อ FuelCan

ตรวจสอบการติดตั้ง Arduino Uno บนพื้นที่ Prototyping ของ FuelCan หากใช้ Breadboard แนะนำให้วางไว้ในช่องเก็บของด้านล่างเพื่อความเป็นระเบียบและลดความยาวสายไฟ จ่ายไฟ +5V และ Ground เข้าที่ Power Rail ของ Breadboard โดยใช้สาย Banana Jack และอย่าลืมเชื่อมต่อสาย USB Type A ไปยังคอมพิวเตอร์และ Type B เข้ากับ Arduino เพื่อทำการอัปโหลดโปรแกรม


การวิเคราะห์ลอจิกของซอฟต์แวร์ (Software Analysis)

ในส่วนของโค้ดโปรแกรม มีจุดที่น่าสนใจในการจัดการประสิทธิภาพการแสดงผล ดังนี้:

  1. Initialization: ในฟังก์ชัน setup() เราจะสั่งให้ขา EN (ขา 9) เป็น HIGH เพื่อเปิดการทำงานของเซนเซอร์ PIR
  2. Polling & State Management: ในฟังก์ชัน loop() โปรแกรมจะทำการอ่านค่าจากขา OUT (ขา 8) ตลอดเวลา
  3. กลไก nomotionflag: นี่คือส่วนสำคัญทางวิศวกรรมซอฟต์แวร์ เพื่อป้องกันไม่ให้หน้าจอ LCD เกิดการกะพริบจากการเขียนข้อมูลเดิมซ้ำๆ (Overhead)
    • เมื่อไม่มีการเคลื่อนไหวและ nomotionflag เป็น 0: หน้าจอจะแสดง "No motion" และตั้งค่าแฟล็กเป็น 1 เพื่อหยุดการเขียนซ้ำ
    • เมื่อมีการเคลื่อนไหว: หน้าจอจะแสดง "Motion detected" และรีเซ็ตแฟล็กกลับเป็น 0 เพื่อเตรียมพร้อมสำหรับการแจ้งเตือนครั้งต่อไป

Source Code สำหรับโปรเจกต์:

#include <LiquidCrystal.h>

// กำหนดพินสำหรับ LCD
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

const int pirOutPin = 8;
const int pirEnablePin = 9;
int nomotionflag = 0;

void setup() {
  lcd.begin(16, 2);
  pinMode(pirOutPin, INPUT);
  pinMode(pirEnablePin, OUTPUT);
  
  // เปิดการทำงานของเซนเซอร์ PIR
  digitalWrite(pirEnablePin, HIGH);
  
  lcd.print("PIR Initializing");
  delay(2000); // ให้เวลาเซนเซอร์ในการคาลิเบรตสภาพแวดล้อม
  lcd.clear();
}

void loop() {
  int sensorValue = digitalRead(pirOutPin);

  if (sensorValue == HIGH) {
    lcd.setCursor(0, 0);
    lcd.print("Status:         ");
    lcd.setCursor(0, 1);
    lcd.print("Motion Detected ");
    nomotionflag = 0; // รีเซ็ตแฟล็กเมื่อเจอการเคลื่อนไหว
  } 
  else {
    if (nomotionflag == 0) {
      lcd.setCursor(0, 0);
      lcd.print("Status:         ");
      lcd.setCursor(0, 1);
      lcd.print("No Motion       ");
      nomotionflag = 1; // ตั้งแฟล็กเพื่อไม่ให้เขียนหน้าจอซ้ำโดยไม่จำเป็น
    }
  }
  delay(100); 
}

เมื่อคุณอัปโหลดโค้ดนี้แล้ว ลองเดินผ่านหน้าเซนเซอร์หรือโบกมือ คุณจะเห็นการตอบสนองที่รวดเร็วบนหน้าจอ LCD ซึ่งเป็นรากฐานสำคัญในการพัฒนาโปรเจกต์ระบบอัตโนมัติขั้นสูงต่อไป

ข้อมูล Frontmatter ดั้งเดิม

title: "PIR Sensor Integration"
description: "Detect movement up to 30' away which is useful in motion-activated projects such as a security system or automatic lighting in a classroom."
author: "ejshea"
category: "Sensors & Environment"
tags:
  - "home automation"
  - "security"
  - "monitoring"
views: 21340
likes: 5
price: 699
difficulty: "Easy"
components: []
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "4df3055c958276b93e3f60e516b0fcf634bd905b9076af3326c4aab154ed7619"
encryptedPayload: "U2FsdGVkX1/rgh9XD3jN4t3XnAtyszsgsXFe9vakq4dwZSgy4JAngOYOwCmBwixTJvnG6CAjG9CTVxeGb3I8Mr62eBxvLDj5v+eQFt5lTsY="
seoDescription: "Learn how to integrate a PIR Sensor for motion detection in Arduino projects like security systems and automatic lighting."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/pir-sensor-integration-9e726a_cover.jpg"
lang: "en"