กลับไปหน้ารวมไฟล์
lidar-intrusion-detector-aa69b2.md

พี่อยากได้เซ็นเซอร์ตรวจจับการบุกรุกสำหรับทางเข้ารถที่บ้าน แบบติดตั้งนอกบ้านนะ รัศมีต้องไกลกว่า PIR และต้องไม่หลอกตีฟ้อง (false alarm) ให้กวนใจ รัศมีที่ต้องการคือ 40 ฟุต ส่วนใหญ่เซ็นเซอร์ PIR ทำได้แค่ประมาณ 30 ฟุต แถมยังชอบส่งสัญญาณหลอกอีกต่างหาก พี่มีระบบรักษาความปลอดภัยในบ้านอยู่แล้ว แต่ไม่มีเซ็นเซอร์ตัวไหนที่เชื่อถือได้พอจะครอบคลุมทางเข้ารถทั้งหมด แหล่งจ่ายไฟที่วางแผนไว้คืออะแดปเตอร์ USB 5VDC ที่เสียบกับปลั๊ก AC แต่พี่ก็อยากลองใช้พลังงานจากแบตเตอรี่ด้วย เพราะแถวๆ ทางเข้ารถไม่มีปลั๊กไฟข้างนอกให้ใช้ใกล้ๆ เลย

เริ่มแรกพี่ใช้ Arduino Uno แล้วลองเล่นกับเซ็นเซอร์หลายแบบเลย ทั้ง PIR, กล้องถ่ายภาพความร้อน (thermal camera), อัลตราโซนิค PING และเรดาร์แถบ X (X-band radar) ไม่มีตัวไหนได้ระยะตามที่พี่ต้องการเลย พี่ลอง PIR เซ็นเซอร์หลายรุ่นก็พบว่ามันยังชอบตีฟ้องเหมือนเดิม ต่อไปพี่เลยลองใช้ Garmin LIDARLite v3HP เซ็นเซอร์ตัวนี้ทำงานได้ดีสำหรับการตรวจจับการขัดขวางลำแสง (beam interruption) และไม่ได้รับผลกระทบจากสภาพอากาศหรือการเปลี่ยนแปลงของแสงภายนอก ไม่เหมือนลำแสงโฟโตอิเล็กทริกของประตูโรงรถ เซ็นเซอร์ LIDAR ไม่จำเป็นต้องมีรีเฟลกเตอร์ (reflector) และมีระยะที่ไกลกว่ามาก ตอนแรกพี่ใช้อินเทอร์เฟซ Pulse Width Modulation (PWM) ซึ่งทำงานได้ค่อนข้างดี แต่ก็ยังสร้างสัญญาณหลอกบ้างเนื่องจากความไม่เสถียรของการอ่านค่าระยะทาง

ต่อมาพี่ต้องเชื่อมต่อมันกับเครือข่าย wifi ที่บ้าน พี่เลยเพิ่ม WINC1500 wifi shield และโมดูล DS1307 Real Time Clock (RTC) breakout บน Uno prototype shield อีกที RTC จำเป็นเพื่อให้ได้ข้อมูลเวลาที่แม่นยำเมื่อตรวจจับการบุกรุก โปรเจคบน Uno นั้นหน่วยความจำไม่พอสำหรับสเก็ตช์ WIFI และด้วยฟอร์มแฟกเตอร์ที่มีชีลด์สองอัน มันใหญ่เกินไปและกินกระแสไฟมากเกินกว่าจะใช้กับแบตเตอรี่ LiPo ได้นาน

ถึงจุดนี้พี่ก็ตาสว่าง นี่มันเคสที่เหมาะเจาะกับบอร์ด IoT (Internet of Things) สุดๆ เลยพี่เลยเปลี่ยนมาใช้ Arduino MKR WIFI 1010 แทน MKR 1010 มีหน่วยความจำแฟลช 256KB และ SRAM 32KB เทียบกับ Uno ที่มีแฟลช 32KB และ SRAM แค่ 2KB MKR 1010 ยังมีขนาดเล็กกว่า ใช้กระแสไฟน้อยกว่า และมี real time clock, WIFI และ Bluetooth ในตัวอีกด้วย

