กลับไปหน้ารวมไฟล์
how-to-play-any-game-using-a-time-of-flight-ced280.md

สวัสดีน้องๆ! มาลุยกันเลยคร้าบ คราวนี้เราจะมาเรียนรู้วิธีใช้เซ็นเซอร์ Time-of-Flight ร่วมกับ Edge AI เพื่อเล่นเกมด้วยคีย์บอร์ด โปรเจค "ToF-Gaming" นี้เป็นการลงมือทำจริงจังในเรื่อง Spatio-Temporal Mechatronics และ Edge-AI Gesture Forensics เลยนะเออ

วิธีทำคือ เราจะมาเรียนรู้การใช้เซ็นเซอร์ Time-of-Flight ก่อน จากนั้นก็เก็บข้อมูล เทรนโมเดล AI ด้วย NanoEdge AI Studio และสุดท้ายก็มาดูวิธีควบคุมคีย์บอร์ดเพื่อเล่นเกมกัน

ขั้นตอนที่ 1: เตรียมตัวและวางแผน

เซ็นเซอร์ Time-of-Flight (ToF) จะส่งค่าอาร์เรย์ของระยะห่างออกมา คิดซะว่าเป็นภาพก็ได้ แต่ความละเอียดต่ำมาก (8x8 = 64 พิกเซล)

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

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

เจาะลึกเทคนิค: VL53L5CX Photonic Forensics & Matrix Analytics

  • The Time-of-Flight Logic-Hub: เซ็นเซอร์จะปล่อยพัลส์อินฟราเรดที่สั้นกว่านาโนวินาที วัดความล่าช้าของการสะท้อนของโฟตอนเพื่อคำนวณระยะทางแบบสัมบูรณ์ กระบวนการ Forensics เกี่ยวข้องกับการดึงข้อมูลจากเมทริกซ์ $64$-โซนที่ความถี่ $15\text{Hz}$ โดยเน้นที่ความเสถียรของสัญญาณ การวินิจฉัยจะโฟกัสที่ "Ambient-Light Slew-Rate" แม้ว่า ToF จะต้านทานต่อสัญญาณรบกวนแม่เหล็กไฟฟ้า (EMI) ส่วนใหญ่ได้ แต่โฟตอนจากแสงแวดล้อมที่สูงมากๆ ก็อาจทำให้เกิดการพลิกบิต (bit-flip) ในแผนที่ระยะทางได้ ซึ่งจำเป็นต้องมีสภาพแวดล้อมการทำงานที่มีแสงน้อยและเสถียรเพื่อให้สามารถวัดระยะทางได้อย่างต่อเนื่องที่ $\approx 3\text{m}$

การบันทึกข้อมูลที่ดีด้วย ToF นั้นยากอยู่นะ ถ้าอยากได้ข้อมูลดีๆ น้องต้อง:

  1. อยู่ในที่ที่แสงไม่จ้ามาก
  2. มีพื้นหลัง (ห่างจากเซ็นเซอร์ไม่เกิน 3 เมตร)
  3. ต้องยืนอยู่ตรงหน้าเซ็นเซอร์ ToF ให้แน่นอน

เริ่มจากเสียบบอร์ด X-NUCLEO-53L5A1 เข้ากับ Arduino Uno R4 WiFi ก่อน จากนั้นก็ยึดชุดเซ็ตอัพทั้งหมดติดกับผนังด้วย Blu Tack หรืออะไรทำนองนั้น การทำ Structural Signal-Integrity & Mechanical Forensics แบบนี้จะช่วยให้มั่นใจในเรื่อง "Mechanical-Zeroing" ของระนาบเซ็นเซอร์เทียบกับผนังพื้นหลัง ป้องกันข้อผิดพลาดจากพารัลแลกซ์ (parallax-error) ที่ขอบของมุมมอง (Field-of-View หรือ FOV) 5 องศาของเซ็นเซอร์

เพื่อที่จะเล่นมาริโอ้ได้ เราต้องทำ 6 การกระทำ:

  1. ยืนนิ่ง
  2. เดินขวา
  3. เดินซ้าย
  4. กระโดด
  5. กระโดดขวา
  6. กระโดดซ้าย

