กลับไปหน้ารวมไฟล์
full-auto-nerf-gun-that-shoots-you-in-face-using-opencv-6a372d.md

ผมทำโปรเจกต์นี้ขึ้นมาเพื่อเรียนรู้เรื่อง Computer Vision ครับ

ตอนนี้โปรเจกต์ก็ทำงานได้ในระดับเวอร์ชันเริ่มต้นแล้ว แต่ผมอาจจะกลับมาพัฒนามันต่อในอนาคต ถ้าอยากเห็นการทดสอบสุดท้าย ลองดูวิดีโอนี้ แล้วด้านล่างผมจะลงรายละเอียดเกี่ยวกับขั้นตอนการสร้างให้อีกที

Machine Vision: The OpenCV Autonomous Nerf Turret

Autonomous OpenCV Turret นี่แหละตัวดี! มันพาเราข้ามจากโลกของ Arduino เบสิกๆ ไปสู่การประมวลผลภาพด้วย Python AI บน PC หรือ Raspberry Pi โดยใช้ Arduino เป็นแค่ตัวสั่งงานมอเตอร์เฉยๆ

ผมเริ่มจากสร้างต้นแบบเพื่อทดสอบการติดตามใบหน้าโดยยังไม่ติดปืนเนิร์ฟก่อน ทั้งเพื่อให้มันเบาและประกอบง่ายขึ้น และที่สำคัญ...ผมจะได้ไม่โดนลูกเนิร์ฟยิงใส่ตัวตลอดตอนกำลังเขียนโค้ดนั่นแหละ

การตั้งค่าทดสอบประกอบด้วยเซอร์โวสองตัว สำหรับหมุนแนวนอน (pan) และแนวตั้ง (tilt) พร้อมกับเว็บแคมที่ติดตั้งอยู่ด้านบน ตามภาพด้านล่างเลย:

การตรวจจับใบหน้าด้วย Python

Arduino ประมวลผลวิดีโอไม่ได้นะครับ ต้องให้เว็บแคมของ PC เป็นคนจัดการภาพแทน

  1. OpenCV (Python): สคริปต์ Python จะดึงภาพจากเว็บแคมความละเอียด 1080p มา แล้วใช้ไลบรารี Haar Cascade Classifier ซึ่งถูกเทรนมาให้ตรวจจับใบหน้าคนโดยเฉพาะ
  2. The Bounding Box: พอมีใครเดินเข้ามาในเฟรม Python จะวาดกรอบสี่เหลี่ยมสีเขียวติดตามรอบใบหน้า แล้วคำนวณหาพิกัด X/Y ตรงกลางของกรอบนั้น (เช่น X: 450, Y: 300)
  3. Serial Comm: สคริปต์ Python จะส่งคำสั่งทันทีผ่านสาย USB ไปหา Arduino ว่า: X450Y300\n

เว็บแคมจะต่อกับคอมที่รันสคริปต์ Python กับ OpenCV อยู่ สคริปต์จะตรวจจับใบหน้า แล้วส่งพิกัดของใบหน้าในภาพไปให้ Arduino ซึ่งจะขยับเซอร์โว pan/tilt เพื่อให้จุดกึ่งกลางใบหน้า (จุดสีเขียว) มาอยู่ตรงกลางภาพ (สี่เหลี่ยมสีขาว) พอดี สำหรับส่วนนี้ผมใช้ไกด์จาก Shubham Santosh เป็นหลัก ขอบคุณเขามากๆ ที่ช่วยงานไปครึ่งโปรเจกต์เลย!

การแปลงพิกัดไปยังเซอร์โว

Arduino รออยู่แล้วน้อง

  1. ขั้นตอนแยกข้อมูล (Parsing): มันอ่านสตริงที่ส่งมา แล้วดึงค่า 450 กับ 300 ออกมา
  2. ขั้นตอนแมปพิกัด (Mapping): มันแปลงค่าจากความละเอียดจอใหญ่ยักษ์ (1920x1080) ให้เข้ากับขีดจำกัดการหมุน 180 องศาจริงๆ ของ เซอร์โว MG996R ตัว Pan กับ Tilt
  3. ขั้นตอนยิง (Fire Sequence): If(Abs(targetX - currentX) < 10) (แปลว่า ปากกระบอกปืนเล็งตรงกลางหน้าพอดี) Arduino จะสั่งให้รีเลย์แบบสตาร์ทเครื่องยนต์ทำงาน
    • รีเลย์จะปล่อยไฟ 12V เข้าไปในกลไกยิงของ Nerf blaster ที่เราปรับแต่งซะใหม่จนสุดโต่ง ทำให้มันยิงลูกดอกโฟมออกมาเป็นชุด!

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

อุปกรณ์สำคัญที่ต้องมี (จัดไปวัยรุ่น)

  • คอมพิวเตอร์ที่รัน Python 3 และ OpenCV
  • ปืน Nerf แบบมอเตอร์ (เช่น Stryfe หรือ Nemesis)
  • ขาตั้งป้อมปืน Pan/Tilt ขนาดใหญ่ยักษ์
  • Arduino Mega: สำหรับแยกข้อมูลสตริงจาก Serial ที่วิ่งเร็วสุดๆ และขับเซอร์โวหลายตัวพร้อมกัน
  • โมดูลรีเลย์ / MOSFET: สำหรับควบคุมโซลินอยด์ยิง
  • (หมายเหตุ: ใส่แว่นตานะน้อง ทุกครั้งที่ทดสอบอุปกรณ์ยิงอัตโนมัติ ห้ามช็อตนะตัวนี้)

และหลังจากนั้น สิ่งที่เหลือก็คือ... ทดสอบมันซะ!

มันทำงานได้นะ แม้ว่าตอนนี้การเคลื่อนไหวจะกระตุกๆ ไปหน่อย และอาจจะต้องเพิ่มฟีเจอร์ให้มันสแกนหาห้องถ้าไม่เจอหน้าใคร

อยากเห็นตอนทดสอบ (และพี่โดนยิงใส่หน้า) ไปดูในวิดีโอทดสอบได้เลย สู้งานนะน้อง

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

apps:
  - "1x Arduino IDE"
  - "1x OpenCV"
author: "adambeedle"
category: "Gadgets, Games & Toys"
components:
  - "1x Arduino UNO"
  - "1x MG996"
description: "Terminator tech! Run Python face-tracking scripts on your PC via OpenCV, commanding a massively modified, servo-driven Nerf blaster to target moving objects."
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX1+M7YS7Irl6/62F6yOGZrbSCUVBebNezDxaUTYr40A3FkcGAd4gd9oS2CIM68QoImAETpR2gqAOcBCs/XUIUrPkJJ/JfyBIIVg="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/full-auto-nerf-gun-that-shoots-you-in-face-using-opencv-6a372d_cover.jpg"
lang: "en"
likes: 29
passwordHash: "1f55a21cb94cf5afa3f8df8316e5dd92f6f18aabe6259f12194a42f9bb144cdf"
price: 2450
seoDescription: "Build a face tracking full-auto Nerf gun using OpenCV and Computer Vision to target and shoot faces automatically."
tags: []
title: "ปืน Nerf ออโต้จับหน้าเล็งยิง! ใช้ OpenCV ตรวจจับแล้วจัดหนักเข้าหน้าตัวเองเลย"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/N5vzpi4yF7A"
views: 20457