MKR 1010 เชื่อมต่อกับเครือข่าย wifi ของพี่ได้ง่ายมาก และมีหน่วยความจำเหลือเฟือสำหรับสเก็ตช์ของพี่และไลบรารีทั้งหมดที่ต้องการ RTC ก็ทำงานได้ดีมาก ปัญหาถัดไปที่ต้องแก้คือจะส่งการแจ้งเตือนแบบพุช (push notification) ไปที่ iPhone XS ของพี่ยังไง พี่เสิร์ชในเน็ตพบเว็บเซอร์วิสที่น่าจะใช้ได้สามตัวคือ Blynk, Amazon Web Services (AWS) และ Pushsafer การส่งการแจ้งเตือนพุชไปยังอุปกรณ์ iOS หรือ Android จำเป็นต้องติดตั้งแอปตัวรับสัญญาณ (listener app) ไม่มีตัวไหนฟรีทั้งหมดเลยนะ แต่จะให้จำนวนรายงานเหตุการณ์เริ่มต้นมาก่อน แล้วก็มีแผนสมัครสมาชิกหลังจากนั้น AWS ซับซ้อนที่สุด พี่เลยตัดออกเพราะเหตุนั้น Blynk กับ Pushsafer ราคาใกล้เคียงกัน แต่ Pushsafer ดูจะใช้ง่ายกว่าเล็กน้อย พี่เลยเลือกมัน

พี่รู้สึกไม่ค่อยพอใจกับอินเทอร์เฟซ PWM ของ LIDARLite v3HP เพราะความไม่เสถียรของการอ่านค่าระยะทางซึ่งทำให้เกิดสัญญาณหลอกเป็นครั้งคราว พี่พยายามเปลี่ยนสายใหม่เพื่อใช้การสื่อสารแบบอนุกรม Inter-Integrated Circuit (I2C) โดยใช้ไลบรารี LIDARLite_v3HP เวอร์ชันล่าสุด (3.0.5) และสเก็ตช์ตัวอย่าง v3HP_I2C มันคอมไพล์สำหรับบอร์ด MKR 1010 ไม่ผ่านเลย มี error ตลอด พี่เลยโพสต์ issue บน GitHub หลังจากแลกเปลี่ยนความคิดเห็นหลายครั้ง ซึ่งพี่แนบ compiler errors แบบ verbose ไปด้วย Brad Wiseman ก็อัปเดตไลบรารี LIDARLite เป็นเวอร์ชัน 3.0.6 และให้คำแนะนำแบบละเอียดกับพี่ว่าคอมไพล์ให้ผ่านสำหรับ MKR 1010 ยังไง พี่ใช้โค้ดตัวอย่างจากสเก็ตช์ตัวอย่าง LIDARLite_v3HP v3HP_I2C มาสร้างสเก็ตช์ของตัวเอง ผลลัพธ์ที่ได้จากอินเทอร์เฟซ I2C ของ v3HP นั้นแม่นยำกว่าและเสถียรกว่าอินเทอร์เฟซ PWM มาก

พี่ตัดสินใจลองติดตั้งเซ็นเซอร์ LIDAR Lite v3HP บนเซอร์โวแล้วให้มันกวาดตรวจสอบทางเข้ารถในแนวโค้ง 90 - 180 องศาดู หลังจากใช้เวลาลองผิดลองถูกกับเซอร์โวหลายแบบ วิธีการกำหนดตำแหน่งเซอร์โว และดีเลย์เวลาต่างๆ มากมาย พี่ก็สรุปได้ว่าการขยับเซ็นเซอร์ LIDAR แม้จะช้าๆ ด้วยเซอร์โวนั้นสร้างสัญญาณหลอกมากเกินไป วงจรภายในของเซ็นเซอร์ LIDAR ต้องการสภาพแวดล้อมที่เสถียรเพื่อแก้ไขสัญญาณหลอก และมันทำงานได้ดีมากเมื่อเซ็นเซอร์อยู่ในตำแหน่งคงที่ มีสาเหตุหลายอย่างที่ทำให้การอ่านค่าระยะทางไม่เสถียร เช่น ความสามารถในการสะท้อนแสง (reflectivity) ของพื้นผิววัตถุ และมุมที่ลำแสงเลเซอร์อินฟราเรดกระทบเป้าหมาย การเพิ่มเซอร์โวที่เคลื่อนไหวเข้ามาทำให้สถานการณ์ซับซ้อนขึ้นมาก พี่เลยกลับไปใช้วิธีการติดตั้งเซ็นเซอร์ LIDAR แบบตายตัวบนกล่องโปรเจคเหมือนเดิม

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