โดยใช้เมทริกซ์ระยะทางที่เก็บมาจากเซ็นเซอร์ ToF เราสามารถระบุสัญญาณ ตำแหน่ง ท่าทาง หรือตัวบ่งชี้อื่นๆ ที่แตกต่างกันได้

ในกรณีของพี่ พี่พบว่าการยืนอยู่ในโซนต่างๆ ตรงหน้าเซ็นเซอร์ ToF ตามรูปที่แนบมานี้ได้ผลดีเลย:

  1. โซน 1: กระโดดขวา
  2. โซน 2: กระโดด
  3. โซน 3: กระโดดซ้าย
  4. โซน 4: เดินขวา
  5. โซน 5: ยืนนิ่ง
  6. โซน 6: เดินซ้าย

โซน 1, 2 และ 3 จะอยู่ใกล้กับเซ็นเซอร์ ToF ส่วนโซน 4, 5 และ 6 จะอยู่ใกล้กับพื้นหลัง

เจาะลึกเทคนิค: Spatio-Temporal Zone Gating ระบบนี้กำหนดโซนปฏิสัมพันธ์ทางกายภาพทั้ง 6 โซนนี้ กระบวนการ Forensics เกี่ยวข้องกับการแมปความแตกต่างระหว่าง "กระโดดซ้าย" กับ "เดินขวา" โดยอาศัยการประมาณค่าระยะลึก $(1\text{m} \text{ vs. } 3\text{m})$ การวินิจฉัยนี้ทำให้มั่นใจว่าความละเอียดเฟรม $8\times 8$ จะให้ข้อมูลเชิงพื้นที่ (spatial-entropy) เพียงพอสำหรับตัวแยกประเภท N-Class ในการแยกแยะระหว่างฮาร์มอนิกของ "การยืนนิ่ง" และ "การเคลื่อนที่แบบเพิ่มขึ้นทีละน้อย"

เอาล่ะ ตอนนี้เราต้องไปเก็บข้อมูลกันแล้ว มาจัดการให้เรียบร้อย!

ขั้นตอนที่ 2: เก็บข้อมูล

เวลาทำงานกับเซ็นเซอร์ Time-of-Flight (ToF) นะน้อง เราสามารถเลือกได้ว่าจะใช้ข้อมูลเป็นเมทริกซ์ระยะทางเดี่ยวๆ หรือใช้เป็นลำดับของเมทริกซ์หลายอันเพื่อจับการเคลื่อนไหว (gesture) ก็ได้

แต่ในเคสนี้ พี่อยากให้ระบบมันตอบสนองไวที่สุด หมายความว่าต้องเร็วที่สุด เพราะงั้นเราจะใช้แค่เมทริกซ์เดียวจบ

พี่ใช้เครื่องมือ NanoEdge AI Studio ในการสร้างโค้ดสำหรับเก็บข้อมูลจาก ToF ตัวโค้ดพี่แนบไว้ด้านล่างแล้ว แต่ถ้าน้องอยากได้โค้ดแบบเดียวกัน ให้ทำตามนี้:

  1. เปิด NanoEdge AI Studio
  2. เข้าไปที่ Data Logger
  3. เลือกบอร์ด Arduino
  4. เลือกเซ็นเซอร์ VL53L5CX

พี่ใช้พารามิเตอร์ตามนี้:

  1. Data rate (Hz): 15Hz (ค่าสูงสุด)
  2. Frame resolution: 64 (8x8)
  3. Frames: 1

คลิก Generate Data Logger แล้วน้องจะได้ไฟล์ .zip มา ซึ่งข้างในมีไฟล์ .ino พร้อมอัปโหลดลงบอร์ดได้เลย

คำเตือน:

  1. น้องต้องติดตั้งไลบรารี SparkFun_VL53L5CX_Library ก่อน
  2. ไปที่ Sketch > Include Library > Manage libraries... แล้วค้นหา SparkFun_VL53L5CX_Library

ขั้นตอนที่ 3: NanoEdge AI Studio

