กลับไปหน้ารวมไฟล์
security-system-using-pir-sensor-12b6ff.md

ชื่อโปรเจกต์: ระบบรักษาความปลอดภัยด้วย PIR Sensor

โปรเจกต์นี้พี่จัดทำขึ้นมาเพื่อส่งในวิชา Robotics ของพี่เองแหละน้อง ใครอยากลองเล่นใน Simulator ก่อน ก็ลองหาดูใน TinkerCad ได้นะ จัดไปวัยรุ่น!

มาส่อง Code กันหน่อยดีกว่า:

LiquidCrystallcd(2,3,4,5,6,7); เป็นการประกาศเรียกใช้งาน (initializes) ตัว LiquidCrystal Class เพื่อบอกบอร์ดว่าเราต่อขากับหน้าจอ LCD ยังไงบ้าง

int ledPin = 12;
const int PIRPin = 8;
int pirState = LOW;
int val = 0;
int photoCellPin = A0;
int photoCellReading;
int speakerPin = 10;                                                           

ตรงนี้คือการประกาศ Variable (ตัวแปร) ต่างๆ เตรียมพร้อมเอาไว้ใช้งาน

void setup()
{
 lcd.begin(16,2);
 pinMode(ledPin, OUTPUT);
 pinMode(PIRPin, INPUT);
 pinMode(photoCellPin, INPUT);
 pinMode(speakerPin, INPUT);
 Serial.begin(9600);
 lcd.setCursor(0,0);
 lcd.print("P.I.R Motion And");
 lcd.setCursor(0,1);
 lcd.print("light sensors");
 delay(2000);
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Processing Data.");
 playTone(300,300);
 delay(150);
 playTone(0,0);
 delay(3000);
 lcd.clear();
 lcd.setCursor(3,0);
 lcd.print("Waiting For");
 lcd.setCursor(3,1);
 lcd.print("Motion...");
}

ส่วนของ setup() นี้ พี่เอาไว้ตั้งค่าพวก Sensor ต่างๆ และสั่งให้หน้าจอ LCD มันโชว์ข้อความต้อนรับเท่ๆ นิดนึง แล้วก็สั่งให้มีเสียงปี๊ดออกมาเบาๆ พอเป็นพิธี

void loop()
{
 val = digitalRead(PIRPin);
 photoCellReading = analogRead(photoCellPin);
 if(val == HIGH)
 {
   digitalWrite(ledPin, HIGH);
   if(pirState == LOW)
   {
     Serial.println("Motion Detected");
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Motion Detected");
     lcd.setCursor(0,1);
     lcd.print(photoCellReading);
     playTone(300,300);
     delay(150);
     playTone(0,0);
     pirState = HIGH;
   }
 } else
 {
   digitalWrite(ledPin, LOW);
   delay(300);
   scrollScreenSaver();
   if(pirState == HIGH)
   {
     Serial.println("Motion Ended");
     pirState = LOW;
   }
 }
}

ในส่วน loop() จะทำหน้าที่เช็คว่ามีใครเดินตัดหน้า PIR Sensor ของเราหรือเปล่า ถ้าเจอตัวล่ะก็... สั่ง Alarm ให้ดังลั่นบ้านเลย! แต่ถ้าไม่มีใครผ่าน (เหงาๆ) ก็ให้มันรันข้อความเก๋ๆ ไปแทน

void playTone(long duration, int freq)
{
 duration *= 1000;
 int period = (1.0/freq)*100000;
 long elapsed_time = 0;
 while(elapsed_time < duration)
 {
   digitalWrite(13, HIGH);
   digitalWrite(speakerPin, HIGH);
   delayMicroseconds(period/2);
   digitalWrite(13, LOW);
   digitalWrite(speakerPin, LOW);
   delayMicroseconds(period/2);
   elapsed_time += (period);
 }
}

นี่คือ Function สำหรับสร้างเสียงเตือน (Alarm) นั่นเอง ใครชอบเสียงแบบไหนไปปรับจูนกันเอาเองนะน้อง