สำหรับการต่อฮาร์ดแวร์ พี่ใช้แผนภาพการต่อสาย I2C มาตรฐานจาก datasheet ของ LIDARLite_v3HP นะ

ตั้งแต่โปรเจกต์นี้เผยแพร่ออกไป พี่ก็กลับมาทดลองทำ LIDAR mapping แบบจำกัดอีกครั้ง โดยใช้เซ็นเซอร์ LIDAR-Lite v3HP ติดบนเซอร์โว เป้าหมายคือลดสัญญาณหลอก (false alarm) ให้ได้มากที่สุด ขณะเดียวกันก็ต้องตรวจจับการบุกรุกจริงๆ (true intrusion) ให้ได้เต็มที่ โดยการกวาดเซ็นเซอร์ไปในมุม 180 องศา (ที่เซอร์โวส่วนใหญ่ทำได้) เพื่อสร้างแผนที่ระยะอ้างอิง (reference map) 180 จุด ในสภาพที่ไม่มีสิ่งรบกวน จากนั้นก็กวาดเซ็นเซอร์บนเซอร์โวไปมาอย่างต่อเนื่องในพื้นที่เดิม แล้วนำมาเปรียบเทียบกับแผนที่อ้างอิง เราจะตั้งค่า threshold ไว้เพื่อระบุการบุกรุกจริงๆ เมื่อความแตกต่างระหว่างแผนที่อ้างอิงกับค่าที่อ่านได้เกิน threshold นี้เมื่อไหร่ ก็จะส่งสัญญาณเตือนออกไป จุดสำคัญที่จะทำให้บรรลุเป้าหมายได้อยู่ที่อัลกอริทึมที่ใช้เปรียบเทียบแผนที่อ้างอิงกับค่าที่อ่านได้นะ แค่ลบค่าทีละจุดในแต่ละองศามันไม่พอที่จะลดสัญญาณหลอกได้ Machine learning อาจเป็นเทคนิคหนึ่งที่ใช้แก้ปัญหานี้ได้ พี่กำลังหาวิธีว่าจะเอามาใช้ในโปรเจกต์นี้ยังไงดี พอเจอเทคนิคที่ใช้การได้แล้ว พี่วางแผนจะเพิ่มเซอร์โวสำหรับเอียง (tilt servo) แล้วสแกนพื้นที่เป้าหมายทั้งแนวนอน 180 องศา และแนวตั้ง 20 องศา ที่มุมเอียง 20 องศา และระยะ 40 ฟุต ลำแสง LIDAR จะครอบคลุมความสูงประมาณ 4 ฟุต น่าจะพอแล้วที่จะแยกความแตกต่างระหว่างสัตว์ กับคน หรือยานพาหนะ