ทีนี้เราจะมาสร้างโปรเจคใน NanoEdge AI Studio เพื่อเก็บข้อมูลและสร้างโมเดลที่สามารถแยกแยะโซนต่างๆ ที่พี่ยืนอยู่ได้ เพื่อเอาไปเล่นเกมมาริโอต่อไป:

  1. เปิด NanoEdge AI Studio
  2. สร้างโปรเจคประเภท N-class classification

ในส่วน Project Settings:

ตั้งแต่เวอร์ชัน 4.5 เป็นต้นมา การตั้งค่าโปรเจคเปลี่ยนไปนิดนึง น้องต้องเลือกว่าทำงานกับข้อมูลแบบ Time series หรือ Cross sectional ง่ายๆ ก็คือข้อมูลเรามีหลายตัวอย่างที่เวลาต่างกันมั้ย ในกรณีเรา เราใช้เฟรม/เมทริกซ์เดียว ไม่เกี่ยวเรื่องเวลา ดังนั้นเลือก Cross sectional

  1. เลือก Target เป็น Arduino UNO R4 WiFi
  2. เลือก Cross sectional
  3. เลือก Time of Flight และความละเอียด 8x8
  4. คลิก Next

ในส่วน Signals:

ทีนี้เราจะเก็บข้อมูลสำหรับแต่ละโซนโดยใช้การสื่อสารผ่านพอร์ตอนุกรม (serial)

เคล็ดลับคือ เก็บข้อมูลให้หลากหลายที่สุดเท่าที่จะทำได้ ตัวอย่างเช่น เวลาเก็บข้อมูลสำหรับการเคลื่อนที่ไปทางขวา (โซน 4) น้องควรขยับตัวเล็กน้อยภายในโซนนั้น เพื่อจำลองตำแหน่งต่างๆ ที่ควรถูกจัดว่าเป็นโซน 4 ทั้งหมด ยืนจุดต่างๆ ในโซน: ขวาสุด, ขวานิดนึง, ซ้ายนิดนึง, ใกล้เซ็นเซอร์, ไกลเซ็นเซอร์ ฯลฯ

เวลาที่เล่นเกมจริง น้องจะสลับไปมาระหว่างโซน และน้องจะไม่มีทางยืนตำแหน่งเดิมเป๊ะๆ ได้ตลอด

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

มาลองเก็บข้อมูลกัน:

  1. คลิก Add Signal
  2. คลิก From Serial (usb)
  3. เลือก COM Port ให้ถูกต้อง
  4. พยายามยืนอยู่ในโซนที่ต้องการก่อนคลิก Start
  5. เก็บข้อมูลประมาณ 100-200 สัญญาณในแต่ละโซน ตามที่อธิบายไปด้านบน
  6. คลิก Stop
  7. ก่อนนำเข้าข้อมูล น้องสามารถเลือกลบสัญญาณแรกๆ ทิ้งได้ ถ้านึกว่ายังไม่ได้อยู่ในโซนที่ถูกต้องจริงๆ

ทำแบบนี้ให้ครบทั้ง 6 โซนเลย

ในส่วน Benchmark: ส่วน Benchmark นี่คือหัวใจของ NanoEdge AI Studio เลย เราจะใช้ข้อมูลทั้งหมดที่เก็บมา เพื่อหาคอมโบที่ดีที่สุดระหว่างการประมวลผลข้อมูลเบื้องต้น (preprocessing) และโมเดลที่แยกแยะข้อมูลได้แม่นยำที่สุด

  1. คลิก New Benchmark
  2. เลือกชุดข้อมูลทั้งหมด
  3. คลิก Start

ตัว Benchmark จะลองสุ่มคอมโบต่างๆ ระหว่าง preprocessing กับโมเดล แล้วประเมินผลลัพธ์ มันจะแบ่งข้อมูลเป็นชุดฝึก (training) และชุดทดสอบ (testing) หลายรอบเพื่อให้ได้ผลลัพธ์ที่เชื่อถือได้

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

