คุณเคยนึกดูไหมว่า หากโทรศัพท์ของคุณสามารถมองเห็นห้องรอบ ๆ ได้แบบ 3 มิติ เหมือนเป็นคนตาเทพ? โปรเจกต์ใหม่นี้ทำให้ความฝันนั้นเป็นจริง! วิศวกร Henrique Ferrolho ได้สร้าง "3D Scanner" ตัวเล็ก ๆ โดยใช้ ESP32 เซนเซอร์ Time-of-Flight (VL53L5CX) และ IMU (Inertial Measurement Unit) เพื่อแสกนและสร้างแผนที่ห้องแบบเรียลไทม์ ระบบนี้ไม่เพียงแค่ตรวจวัดระยะห่างเท่านั้น แต่ยังรู้ว่าเซนเซอร์นั้นหันไปทางไหนอีกด้วย ผลลัพธ์ที่ได้คือแบบจำลอง 3D ของห้องของคุณที่สามารถมองเห็นได้บนจอคอมพิวเตอร์
ระบบแผนที่ 3D แบบเรียลไทม์ - ESP32 พร้อม VL53L5CX ตรวจวัดระยะและ IMU จดจำการเคลื่อนไหว
Time-of-Flight (ToF) คืออะไร
Time-of-Flight หรือ "ToF" เป็นเทคโนโลยีที่วัดระยะห่างของวัตถุโดยการปล่อยแสง (เลเซอร์ หรือ infrared) แล้วจับเวลาว่าแสงกระเบิดคืนมาใช้เวลาเท่าไหร่ เนื่องจากแสงเดินทางด้วยความเร็วคงที่ ก็สามารถคำนวณระยะได้
เซนเซอร์ VL53L5CX ของ ST Microelectronics เป็นเซนเซอร์ ToF ที่มีความแม่นยำสูง มันสามารถวัดระยะได้ถึง 8 เมตร และสำคัญที่สุด มันไม่ได้วัดระยะเพียงจุดเดียว แต่วัดพร้อม ๆ กันทั้ง 8x8 = 64 จุดในครั้งเดียว เหมือนกำลังถ่ายภาพ 64 เพิกเซลไปที่ห้อง ในอีกกว่าสิบมิลลิวินาทีต่อการวัด
ทำไม VL53L5CX ถึงดีกว่าเซนเซอร์ ToF ตัวอื่น?
VL53L0X เก่า ๆ วัดได้แค่ระยะจากจุดเดียว แต่ VL53L5CX สร้างภาพ 8x8 pixels ของความลึก (depth map) นี่ทำให้คุณเห็นรูปร่างของวัตถุได้ไม่ใช่แค่ระยะเท่านั้น ดังนั้น ถ้า VL53L0X คล้ายกับเก้าอี้ ที่มีเพียงหนึ่งตา VL53L5CX ก็เหมือนตาฟักตัน 64 ตา!
ทำไมต้องแผนที่ห้อง 3D
ปกติเมื่อคุณได้ขั้นเพียงแค่ตัวเลขระยะห่างจากเซนเซอร์ มันก็เหมือนให้หนึ่งตัวเลขให้คุณ "ห้องนี้ไกล 2.5 เมตร" แต่มันไม่พูดว่าผนังอยู่ไหน วัตถุที่ก่ออุปสรรคอยู่ที่ไหน เพราะงานนี้ต้องการความเข้าใจเชิงพื้นที่ (spatial understanding)
แผนที่ 3D แบบเรียลไทม์เปลี่ยนทั้งหมด เมื่อคุณใช้ VL53L5CX แบบ 8x8 pixels และทราบการหมุนของเซนเซอร์ (จาก IMU) คุณสามารถรวมข้อมูลระยะห่างหลาย ๆ ครั้งเข้ามายังกันแล้วสร้างแบบจำลอง 3D ของห้องของคุณขึ้นมา จากนั้นคุณสามารถเห็นรูปทรงของเฟอร์นิเจอร์ ตำแหน่งของประตู ผนัง ทุกอย่าง
การใช้งานเหล่านี้มีหลากหลาย เช่น หุ่นยนต์สำรวจห้อง โดรนในอาคาร ระบบสแกนรูปแบบ 3D หรือแม้แต่เกมเสมือนจริง (VR) ที่รู้เรื่องพื้นที่รอบตัวผู้เล่น
วิธีการทำงาน: ToF + IMU = 3D Map
ขั้นตอนสร้างแผนที่ 3D:
ขั้นที่ 1 - วัดระยะ: VL53L5CX ปล่อยแสงและวัดว่ากลับมาใช้เวลาเท่าไหร่ ได้ข้อมูล 8x8 = 64 จุดพร้อม ๆ กัน
ขั้นที่ 2 - จดจำตำแหน่ง: IMU (เสมือนเข็มทิศ + เครื่องวัดความเร่ง) บอกว่าเซนเซอร์หันไปทางไหน และเคลื่อนไหวอย่างไร
ขั้นที่ 3 - แปลงเป็น 3D: ซอฟต์แวร์รวมข้อมูลระยะห่างหลาย ๆ ครั้ง (เรียกว่า Point Cloud) โดยใช้ข้อมูลการหมุนจาก IMU
ขั้นที่ 4 - แสดงผล: ข้อมูล Point Cloud ถูกส่งไปยังคอมพิวเตอร์ หรือจัดการได้ที่ ESP32 เอง แล้วแสดงบนจอ 3D
ข้อมูล Point Cloud เป็นชุดของจุด ๆ ที่จุดแต่ละจุดมีพิกัด X, Y, Z ที่บ่งบอกตำแหน่งของวัตถุในพื้นที่ 3 มิติ คอมพิวเตอร์สามารถเอาจุด ๆ เหล่านี้มาสร้างรูปทรงและแสดงผลเป็นแบบจำลอง 3D ได้
โปรเจกต์ ESP32 3D Room Mapper
Henrique Ferrolho ได้ทำโปรเจกต์นี้ให้เรียบเรียบร้อย โดยเขาตั้งชื่อว่า VL53L5CX-BNO08X-viewer โปรเจกต์นี้อยู่บน GitHub ฟรี ให้ใครก็ได้ลอกเลียนแบบได้
ไอเดียหลักของโปรเจกต์:
ESP32 ทำหน้าที่เก็บข้อมูล และส่งข้อมูล Point Cloud ไปยัง Viewer (ตัวแสดงผล) บนคอมพิวเตอร์ ใช้ WebSocket หรือ Serial Communication เพื่อการส่งข้อมูล VL53L5CX ตรวจวัด BNO08X บอกมุม และ ESP32 ต่อกับ USB port ของคอมพิวเตอร์ ฝั่งคอมพิวเตอร์มี Viewer (เขียนด้วย Python หรือ C++) ที่รับข้อมูลและแสดงผล 3D แบบเรียลไทม์
จากวิดีโอของเขา คุณจะเห็นว่าเมื่อเขาชี้เซนเซอร์ไปรอบ ๆ ห้อง ภาพ 3D ก็ค่อย ๆ ปรากฏขึ้นโดยแสดงรูปร่างของผนัง เฟอร์นิเจอร์ และสิ่งอื่น ๆ ในห้อง เป็นสิ่งที่ประทับใจจริง ๆ!
VIDEO
วิดีโอสาธิต: ดูว่า ESP32 ชี้ไปรอบ ๆ ห้อง ภาพ 3D ค่อย ๆ ถูกสร้างขึ้นมาแบบเรียลไทม์
เซนเซอร์ VL53L5CX - วัดระยะ 8x8 pixels ได้ความเร็วสูง
อุปกรณ์ที่ต้องใช้
อุปกรณ์หลัก:
ESP32 (ESP32-DevKit หรือ ESP32-S3) - 1 ตัว
VL53L5CX Time-of-Flight Sensor (Breakout Board) - 1 ตัว
BNO08X IMU Sensor (หรือ BNO055) - 1 ตัว สำหรับจดจำการหมุน
Power Supply (USB-C หรือ Micro-USB) - 1 ตัว
Breadboard และ Jump Wires - สำหรับเชื่อมต่อ
I2C Cables - เซนเซอร์ 2 ตัวติดต่อกับ ESP32 ผ่าน I2C
อุปกรณ์เสริม - Resistor pull-up (4.7k ohm) อาจจำเป็นสำหรับ I2C
ซอฟต์แวร์และเครื่องมือ:
Arduino IDE - สำหรับเขียนและอัปโหลด Code ไป ESP32
Arduino ESP32 Library - Library ของ ESP32 สำหรับ Arduino IDE
VL53L5CX Library - Library สำหรับควบคุม VL53L5CX
BNO08X Library - Library สำหรับควบคุม BNO08X
Python 3 + ไลบรารี (numpy, matplotlib, pyqt5) - สำหรับ Viewer บนคอมพิวเตอร์
Code จาก GitHub - ของ Henrique Ferrolho ที่พร้อมใช้งาน
ตัวอย่างผลลัพธ์ - แผนที่ 3D ของห้องแสดงเป็น Point Cloud บนจอคอมพิวเตอร์
ประโยชน์ของโปรเจกต์นี้
1. สร้าง 3D Scanner ของตัวเอง
แทนที่จะซื้อเครื่อง 3D Scanner ราคาแพงแสน ๆ คุณสามารถสร้างระบบตัวเองได้ ด้วย ESP32 และเซนเซอร์ที่มีราคาเพียงแสนบาท ผลลัพธ์ที่ได้มีความแม่นยำดีสำหรับการใช้งานทั่วไป
2. เรียนรู้ IoT และ 3D Graphics
โปรเจกต์นี้รวมหลายสาขาวิชา: Hardware (การเลือกเซนเซอร์ วงจร), Embedded Programming (Code สำหรับ ESP32), Data Processing (การประมวลผล Point Cloud) และ Visualization (แสดงผล 3D) มันเป็นโปรเจกต์ที่ดีในการเรียนรู้เทคโนโลยีหลาย ๆ อย่างพร้อม ๆ กัน
3. ปรับแต่งได้อย่างอิสระ
Code เป็น Open Source ให้คุณปรับแต่ง เพิ่มฟีเจอร์ เช่น บันทึกผลลัพธ์เป็นไฟล์ 3D Format (.ply, .stl) หรือใช้ Deep Learning เพื่อจดจำวัตถุในห้อง หรือแม้แต่ใช้กับหุ่นยนต์
4. รูปแบบการใช้งานมากมาย
สแกนห้อง, หุ่นยนต์ Mapping, Drone ในอาคาร, เกม VR, หรือแม้แต่ระบบความปลอดภัย ที่ตรวจวัดว่ามีอะไรเปลี่ยนแปลงในพื้นที่
ขั้นตอนเริ่มต้น
ขั้นตอนที่ 1 - เตรียมอุปกรณ์
หาอุปกรณ์ทั้งหมดตามรายการข้างต้น สามารถสั่งจากร้านออนไลน์ Globalbyteshop หรือจำหน่ายอิเล็กทรอนิกส์อื่น ๆ ได้
ขั้นตอนที่ 2 - ติดตั้ง Arduino IDE และ Library
ดาวน์โหลด Arduino IDE จาก arduino.cc แล้วติดตั้ง เปิด Arduino IDE ไปที่ Preferences แล้วเพิ่ม Board URL สำหรับ ESP32 จากนั้นใช้ Library Manager ติดตั้ง VL53L5CX Library และ BNO08X Library
ขั้นตอนที่ 3 - เชื่อมต่อวงจร
ต่อ VL53L5CX และ BNO08X เข้ากับ ESP32 ผ่าน I2C (SDA, SCL pins) ทั้ง 2 เซนเซอร์ใช้ I2C Protocol เดียวกัน หากมี Conflict ก็ต้องใช้ I2C Multiplexer เพื่อแยกที่อยู่
ขั้นตอนที่ 4 - โหลด Code
ไปที่ GitHub ของ Henrique Ferrolho: https://github.com/ferrolho/VL53L5CX-BNO08X-viewer โหลดไฟล์ ESP32 Code แล้วเปิดใน Arduino IDE
ขั้นตอนที่ 5 - ตั้งค่า Serial Port และ Upload
เลือก Board เป็น ESP32, ตั้ง COM Port ที่ถูกต้อง, ตั้ง Baud Rate เป็น 115200 แล้ว Upload Code ไปยัง ESP32
ขั้นตอนที่ 6 - ตั้งค่า Viewer บนคอมพิวเตอร์
ติดตั้ง Python 3 แล้วติดตั้ง Dependencies ตามที่ GitHub บอก จากนั้นรัน Viewer Script แล้วเลือก Serial Port ของ ESP32
ขั้นตอนที่ 7 - ทดสอบการทำงาน
เปิด Viewer บนคอมพิวเตอร์ แล้วชี้เซนเซอร์ไปรอบ ๆ ห้อง ดูว่าภาพ 3D ก่ออึ้งขึ้นเรื่อย ๆ หากมีปัญหา ให้ตรวจสอบ Serial Communication, I2C Connection และ Library Version
พร้อมสร้างระบบแผนที่ 3D ของตัวเองแล้วหรือ?
ครบครัน มีคำแนะนำ ส่งด่วน