พี่พบว่า ประเภทของเซอร์โว และความล่าช้าระหว่างการเคลื่อนที่ของเซอร์โว เป็นปัจจัยสำคัญในการลดสัญญาณหลอก เซอร์โวเล็กๆ หลายตัวอาจคลาดเคลื่อนได้มากถึง 1.3 องศาเพราะความไม่สมบูรณ์ของชิ้นส่วนกลไก เซอร์โวแบบเกียร์ไนลอนจะทำงานลื่นกว่าและสร้างแรงสั่นสะเทือนน้อยกว่า ซึ่งส่งผลต่อการอ่านค่าระยะ เซอร์โวที่สามารถคงตำแหน่งไว้ได้โดยไม่ต้องส่งพัลส์ตำแหน่งต่อเนื่องก็สั่นน้อยกว่าเช่นกัน การหน่วงเวลา (delay) 100 มิลลิวินาทีระหว่างการเคลื่อนที่ของเซอร์โวช่วยลดแรงสั่นได้ แต่ก็ทำให้การกวาด 180 องศาใช้เวลาถึง 18 วินาที พี่เคยคิดจะใช้มอเตอร์แบบสลิปริง (slip-ring motor) แล้วหมุนเซ็นเซอร์ LIDAR อย่างต่อเนื่องเพื่อกำจัดแรงสั่นจากเซอร์โว ลดความคลาดเคลื่อนทางกล และเพิ่มความเร็วในการอ่านค่าระยะ มอเตอร์สลิปริงรุ่น SRC022A-6 ของ Adafruit มีความเร็วหมุน 0 - 300 RPM แต่พี่ก็ยังต้องใช้เซอร์โวสำหรับเอียงอยู่ดี และการกินกระแสอาจเพิ่มขึ้นจนทำให้การทำงานด้วยแบตเตอรี่เป็นไปไม่ได้ พี่เลยกำลังหาข้อมูลเกี่ยวกับ direct drive, digital servos อยู่ เพื่อจะได้เอาชนะข้อจำกัดบางอย่างพวกนี้

Precision Security: LIDAR Intrusion Detector

เซ็นเซอร์ Passive Infrared (PIR) ทั่วไปมันชอบส่งสัญญาณเตือนผิดบ่อยๆ เวลารถร้อนๆ วิ่งผ่านหรือแม้แต่เมฆเคลื่อนตัว LIDAR Intrusion Detector ตัวนี้ใช้ฟิสิกส์ Time-of-Flight (ToF) ระดับทหารมาสร้างรั้วเลเซอร์แม่นยำสุดๆ ที่ไม่หวั่นไหวต่ออุณหภูมิ แสงแดด หรือลมเลย

ฟิสิกส์เบื้องหลัง Time-of-Flight

โปรเจคนี้ใช้ เซ็นเซอร์ LIDARLite v3HP ที่แม่นยำแบบสุดขั้ว หลักการทำงานมันเหมือนกับเซ็นเซอร์ตัวอื่นๆ เช่น VL53L0X นั่นแหละ

  1. ยิงเลเซอร์: เซ็นเซอร์จะยิงพัลส์เลเซอร์อินฟราเรดที่มองไม่เห็นไปยังพื้นที่เป้าหมาย
  2. จับเวลา: ไทเมอร์ภายในที่มีความละเอียดระดับพิโควินาทีจะจับเวลาที่แน่นอนที่โฟตอนใช้เดินทางไป-กลับ
  3. คำนวณระยะ: ด้วยความเร็วแสงที่คงที่ เซ็นเซอร์จะคำนวณระยะห่างไปยังวัตถุได้แม่นยำระดับมิลลิเมตร
  4. ตั้ง Baseline: โค้ดของเราจะตั้งค่าระยะอ้างอิงที่แม่นยำสำหรับโซนที่เราตรวจสอบ (เช่น Distance = 40 feet)

ลงมือเขียน Logic ของระบบเตือนภัย

เพราะเซ็นเซอร์ใช้ความเร็วแสง เราจึงตั้งค่า Threshold แม่นยำระดับมิลลิเมตรเพื่อแยกแยะระหว่างสัญญาณรบกวนทั่วไปกับการบุกรุกจริงๆ ได้

  • if (Distance < Baseline_Distance - Threshold): แปลว่ามีวัตถุเข้ามาในโซนที่เฝ้าระวังแล้ว
  • เราสามารถตั้งค่า Threshold ขั้นต่ำ (เช่น 15mm) เพื่อป้องกันการเตือนผิดจากฝุ่นหรือแมลงที่มาเกาะบนเลนส์เซ็นเซอร์โดยตรง
  • สั่งงานเมื่อตรวจพบ: เมื่อตรวจพบการบุกรุกที่ถูกต้อง Arduino ก็จะสั่งงานเอาต์พุตได้ทันที ในโปรเจคของพี่ มันจะสั่งให้โมดูล WiFi ส่งการแจ้งเตือน Push Notification ผ่านบริการ Pushsafer ถ้าอยากได้ระบบเตือนภัยในพื้นที่ ก็เพิ่ม โมดูลรีเลย์ เพื่อจ่ายไฟ 12V ไปยังไซเรนดังสนั่นหรือไฟสโตรบได้เลย