เจาะลึกเทคนิค: NanoEdge AI & ฮิวริสติกส์การจำแนกประเภท

  • เครื่องยนต์อัจฉริยะแบบตัดขวาง: NanoEdge AI Studio จะเลือกการประมวลผลล่วงหน้า (preprocessing) และสถาปัตยกรรมโมเดลที่ดีที่สุดสำหรับ ARM Cortex-M4 (Uno R4) ให้อัตโนมัติ กระบวนการวิเคราะห์ (Forensics) เกี่ยวข้องกับการ "ทำเบนช์มาร์ค" สัญญาณแบบกำหนดได้ เพื่อให้ได้ฮิวริสติกส์ความแม่นยำที่ $>90%$

ในขั้นตอนการตรวจสอบ (Validation): ระหว่างกระบวนการทำเบนช์มาร์ค ทุกครั้งที่พบไลบรารี่ที่ดีที่สุดใหม่ มันจะถูกเพิ่มเข้าไปในขั้นตอนการตรวจสอบ

เมื่อเรามีไลบรารี่ดีๆ แล้ว เราสามารถทดสอบมันแบบเรียลไทม์ได้ เหมือนกับที่มันถูกดีพลอยบนไมโครคอนโทรลเลอร์จริงๆ เพื่อดูว่ามันทำงานได้ดีไหม

ทำได้โดยคลิกปุ่ม Play ในคอลัมน์ Serial Emulator เลือกพอร์ต COM ที่ถูกต้อง แล้วคลิก Start จากนั้นเราจะสามารถทดสอบโมเดลและดูประสิทธิภาพได้

การวินิจฉัย (Diagnostics) ใช้ "การตรวจสอบด้วย Serial-Emulator" ก่อนการดีพลอยจริงบนซิลิคอน เพื่อให้มั่นใจว่า telemetry id_class ยังคงเสถียรระหว่างการวิเคราะห์การเคลื่อนไหวของมนุษย์แบบไดนามิก

ถ้าสังเกตเห็นว่าบางคลาสถูกจำแนกได้ยาก ก็สามารถกลับไปที่ขั้นตอนการบันทึกข้อมูล (logging) และทำเบนช์มาร์คใหม่ได้ ตัวอย่างเช่น ผมเคยมีปัญหากับคลาส "ยืนนิ่ง" และ "เคลื่อนที่ไปทางขวา" ตอนที่ยืนอยู่ใกล้กับทั้งสองโซน ผมจึงบันทึกข้อมูลใหม่ โดยมั่นใจว่าไม่ได้ยืนอยู่ตำแหน่งเดิมซ้ำ

ในขั้นตอนการคอมไพล์ (Compilation): แค่คลิก Compile เพื่อรับโมเดลที่เทรนเสร็จแล้ว เราจะได้ไฟล์ .zip ที่มีทุกอย่างที่จำเป็นสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 4: ควบคุมคีย์บอร์ด

เพื่อเล่นเกม เราจะใช้ไลบรารี่จาก NanoEdge AI Studio ในการจำแนกประเภทการเคลื่อนไหวที่ต้องการ และใช้ไลบรารี่ Keyboard ของ Arduino ในการส่งอินพุตไปยัง PC เพื่อควบคุมเกม

การใช้คีย์บอร์ดกับบอร์ดอาจทำให้การควบคุม PC ของเรายากขึ้นทันทีที่บอร์ดเริ่มส่งอินพุต เพื่อให้ง่ายขึ้น ผมจึงตั้งดีเลย์ (delay) ไว้ท้ายฟังก์ชัน setup() ดีเลย์นี้จะให้เวลากับเราในการแก้ไขโค้ดและอัพโหลดลงบอร์ด โดยไม่ถูกรบกวนจากอินพุตที่กำลังส่งอยู่

วิศวกรรมและการนำไปใช้: การวิเคราะห์เพื่อลดการขัดจังหวะของลอจิก เพื่อป้องกันไม่ให้ Arduino "ล็อก" PC ออกในช่วงพัฒนาซอฟต์แวร์ จะมีการบัฟเฟอร์ดีเลย์ $5\text{-second}$ ในฟังก์ชัน setup() กระบวนการวิเคราะห์ (Forensics) นี้ทำให้มั่นใจว่าผู้พัฒนาสามารถออกจากลูปการจำลอง HID ได้อย่างปลอดภัย ก่อนที่การประสานงานของ AI จะเข้าควบคุมโฟกัสของระบบปฏิบัติการ

