เคยหงุดหงิดไหมครับเวลาระบบกันขโมย DIY ทั่วไปมักจะแจ้งเตือนมั่วซั่ว (False alarms) แค่หมาแมวเดินผ่านก็ดังลั่นบ้าน หรือบางทีก็ต้องพึ่งพาระบบ Cloud ตลอดเวลา พอเน็ตหลุดทีระบบก็ล่มตามไปด้วย? วันนี้เราจะมาแก้ปัญหานี้ด้วยการสร้าง ระบบรักษาความปลอดภัยออฟไลน์ (Offline Smart Security System) ที่เน้นความเป็นส่วนตัว (Privacy-first) ขั้นสุด!
โปรเจกต์นี้เราจะจับคู่ความไวของเซนเซอร์จับความเคลื่อนไหว (PIR Motion Sensing) เข้ากับความฉลาดของ Computer Vision (AI) เพื่อให้มันคัดกรองได้ว่าสิ่งที่ขยับอยู่คือ "คน" จริงๆ หรือเปล่า ผลลัพธ์ที่ได้คือระบบที่ แม่นยำ + รวดเร็ว + และไม่ต้องง้ออินเทอร์เน็ตเลยครับ!
🎯 ฟีเจอร์เด่น (Features)
- ตรวจจับมนุษย์แบบเรียลไทม์ (ใช้เวลาประมวลผล Inference เร็วกว่า 200 ms)
- ไม่ต้องใช้ Cloud / ไม่มีปัญหาข้อมูลส่วนตัวรั่วไหล
- ถ่ายภาพนิ่ง (Snapshot) เก็บไว้ทันทีเมื่อตรวจพบผู้บุกรุก
- มีระบบเสียงแจ้งเตือน (Audible alert)
- ขยายต่อยอดได้สบายๆ (เช่น ส่งแจ้งเตือนเข้า Telegram, ส่งอีเมล ฯลฯ)
🛠️ อุปกรณ์ที่ต้องใช้ (Hardware Components)
ของที่ต้องใช้มีไม่เยอะครับ เน้นตัวท็อปๆ สาย AI ล้วนๆ (หากเพื่อนๆ กำลังมองหาบอร์ด Raspberry Pi, โมดูลกล้อง, เซนเซอร์, หรือ เส้นพลาสติก 3D Print คุณภาพสูง เอาไปปริ้นท์ทำเคสกล้องวงจรปิดติดกำแพงเท่ๆ สามารถแวะไปช้อปปิ้งได้ที่ Globalbyte เลยครับ ครบจบในที่เดียว!)
-
Raspberry Pi 4 Model B x1
-
Google Coral USB Accelerator x1 (ตัวเร่งประมวลผล AI สุดโหด)
-
PIR Motion Sensor (รุ่นทั่วไป) x1
-
Buzzer (ลำโพงขนาดเล็ก) x1
- สาย Jumper wires x1 ชุด
- อแดปเตอร์จ่ายไฟ Digilent 5V 4000mA Switching Power Supply x1
- โมดูลกล้อง (Camera Module) สายแพ CSI
🔌 การต่อวงจร (Wiring Diagram)
การต่อสายง่ายมากๆ ครับ ต่อตามขาพิน (GPIO) ด้านล่างนี้ได้เลย:
-
PIR Sensor → Raspberry Pi
- VCC → 5V
- GND → GND
- OUT → GPIO17
-
Buzzer → Raspberry Pi
- ขั้วบวก (+) → GPIO27
- ขั้วลบ (-) → GND
-
Camera: เสียบสายแพ (Ribbon cable) เข้าที่พอร์ต CSI ของ Raspberry Pi
-
Coral USB: เสียบเข้าที่พอร์ต USB 3.0 สีฟ้าของ Raspberry Pi ได้เลยครับ
🧠 สถาปัตยกรรมระบบ (System Architecture)
เพื่อให้เห็นภาพว่าระบบมันทำงานยังไง ลองดู Flow การทำงานตามนี้ครับ:
-
[PIR Trigger]: เซนเซอร์ PIR ตรวจจับความเคลื่อนไหวได้
-
[Capture Image]: สั่งให้กล้องถ่ายภาพทันที
-
[AI Model (Edge TPU)]: ส่งภาพเข้าไปประมวลผลใน Google Coral
-
[Person Detected?]: AI วิเคราะห์ว่าเป็น "มนุษย์" หรือไม่?
- ถ้า YES (ใช่) → สั่งให้ [Alert] เสียง Buzzer ดัง
- ถ้า NO (ไม่ใช่) → [Ignore] ข้ามไป ไม่ต้องแจ้งเตือน
⚙️ การตั้งค่าซอฟต์แวร์ (Software Setup)
เปิด Terminal บน Raspberry Pi แล้วทำตามสเตปด้านล่างนี้ได้เลยครับ:
1. Install OS: แฟลช Raspberry Pi OS (เวอร์ชัน 64-bit) ลงใน MicroSD Card ให้เรียบร้อย
2. Install Dependencies: พิมพ์คำสั่งเพื่อลงไลบรารีที่จำเป็น
sudo apt update
sudo apt install python3-pip
pip3 install opencv-python numpy pillow
3. Install Coral TPU Runtime: ติดตั้งไดรเวอร์สำหรับ Google Coral USB Accelerator
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
sudo apt update
sudo apt install libedgetpu1-std
📦 Download Model: สำหรับโปรเจกต์นี้เราจะใช้โมเดล AI ที่คอมไพล์มาแล้วสำเร็จรูปชื่อว่า: mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite ครับ
💻 โค้ด Python ฉบับเต็ม (Full Python Code)
เมื่อเตรียมทุกอย่างพร้อมแล้ว นำโค้ดด้านล่างนี้ไปเซฟเป็นไฟล์ (เช่น security.py) และรันได้เลยครับ! โค้ดนี้จะคอยเฝ้ารอสัญญาณจาก PIR พอมีคนเดินผ่านปุ๊บ มันจะเรียก AI มาตรวจจับใบหน้า ถ้าเจอคนเมื่อไหร่ เสียงเตือนจะดังทันทีและเซฟรูปผู้บุกรุกเก็บไว้ด้วยครับ
import cv2
import time
import RPi.GPIO as GPIO
from pycoral.adapters import common
from pycoral.adapters import detect
from pycoral.utils.edgetpu import make_interpreter
# GPIO setup
PIR_PIN = 17
BUZZER_PIN = 27
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR_PIN, GPIO.IN)
GPIO.setup(BUZZER_PIN, GPIO.OUT)
# Load model
interpreter = make_interpreter('model.tflite')
interpreter.allocate_tensors()
cap = cv2.VideoCapture(0)
def alert():
GPIO.output(BUZZER_PIN, True)
time.sleep(1)
GPIO.output(BUZZER_PIN, False)
while True:
if GPIO.input(PIR_PIN):
print("Motion detected!")
ret, frame = cap.read()
if not ret:
continue
_, scale = common.set_resized_input(
interpreter, (frame.shape[1], frame.shape[0]), lambda size: cv2.resize(frame, size)
)
interpreter.invoke()
objs = detect.get_objects(interpreter, 0.5, scale)
for obj in objs:
if obj.id == 0: # person class
print("Human detected!")
cv2.imwrite("intruder.jpg", frame)
alert()
break
time.sleep(0.5)
🚀 แนวทางการพัฒนาในอนาคต (Future Improvements)
โปรเจกต์นี้ยังสามารถต่อยอดความเจ๋งได้อีกเยอะเลยครับ เช่น:
- เพิ่มระบบส่งแจ้งเตือนเข้า Telegram alerts
- ใส่ระบบ Face recognition เพื่อแยกคนในบ้านกับคนนอก
- ปรับแต่งกล้องให้รองรับ Night vision สำหรับมองตอนกลางคืน
- เพิ่มระบบ Battery backup สำรองไฟตอนไฟดับ
- สร้าง Web dashboard เอาไว้ดูภาพคนบุกรุกผ่านเบราว์เซอร์
อ้างอิงข้อมูลจาก: Globalbyteshop Blog
ต้นฉบับโปรเจกต์โดย: arpit8 | Original Link
*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากโปรเจกต์ต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา สามารถตรวจสอบข้อมูลเชิงลึกและโครงสร้างดั้งเดิมได้ที่
ต้นฉบับภาษาอังกฤษ