โปรเจกต์ การสร้าง 3D Scanner | 3D Scan วัตถุที่บ้าน | Plot ใน Python
นี่คือ 3D Scanner โดยใช้ Ultrasonic Sensor ที่ถูกหมุนโดย Servo Motor ส่วนวัตถุที่ต้องการสแกนจะถูกหมุนโดย Motor และทำการ Plot ข้อมูลใน Python
นี่คือ 3D Scanner โดยใช้ Ultrasonic Sensor ที่ถูกหมุนโดย Servo Motor ส่วนวัตถุที่ต้องการสแกนจะถูกหมุนโดย Motor และทำการ Plot ข้อมูลใน Python
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์
Project Supporter Team
โพสต์โดย
โปรเจกต์นี้เกี่ยวกับการสร้าง 3D Scanner ไว้ใช้งานเองที่บ้าน ซึ่งสามารถ Scan วัตถุใดก็ได้และให้ค่าพิกัด X, Y และ Z โดยพิกัดเหล่านี้สามารถนำไป Import สำหรับการ 3D Printing เพื่อทำสำเนาวัตถุเก่าหรือชิ้นส่วนที่ชำรุดได้
ผมสร้างสิ่งนี้ขึ้นมาเพื่อช่วยให้ทำงานได้ง่ายขึ้น ผมมีวัตถุที่ต้องการทำสำเนาด้วยการ 3D Printing โดยอยากให้มันมีขนาดใหญ่ขึ้นเล็กน้อย วัตถุชิ้นนั้นมีความซับซ้อนมากจนยากที่จะวัดขนาดด้วยตัวเอง Scanner เครื่องนี้จึงเข้ามาช่วยในการ Scan วัตถุที่มีความซับซ้อนชิ้นนั้น
Scanner เครื่องนี้ขับเคลื่อนด้วย Microcontroller Atmega328p บนบอร์ด Arduino Uno โดยมี Ultrasonic Sensor ทำหน้าที่วัดระยะห่างระหว่างตัว Sensor กับวัตถุที่อยู่ด้านหน้า ตัว Sensor นี้ถูกติดตั้งเข้ากับ Servo Motor ในลักษณะที่สามารถหมุน Sensor ได้ตั้งแต่ 45° ถึง 135° ซึ่งจะทำให้เราได้ผลการ Scan วัตถุในแนวระนาบ 1 เส้น (1 line scan) จากนั้นวัตถุจะถูกหมุนไป 18° ในทิศทวนเข็มนาฬิกาด้วยความช่วยเหลือของ DC Motor ที่เชื่อมต่ออยู่ โดย Motor นี้จะหมุนทั้งหมด 20 ครั้ง ทำให้สามารถ Scan วัตถุได้ครบ 360° รอบตัว

Ultrasonic Sensor (HC-SR04) ถูกยึดเข้ากับ Horn ของ Servo Motor (SG-90) โดย Sensor จะทำหน้าที่อ่านค่าระยะทางในขณะที่ Motor หมุน Sensor ไปพร้อมๆ กัน

วัตถุที่จะทำการหมุนจะถูกวางไว้บน Gear ซึ่ง Gear ตัวนี้ถูกขับเคลื่อนโดย Worm ที่ต่อเข้ากับ DC Motor การจัดวางแบบนี้ช่วยลดความเร็วรอบและเพิ่ม Torque ข้อดีอีกอย่างคือวัตถุจะยังคงตำแหน่งเดิมไว้ได้แม้จะไม่มีการจ่ายไฟ (Loss of power)
หลังจากเสร็จสิ้นการ Scan วัตถุจากบนลงล่างในแต่ละรอบ Motor ตัวนี้จะหมุนวัตถุไป 18° ในทิศทวนเข็มนาฬิกา

ภาพด้านบนแสดงภาพรวมการติดตั้งอุปกรณ์ทั้งหมดของ 3D Scanner
Code ของ Arduino จะให้ค่าพิกัด X, Y และ Z จากนั้นพิกัดเหล่านี้จะถูกนำมาพล็อตกราฟด้วยความช่วยเหลือของ Library Matplotlib ในภาษาโปรแกรม Python
จำเป็นต้อง Import Library ต่อไปนี้
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
from mpl_toolkits.mplot3d import Axes3D
Code ด้านล่างใช้สำหรับการ 3D Plot พิกัดต่างๆ
fig = plt.figure()
ax = plt.axes(projection ='3d')
ax.scatter(x, y, z, c=z, cmap='viridis', linewidth=0.5)
ax.set_title('3D Plot Of The Scan')
plt.show()
X, Y และ Z คือ List ที่เก็บค่าพิกัดตามลำดับ


วัตถุด้านบนคือชิ้นที่ต้องการนำมา Scan ด้วย 3D Scanner


ภาพด้านบนแสดงกราฟจากการ Scan วัตถุ
ผลการ Scan ยังไม่สมบูรณ์แบบเนื่องจากความคลาดเคลื่อนและอุปกรณ์ที่มีราคาประหยัด การจัดวาง Worm Gear ยังมีปัญหาเรื่องการขบกันเล็กน้อย อย่างไรก็ตาม นี่เป็นเพียงการสาธิตเทคโนโลยีเท่านั้น ซึ่งยังต้องมีการปรับปรุงแก้ไขอีกหลายส่วนเพื่อให้มีความแม่นยำมากขึ้น
และนี่คือวิธีการสร้าง 3D Scanner ที่บ้านด้วยอุปกรณ์ทั่วไป (Off-the-shelf components) และนำมาแสดงผลเป็นภาพด้วยความช่วยเหลือของ Matplotlib (Python)
Robotics EveryDay!!!
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้