ฟังก์ชันอินพุตคีย์บอร์ด: เราจะใช้ฟังก์ชันต่อไปนี้ในการส่งอินพุต:

  1. Keyboard.press()
  2. delay()
  3. Keyboard.releaseAll()

เพื่อเล่นเกมได้อย่างมีประสิทธิภาพ เราต้องหลีกเลี่ยงการส่งปุ่ม 'a' (เลื่อนซ้าย) แค่ครั้งเดียว เพราะการทำแบบนั้นจะทำให้มาริโอเลื่อนไปทางซ้ายเพียงนิดเดียวทุกครั้งที่มีการจำแนกประเภท ซึ่งจะทำให้เคลื่อนที่ต่อเนื่องหรือกระโดดไม่ได้ เราจะใช้ Keyboard.press() ร่วมกับ delay() แล้วค่อยปล่อยปุ่ม

เราจะกดแค่สามปุ่ม:

  1. 'a' (ซ้าย)
  2. 'd' (ขวา)
  3. '0x20' (สเปซสำหรับกระโดด)

เพื่อกระโดดไปทางซ้ายหรือขวา เราจะกดสองปุ่มพร้อมกัน การดีเลย์ 500ms ก่อนปล่อยปุ่มจะทำให้มาริโอกระโดดได้สูงสุด

เราจะใช้คำสั่ง switch() เพื่อกดปุ่มผสมที่ถูกต้องตามคลาสที่ทำนายได้

จัดไปวัยรุ่น! ตรวจสอบให้แน่ใจว่าคลาสและการเคลื่อนไหวในโค้ดตรงกับลำดับของไฟล์ของคุณ (ลำดับนี้จะอธิบายในขั้นตอนถัดไป) อยากรู้ว่าลำดับไลบรารี่ของเราเป็นยังไง รออ่านขั้นตอนถัดไปได้เลย

วิศวกรรมและการนำไปใช้: การจำลองคีย์บอร์ด HID และการวิเคราะห์การซิงค์

  • การประสานงานบัฟเฟอร์ HID: Uno R4 WiFi จะจำลองตัวเองเป็นคีย์บอร์ด USB มาตรฐาน กระบวนการวิเคราะห์ (Forensics) เกี่ยวข้องกับการใช้ Keyboard.press() และ Keyboard.releaseAll() เพื่อจำลองการเคลื่อนไหวที่ต่อเนื่อง (เช่น กดปุ่ม 'd' ค้างเพื่อให้มาริโอมีโมเมนตัมในการวิ่ง) การวินิจฉัย (Diagnostics) จะเน้นที่ช่วงเวลาดีเลย์ $500\text{ms}$ ซึ่งให้อัตราการตอบสนองที่เหมาะกับมนุษย์ ป้องกันการวินิจฉัยการตัดอินพุต (input-clipping) ในระหว่างการกระโดดเร็วๆ

สู้งานนะน้อง ห้ามช็อตนะตัวนี้!

ขั้นตอนที่ 5: โค้ดสุดท้าย

จะเพิ่ม AI เข้าไปในโค้ด Arduino ของเรา ต้องทำตามนี้เลย:

  1. เอาไลบรารี่เข้า Arduino IDE
  2. เอาโค้ดที่แนบมาไปใช้
  3. แทนที่ตัวแปร id2class

แค่นั้นแหละ!

เพิ่มไลบรารี่เข้า Arduino IDE: ก่อนอื่นต้องเอาไลบรารี่เข้า Arduino IDE ก่อน วิธีนี้ปลอดภัยไว้ก่อน เผื่อมีไลบรารี่เก่าของ NanoEdge AI อยู่แล้วจะได้ไม่พัง:

  1. เอาไฟล์ .zip ที่ได้หลังคอมไพล์จาก NanoEdge AI Studio มา
  2. คัดลอกโฟลเดอร์ nanoedge (จากใน YOUR_LIBRARY.zip\arduino\nanoedgeai_for_arduino.zip\)
  3. วางลงใน Document\Arduino\libraries