การติดตั้งในโลกจริง

ประสิทธิภาพของระบบรักษาความปลอดภัยจะดีขึ้นถ้าเราวางอุปกรณ์ให้แนบเนียน

  • Arduino MKR WIFI 1010 และ LIDARLite v3HP สามารถใส่ไว้ในกล่องกันน้ำได้สบายๆ
  • ข้อได้เปรียบสำคัญคือเซ็นเซอร์ LIDAR ไม่จำเป็นต้องมีรีเฟลกเตอร์วางฝั่งตรงข้ามเลย (ต่างจากลำแสงโฟโตอิเล็กทริกแบบเก่า) มันอาศัยการกระเจิงของเลเซอร์จากพื้นหลังหรือตัวผู้บุกรุกเอง
  • นี่คือการสร้าง "เส้นลวดดัก" ที่แม่นยำและมองไม่เห็น ซึ่งตรวจจับหรือหลบเลี่ยงได้ยากมาก

อุปกรณ์หลักที่ต้องมี

  • Arduino MKR WIFI 1010 (มี WiFi ในตัว, RTC และกินไฟน้อย)
  • เซ็นเซอร์ Garmin LIDARLite v3HP (อินเตอร์เฟซ I2C) สำหรับการวัดระยะไกลและแม่นยำสูง
  • (สำหรับงานรักษาความปลอดภัยที่ต้องการความน่าเชื่อถือ เซ็นเซอร์ Time-of-Fflight ที่แม่นยำอย่าง LIDARLite ดีกว่าเซ็นเซอร์อัลตราโซนิก (เช่น HC-SR04) แน่นอน เพราะอัลตราโซนิกมักมีปัญหากับพื้นผิวอ่อนและสัญญาณรบกวนจากสิ่งแวดล้อม)
  • แหล่งจ่ายไฟ USB 5V หรือแบตเตอรี่ LiPo สำหรับการทำงานแบบพกพา
  • (ตัวเลือกเสริม: โมดูลรีเลย์ 5V สำหรับขับไซเรนหรือไฟสว่างกำลังสูงในพื้นที่)
LIDAR Lite v3HP and Arduino MKR WIFI 1010 Intrusion Detector

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

apps:
  - "1x Pushsafer"
author: "maulepilot"
category: "Sensors & Environment"
components:
  - "1x Two 4.7K Ohm 1/4 watt resistors"
  - "1x Breadboard, 170 Pin"
  - "1x Garmin LIDAR-Lite v3HP"
  - "1x 10 Pc. Jumper Wire Kit, 5 cm Long"
  - "1x Arduino MKR WiFi 1010"
  - "1x 680 uF capacitor"
description: "Military-grade perimeters! Ditch the cheap PIR motion sensors and employ true Time-of-Flight (ToF) laser rangefinders to build an un-hackable, millimeter-accurate invisible tripwire."
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX18JA1kxDAmIf9XMIVe1HhcjIgq4a29QxPey+srlFhCXINdLu5lI5hnyY+x0b93NNlStqZ8POmcEjtqLG/+DPxznoKbVdg6tPoE="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/lidar-intrusion-detector-aa69b2_cover.jpg"
lang: "en"
likes: 9
passwordHash: "8ebed4e6bcebc77b98f58f4edb1968f2598f221eb54d218eb55ed3fa822fc55d"
price: 2450
seoDescription: "Build a LIDAR Intrusion Detector with Garmin LIDARLite v3HP and Arduino MKR WIFI 1010. Send push notifications via Pushsafer."
tags:
  - "security"
  - "communication"
  - "internet of things"
title: "ระบบตรวจจับผู้บุกรุกด้วย LIDAR งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/1auL3AgS3Jw"
views: 16146