void scrollScreenSaver()
{
 lcd.clear();
 lcd.setCursor(15,0);
 lcd.print("No Motion");
 lcd.setCursor(15,1);
 lcd.print("Waiting");
 for(int i = 0; i < 22; i++)
 {
   lcd.scrollDisplayLeft();
   delay(150);
 }
}

ส่วนอันนี้คือ Function สำหรับเลื่อนข้อความตอนว่างงาน (Screen Saver) ให้หน้าจอ LCD มันดูมีอะไรหน่อย ไม่ใช่ปล่อยนิ่งๆ จนจืดชืด

รายละเอียดเจาะลึกแบบวิศวะ (EXPANDED TECHNICAL DETAILS)

การตรวจจับการบุกรุกด้วย Passive Infrared (PIR)

โปรเจกต์นี้โชว์หลักการพื้นฐานของการตรวจจับความร้อนที่เคลื่อนไหว เพื่อสร้างระบบแจ้งเตือนความปลอดภัยที่เชื่อถือได้และที่สำคัญคือ "กินไฟต่ำ" มากนะน้อง

  • Fresnel-Lens Thermal Analysis: ตัว Arduino จะทำหน้าที่คุยกับ PIR Sensor โดยอาศัยเลนส์ Fresnel (ไอ้ฝาครอบกลมๆ นั่นแหละ) ช่วยวิเคราะห์ Firmware ของเราจะแยกแยะรังสี IR ที่เกิดจากคนเดินผ่านได้แม่นยำ ไม่ไปมั่วซั่วกับพวกแหล่งความร้อนนิ่งๆ อย่างพวกเครื่องทำความร้อนหรือพัดลม
  • Dual-State Alert Sequencer: พี่ใส่ระบบเตือน 2 จังหวะไว้ด้วย คือ "Soft Alert" (ไฟ LED ติดเตือนขำๆ) ในช่วง 3 วินาทีแรกที่เจอการเคลื่อนไหว แต่ถ้าไอ้ขโมยมันยังไม่ไปไหนและขยับต่อ คราวนี้จะเจอ "Hard Alert" (Piezo Siren ร้องระงม แถมส่งข้อความ GSM แจ้งเตือน) งานนี้มีวงแตกแน่นอน!

การทำ Prototype (Prototyping)

  • TinkerCad Simulated Verification: พี่ลองเทส Logic ทั้งหมดใน TinkerCad มาให้หมดแล้ว ทั้งการจัดการไฟ 5V และจังหวะการ Trigger ของ PIR Sensor มั่นใจได้ว่าทุกอย่างเป๊ะก่อนจะลงมือต่อวงจรจริง ห้ามทำช็อตนะตัวนี้ สู้งานหน่อยน้อง!

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

title: "Security System Using PIR Sensor"
description: "This is a Security System Using PIR"
author: "roshan-baig"
category: ""
tags:
  - "home automation"
  - "security"
views: 3008
likes: 0
price: 299
difficulty: "Intermediate"
components:
  - "1x Buzzer"
  - "1x PIR Sensor, 7 m"
  - "1x Arduino UNO"
  - "1x 5 mm LED: Red"
  - "1x Trimmer Potentiometer, 250 kohm"
  - "1x Resistor 220 ohm"
  - "1x RGB Backlight LCD - 16x2"
  - "1x Photo resistor"
  - "1x Resistor 10k ohm"
  - "2x Through Hole Resistor, 1 kohm"
tools: []
apps:
  - "1x TinkerCad"
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "2f27c97012671efb205e20fa2090c223974f1324859f9257fe730819d1a9424b"
encryptedPayload: "U2FsdGVkX1+3vYLXfG3Xg4UC4i27v/6r7wJFkMFlUaAa5fCrT6jQlhKtBqC85ee6NTIvUS8jqfsyuvWUH721r2o/lLnUtA3XDU7gvsMsIkoCxCnB3zP/fnrYEM5jkH7J"
seoDescription: "Build a Security System Using PIR Sensor and Arduino to detect motion and enhance home security."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/security-system-using-pir-sensor-12b6ff_cover.jpg"
lang: "th"