อธิบายโค้ดที่แนบมา: ในโค้ดที่แนบมา เขาทำอะไรบ้าง:

  1. Include NanoEdgeAI.h และ knowledge.h (โมเดลกับฟังก์ชั่น)
  2. เพิ่มตัวแปรที่ NanoEdge ใช้
  3. เพิ่มฟังก์ชั่นเริ่มต้น (initialization)
  4. เพิ่มส่วนตรวจจับ (detection)
  5. เพิ่ม Keyboard.h และ switch เพื่อสั่งงานตามคลาสที่เจอ

ส่วนที่เพิ่มเข้ามามีแบบนี้:

#include "NanoEdgeAI.h"    
#include "knowledge.h"    
#include <Keyboard.h>    
/* Global variables definitions */    
static uint8_t neai_code = 0;    
static uint16_t neai_ptr = 0;    
static float neai_buffer[SENSOR_FRAME_RESOLUTION * SENSOR_FRAMES] = {0.0};    
/* NEAI library variables */    
uint16_t id_class = 0; // Point to id class (see argument of neai_classification fct)    
float input_user_buffer[DATA_INPUT_USER * AXIS_NUMBER]; // Buffer of input values    
float output_class_buffer[CLASS_NUMBER]; // Buffer of class probabilities    
const char *id2class[CLASS_NUMBER + 1] = { // Buffer for mapping class id to class name    
	 "unknown",    
	 "dm_jumpcenter",    
	 "dm_jumpleft",    
	 "dm_jumpright",    
	 "dm_left",    
	 "dm_right",    
	 "dm_stand",    
};    
void setup() {    
	 //some code    
	 //initialize the keyboard usage    
	 Keyboard.begin();    
	 /* Initialize NanoEdgeAI AI */    
	 neai_code = neai_classification_init(knowledge);    
	 if (neai_code != NEAI_OK) {    
	   Serial.print("Not supported board.\n");    
	 }    
}    
/* Main function: Code run indefinitely */    
void loop() {    
	   //classification    
	   neai_classification(neai_buffer, output_class_buffer, &id_class);    
	  //actions to perform based on id_class (the detected class)    
	   switch (id_class) {    
	     case 6:    
	       //stand    
	       Keyboard.releaseAll();    
	       break;    
	     case 4:    
	       //move left    
	       Keyboard.press('q');    
	       break;    
	     case 5:    
	       //move right    
	       Keyboard.press('d');    
	       break;    
	     case 1:    
	       //jump    
	       Keyboard.press(0x20);    
	       break;    
	     case 2:    
	       //jump left    
	       Keyboard.press(0x20);    
	       Keyboard.press('q');    
	       break;    
	     case 3:    
	       //jump right    
	       Keyboard.press(0x20);    
	       Keyboard.press('d');    
	       break;    
	   }    
	   delay(500);    
	   Keyboard.releaseAll();    
}    

แทนที่ id2class: ในโค้ดมีตัวแปร id2class ที่เก็บชื่อคลาสและลำดับของมัน

น้องต้องเอา id2class จากโค้ดที่แนบมา ไปแทนที่ด้วยตัวแปรที่อยู่ในไฟล์ NanoEdgeAI.h ในไฟล์ .zip ของน้องเอง:

  1. YOUR_LIBRARY.zip\arduino\nanoedgeai_for_arduino.zip\nanoedgeai\src\NanoEdgeIA.h

ในบทเรียนนี้โดยเฉพาะ น้องต้องไปแก้ไข switch() ในส่วน loop() ของโค้ดด้วย เพื่อให้มันทำตามแอคชั่นที่เราต้องการ ดูในโค้ดด้านบนได้ว่าแต่ละคลาสสอดคล้องกับแอคชั่นอะไร ตัวอย่างเช่น ใน switch ตัวเลือกแรกคือ case 6: เพราะคลาสใน id2class ที่ตรงกับ "stand" อยู่ตัวสุดท้าย (นับเริ่มจาก 0 นะจ๊ะ)

หมายเหตุ: ถ้าเจอ error เรื่อง RAM น้อย อาจเป็นเพราะไลบรารี่ใน NanoEdge ใหญ่ไป กลับไปที่ขั้นตอน VALIDATION ใน NanoEdge แล้วเลือกไลบรารี่ที่เล็กกว่า (คลิกที่มงกุฎด้านขวา) จากนั้นคอมไพล์ใหม่แล้วเอามาแทนที่ใน Arduino IDE อีกรอบ

Step 6: สรุปสั้นๆ อย่าเพิ่งงง

จากที่สอนไป น้องก็ได้รู้วิธีใช้ NanoEdge AI Studio กับเซ็นเซอร์ Time of Flight มาทำเกมเล่นกับคีย์บอร์ด PC แล้วล่ะ โปรเจค ToF-Gaming เนี่ยมันคือสุดยอดของ การวินิจฉัยด้วย Edge-AI แบบอะซิงโครนัส เลยนะตัวนี้! พอเราเชี่ยวชาญเรื่อง การวิเคราะห์พิสูจน์ระยะด้วยเลเซอร์ และ ฮิวริสติกส์การจำแนกคลาส แล้ว โปรเจคนี้ก็จะกลายเป็นอินเทอร์เฟซควบคุมด้วยท่าทางระดับโปรที่เสถียรสุดๆ จัดไปวัยรุ่น! มันให้ความชัดเจนของอินพุตแบบไร้ที่ติผ่านความซับซ้อน... (พูดง่ายๆ คือแม่นยำปรี๊ด!) สู้งานนะน้อง ห้ามช็อตนะตัวนี้!

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

apps:
  - "Arduino IDE"
  - "SparkFun_VL53L5CX Library (Distance-Matrix Diagnostics)"
author: "mad_mcu"
category: "Gadgets, Games & Toys"
components:
  - "1x Arduino Uno R4 WiFi (AI-Edge Logic Hub)"
  - "1x X-NUCLEO-53L5A1 (Multi-Zone ToF Sensor Node)"
  - "1x USB-C Cable (Logic-Power & HID Data Bridge)"
description: "A professional-grade gestural control interface featuring VL53LCX Time-of-Flight (ToF) diagnostics, NanoEdge AI classification heuristics, and HID-keyboard emulation forensics."
difficulty: "Easy"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/a43d7918-0389-462e-87d3-220c0610a5fb.ino"
  - "https://projects.arduinocontent.cc/b539ff4d-1cff-4b32-a3c4-18ceaa6830dc.ino"
encryptedPayload: "U2FsdGVkX1977UjjITvWoqawrOYvCJN7EFAMNpme59Tag/gl1pcoG4AoSBmlBtpivQhgU5Ggeuhv5/urtttuOD5Sjuqa4ksWJILgPXQprthrHr3WBvXjY7bBCM2d5yHwIhtIil9+fFReVlQCy5WKPw=="
heroImage: "https://raw.githubusercontent.com/bigboxthailand/arduino-assets@main/images/projects/how-to-play-any-game-using-a-time-of-flight-ced280_content_1.png"
lang: "en"
likes: 1953
passwordHash: "5f432128d2c4a4762e399678330e653ee7ec77cb9a8354a3ce05a0d3468aab91"
price: 2450
seoDescription: "Control any Game using Arduino and Time of Flight. Use AI to map movements to pc keyboard inputs for a unique gaming experience."
tags:
  - "tof-laser-ranging-forensics"
  - "edge-ai-classification-diagnostics"
  - "hid-keyboard-emulation-harmonics"
  - "spatio-temporal-gesture-analytics"
  - "arduino-uno-r4"
title: "ToF-Gaming: Laser-Ranging Forensics & AI-Edge Gesture-Orchestration"
tools:
  - "NanoEdge AI Studio (N-Class Classification Engine)"
videoLinks: []
views: 1953