กลับไปหน้ารวมไฟล์
arduino-controlled-turntable-for-3d-photography-0f0e63.md

ไอเดียเจ๋งๆ ของโปรเจกต์นี้เริ่มต้นตอนที่พี่มองเห็นเจ้าโต๊ะหมุนของ IKEA นี่แหละ น้องๆ คงเคยเห็นตามร้านอาหารจีนใช่มั้ย:

IKEA turntable, which was the trigger to start with this project

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

พี่ก็เลยเริ่มต้นด้วยการปริ้นเกียร์ 3D บางชิ้นที่เข้ากับสเต็ปเปอร์มอเตอร์ที่พี่มีอยู่แล้ว

Initial steps in this project (the 3D printed gears) Initial steps in this project ( the stepper motor) the turntable with 3D printed gear the turntable assembly with stepper motor

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

พี่เลยไปหาสเต็ปเปอร์มอเตอร์ตัวที่แรงขึ้นมาใหม่ นั่นคือ NEMA 17 HS 34:

the turntable assembly with stronger stepper motor

แม้ว่าโครงสร้างนี้จะทำงานได้ (แบบฝืนๆ) แต่สเต็ปเปอร์มอเตอร์ก็ยังแทบจะหมุนโต๊ะไม้หนักๆ ไม่ได้เลย เพราะแรงเสียดทานในเกียร์พลาสติก

พี่เลยตัดใจทิ้งไอเดียการใช้โต๊ะหมุน IKEA แล้วหันมาปริ้นโต๊ะหมุนของตัวเองซะเลย ซึ่งเบากว่าและหมุนด้วย NEMA 17 ได้สบายๆ!

The 3D printed turntable with stepper motor

หลังจากประกอบทุกอย่างเข้าด้วยกัน นี่ก็คือผลลัพธ์สุดท้ายของโปรเจกต์:

The final result of the turntable

แน่นอนว่าความทะเยอทะยานของพี่มันมากกว่าแค่ให้วัตถุหมุน 360 องศา!

พี่อยากควบคุมกล้อง SONY HX400 ของพี่จากระยะไกล (แบบไร้สาย ผ่านบลูทูธ) และให้มันถ่ายภาพอัตโนมัติทุกๆ xx องศา เป้าหมายคือการแปลงภาพ 2D ทุกภาพให้กลายเป็นภาพ 3D และประมวลผลวัตถุเพื่อนำไปปริ้น 3D ต่อไป

ผลลัพธ์สุดเจ๋งดูได้ที่นี่เลย:

ในบทสอนต่อไป น้องๆ จะได้อ่านว่าโปรเจกต์นี้สร้างขึ้นยังไง

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

อุปกรณ์ต่างๆ

ส่วนประกอบฮาร์ดแวร์:

ดูได้ในขั้นตอนที่ 2 และ 3

เครื่องมือทั่วไปและอุปกรณ์ทดสอบ

แอปและบริการซอฟต์แวร์:

  • Arduino IDE
  • Fusion 360
  • CURA
  • Autodesk Fusion 360
  • ClickCharts Diagram and Flowchart
  • EasyEDA
  • Fritzing

ขั้นตอนที่ 1: ออกแบบระบบ

การออกแบบฐานหมุน (Turntable) แสดงในแผนภาพด้านล่างนี้:

การออกแบบระบบฐานหมุนสำหรับการถ่ายภาพ 3 มิติ

ระบบนี้ประกอบด้วย 2 ส่วนหลักๆ คือ:

  • ชุดฐานหมุน (TurntableAssembly - TA) ที่ใช้ ESP32 เป็นไมโครคอนโทรลเลอร์ทำหน้าที่เป็นเซิร์ฟเวอร์:

  • กล่องควบคุมกล้อง (CameraControl Box - CCB) ที่ใช้ ESP32 อีกตัวทำหน้าที่เป็นไคลเอนต์:

ส่วน TA จะติดตั้งหน้าจอ OLED ขนาด 0.96 นิ้ว ซึ่งทำงานร่วมกับปุ่มกดเพื่อสร้างส่วนติดต่อผู้ใช้ (HMI) ของระบบ:

HMI นี้ทำให้ผู้ใช้สามารถเลือกโหมดการหมุนของฐานและตรวจสอบสถานะได้

โหมดการหมุนที่มีให้เลือกมีดังนี้:

  • ถ่าย 5 ภาพ โดยหมุนครั้งละ 72°
  • ถ่าย 10 ภาพ โดยหมุนครั้งละ 36°
  • ถ่าย 15 ภาพ โดยหมุนครั้งละ 24°
  • ถ่าย 20 ภาพ โดยหมุนครั้งละ 18°
  • หมุนต่อเนื่อง

มีปุ่มสีเขียว 3 ปุ่มสำหรับการกระทำต่างๆ เช่น:

  • “go-to-Origin” เพื่อพาฐานหมุนกลับไปยังตำแหน่งเริ่มต้นที่กำหนดโดยสวิตช์กล (ติดตั้งไว้ใต้ฐานหมุน)
  • “Start/Pause” ใช้เพื่อรีสตาร์ทระบบหรือเริ่มโหมดการหมุนใหม่
  • “manual shot” ตั้งใจให้ส่งคำสั่งถ่ายภาพไปยังกล้อง แต่ในดีไซน์ปัจจุบันใช้เฉพาะในขั้นตอนการเลือกโหมดการหมุนเท่านั้น

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

ไฟ LED สีน้ำเงินจะแสดงสถานะการเชื่อมต่อบลูทูธไปยังไคลเอนต์กล้อง

ระบบใช้ไฟเลี้ยงจากอะแดปเตอร์ 12V/3A ที่เสียบกับไฟบ้าน โดยไฟ LED สีแดงจะแสดงสถานะว่าเปิดไฟเลี้ยงแล้ว

ส่วน CCB เป็นกล่องพิมพ์ 3 มิติ ที่บรรจุ ESP32, ไฟ LED (3mm) และขั้วต่อสำหรับเสียบเข้ากับพอร์ต micro USB แบบหลายขาของกล้อง SONY HX 400V ไฟเลี้ยงสำหรับ CCB ใช้จากแบตเตอรี่ของกล้อง (3.3V) CCB ยังมีขั้วต่อสำหรับปลั๊ก 3.5mm เพื่อใช้เปิด-ปิดไฟสปอตไลต์ LED แยก สำหรับส่องสว่างวัตถุที่จะถ่ายภาพ

ไฟ LED 3 ดวง (นอกจากไฟสีส้มที่แสดงสถานะไฟเลี้ยง) มีหน้าที่ดังนี้:

  • ไฟ LED สีเหลือง: แสดงว่ากล้องกำลังโฟกัส
  • ไฟ LED สีเขียว: แสดงว่ากล้องกำลังได้รับคำสั่ง “SHOOT”
  • ไฟ LED สีน้ำเงิน: แสดงสถานะการเชื่อมต่อบลูทูธกับเซิร์ฟเวอร์ฐานหมุน

ขั้นตอนที่ 2: การประกอบชุดฐานหมุน

อุปกรณ์ที่ใช้

ใช้วัสดุต่อไปนี้สำหรับสร้างฐานหมุน:

การออกแบบวงจรอิเล็กทรอนิกส์

การออกแบบวงจรอิเล็กทรอนิกส์แสดงในแผนภาพวงจรด้านล่าง ใช้ไฟเลี้ยง 12 V/3A ไฟ 5V ภายในสำหรับ ESP32 ได้มาจากไดรเวอร์มอเตอร์ L298N ในขณะที่ไฟ 3.3 V สำหรับจอ OLED ได้มาจากบอร์ด ESP32

แผนภาพวงจรของเซิร์ฟเวอร์สำหรับฐานหมุน

แผนภาพด้านบนสร้างโดยใช้ EasyEDA

จอ OLED ขนาด 0.96 นิ้ว มีความละเอียด 128 * 64 พิกเซล และถูกใส่ไว้ในเคสพิมพ์ 3 มิติ:

สเต็ปเปอร์มอเตอร์ NEMA 17 และไดรเวอร์แสดงไว้ด้านล่าง:

สเต็ปเปอร์มอเตอร์ 17HS3430 ไดรเวอร์มอเตอร์ L298N ไมโครคอนโทรลเลอร์: ESP 32 (NodeMCU)

รายละเอียดเทคนิคเพิ่มเติม: การทำ Micro-Stepping ของสเต็ปเปอร์มอเตอร์ NEMA

การหมุนวัตถุแบบต่อเนื่องไม่เพียงพอสำหรับการสแกนด้วย Photogrammetry 3D นะน้อง! การเบลอจากการเคลื่อนไหวจะทำลายอัลกอริทึมไปเลย! กล้องต้องนิ่งสนิท โปรเจกต์นี้ใช้ State Machine ที่ทำงานประสานกันอย่างเฉียบคม มันสั่งให้สเต็ปเปอร์มอเตอร์ตัวเบิ้มขยับวัตถุทีละนิดอย่างแม่นยำ หยุดมันแบบดุดันให้สนิท แล้วค่อยส่งสัญญาณชัตเตอร์ไปที่กล้องจากระยะไกล เพื่อให้ได้ลำดับการถ่ายภาพที่สมบูรณ์แบบ! งานนี้จัดไปวัยรุ่น!

ห้ามใช้มอเตอร์แรงบิดต่ำราคาถูกเด็ดขาดนะน้อง! มันไม่มีตำแหน่งที่แม่นยำเลยสักนิด

  1. โปรเจคนี้ใช้ มอเตอร์สเต็ปเปอร์แบบไบโพลาร์ NEMA 17 ตัวเบิ้ม
  2. สมการ 200 สเต็ป: สเต็ปเปอร์ NEMA มาตรฐานจะหมุนครบ 1 รอบได้ 200 สเต็ป (ขั้น) นั่นหมายความว่าแต่ละสเต็ปมันกว้างถึง 1.8 องศา ถ้าเอาไปสแกนโมเดลเล็กๆ การหมุนจะกระตุกมาก!
  3. โค้ด C++ จะสั่งงานไดรเวอร์มอเตอร์ (เช่น A4988 Stepper Driver) เราสามารถตั้งค่า "ไมโครสเต็ปปิ้ง" ด้วยจัมเปอร์บนบอร์ดไดรเวอร์ได้เลย (MS1, MS2, MS3)
  4. ทางคณิตศาสตร์แล้ว มันจะบังคับให้ชิปไดรเวอร์สร้างสเต็ปย่อยๆ ระหว่างสเต็ปใหญ่ โดยการผสมสัญญาณ PWM แบบซับซ้อน! จาก 200 สเต็ป จะกลายเป็น 3200 ไมโครสเต็ปต่อการหมุน 1 รอบ! แผ่นหมุนจะเคลื่อนที่ได้ลื่นปรื้ดๆ แบบไม่น่าเชื่อ ที่ 0.11 องศา!

ฐานแผ่นหมุน (Turntable plateau) ออกแบบด้วย Fusion 360 และพิมพ์ด้วยเครื่อง Creality CR10S Pro รูตรงกลางก็พิมพ์มาพอดีกับแกนของมอเตอร์สเต็ปเปอร์เลย

3D design of Turntable plateau

การจัดตั้งเบรดบอร์ดสำหรับทดสอบและพัฒนาซอฟต์แวร์ด้วย ARDUINO IDE แสดงในภาพต่อไปนี้:

breadboard set up

หมายเหตุ: เฟืองพลาสติกพิมพ์ 3D เป็นส่วนหนึ่งของแนวคิดการสร้างต้นแบบ ซึ่งอ้างอิงจากแผ่นหมุนของ IKEA

การประกอบชิ้นส่วนกลและไฟฟ้า

การประกอบชิ้นส่วนกลและอิเล็กทรอนิกส์ทั้งหมดแสดงในภาพด้านล่าง:

Electrical and mechanical assembly of all elements Electrical and mechanical assembly of all elements

สังเกตว่าแผ่นหมุนทั้งหมดต้องการการเชื่อมต่อแค่ 1 สายเท่านั้น คือ สายไฟ 12V มีการเจาะช่องแยกในกล่องไว้สำหรับ (ชั่วคราว) เชื่อมต่อสาย micro USB ของบอร์ด ESP32 เพื่อใช้ในกรณีอัพเดทซอฟต์แวร์

แผ่นฐานสำหรับสร้างถูกตัดออกจากเขียง IKEA และทำให้พอดีกับกล่อง ACTION

การออกแบบซอฟต์แวร์

แผนภาพโฟลว์ชาร์ตต่อไปนี้แสดงการออกแบบระดับสูงของซอฟต์แวร์เซิร์ฟเวอร์แผ่นหมุน:

Flowchart made with ClickCharts

ในเฟสตั้งต้น (set up) จะมีการเรียกฟังก์ชันหลายตัว:

  • ตั้งค่าการเชื่อมต่อบลูทูธ
  • WELCOME(); // แสดงข้อความต้อนรับจนกว่าจะกดปุ่มแดง
  • TURNTABLEMODES(); // แสดงโหมดการทำงานของแผ่นหมุนที่เป็นไปได้
  • HOWTOSET(); // แสดงคำอธิบายวิธีเลือกโหมดแผ่นหมุน
  • SETMODE(); // ตั้งค่าโหมดแผ่นหมุนโดยกดปุ่มแดงและเลือกด้วยปุ่มเขียว
  • ORIGIN(); // ควบคุมแผ่นหมุนไปยังตำแหน่งออริจิน

เมนูที่แสดงบนจอ OLED 0.96 นิ้ว จะปรากฏดังนี้:

menus, displayed on the 0,96” OLED display

ฟังก์ชัน "LOOP" หลักนั้นสั้นมาก แสดงดังด้านล่าง:

void loop() {
 CONNECTION();
 switch (turnmode) {    
     case 1:                   // Turnmode 1: 5 X 72 dgr)
       STARTandTURN();
       break;
     case 2:                   // Turnmode 2: 10 X 36 dgr)
       STARTandTURN();
       break;
     case 3:                   // Turnmode 3: 15 X 24 dgr)
       STARTandTURN();
       break;
     case 4:                   // Turnmode 4: 20 X 18 dgr)
       STARTandTURN();
       break;
     case 5:                   // Turnmode 5: CONTINUOUS
       STARTCONTINUOUS ();
       break;    
                 }  
}

สิ่งเดียวที่เกิดขึ้นในลูปคือ:

  • สร้างการเชื่อมต่อบลูทูธ
  • รันโหมดการหมุนที่ถูกเลือก (ตามที่ตั้งค่าไว้ในเฟส set up)

สเก็ตช์ ARDUINO เต็มสำหรับเซิร์ฟเวอร์แผ่นหมุนมีความยาวประมาณ 600 บรรทัด รายการโค้ดเต็มถูกรวมไว้เป็นส่วนหนึ่งของบทช่วยสอนนี้ โดยโค้ด ARDUINO มีคำอธิบายประกอบไว้อย่างละเอียด

Step3: สร้างฝั่งกล้อง (Camera client)

อุปกรณ์ที่ใช้

ของที่ต้องใช้สำหรับเจ้าเครื่องหมุนนี้มีดังนี้:

การออกแบบวงจรไฟฟ้า

เราเอาพาวเวอร์ซัพพลาย 3.3V ตรงๆ จากตัวกล้อง แล้วแปลงเป็น 5V เพื่อใช้เลี้ยง ESP32 (ซึ่งข้างในมันจะสร้าง 3.3V เองอีกที)

แผนภาพ Fritzing จะหน้าตาประมาณนี้:

แผนภาพ Fritzing (หมายเหตุ: แบตเตอรี่ 9V เอาไว้ทดสอบเฉยๆนะ) การจัดวางบนเบรดบอร์ด

ไม่มีอะไรดีไปกว่าวงจรไฟฟ้าที่ชัดเจนอีกแล้ว:

แผนผังวงจรของ Camera Client (สร้างด้วย EasyEDA)

การเชื่อมต่อกับกล้อง SONY HX400V

กล้อง Sony DSC HX400V มีพอร์ต USB ที่หน้าตาเหมือนไมโคร USB ธรรมดา (ฝั่งเมีย) แบบ 5 พิน และแน่นอนว่าเราสามารถเสียบสายไมโคร USB ตัวผู้ปกติเข้าไปเพื่อชาร์จไฟ 5V และถ่ายโอนข้อมูลได้ (ดูตารางด้านล่าง):

การจัดสรรพินของไมโคร USB มาตรฐาน

จริงๆ แล้วพอร์ตของ Sony เนี่ย มันคือสิ่งที่ Sony เรียกว่า "Multi/Micro USB Terminal ที่รองรับอุปกรณ์ที่เข้ากันได้กับ Micro USB" ซึ่งมีพินเพิ่มมาอีก 10 พิน เพื่อใช้สำหรับควบคุมกล้องจากระยะไกลได้

ในโปรเจคนี้ เราใช้แค่พินต่อไปนี้ของคอนเนคเตอร์แบบมัลติพอร์ต:

การจัดสรรพินที่ใช้สำหรับกล้อง Sony

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

พี่ใช้สายโทรศัพท์ 4 เส้นสำหรับเชื่อมต่อคอนเนคเตอร์เข้ากับ ESP32 การบัดกรีสายเข้ากับ...

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

apps:
  - "1x Fritzing"
  - "1x ClickCharts"
  - "1x Fusion 360"
  - "1x Arduino IDE"
  - "1x CURA"
  - "1x EasyEDA"
author: "Pedro52"
category: "Motors & Robotics"
components:
  - "1x connector female 5.5 mm"
  - "2x Resistor 221 ohm"
  - "1x Capacitor 220 µF"
  - "1x 3D printed box 57 * 77 * 28 mm"
  - "1x 3 mm LED: Red"
  - "1x Stepper Motor, Mini Step"
  - "1x end stop switch"
  - "1x 9V 1A Switching Wall Power Supply"
  - "1x Light box 30 * 22 cm"
  - "1x 3D Printer (generic)"
  - "1x ESP32"
  - "1x Common tools and test equipment"
  - "2x Resistor 4.75k ohm"
  - "1x Capacitor 1000 µF"
  - "1x LED 3 mm Blue"
  - "1x Industrial Pushbutton Switch, Push-Pull"
  - "7x Resistor 221 ohm"
  - "1x Capacitor 10 µF"
  - "1x plastic cutting board 34*24 cm"
  - "4x Capacitor 100 nF"
  - "1x Dual H-Bridge motor drivers L298"
  - "4x Switch Actuator, Head for spring return push-button"
  - "1x Parts needed for Camera Client"
description: "Photogrammetry synchronization! Rig a massive bipolar NEMA stepper motor to flawlessly execute microscopic 1-degree fractional increments, commanding physical camera shutter-releases automatically for total seamless 360-degree topographical scanning."
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/a2318484-311b-44e7-8ef0-0166a3b46632.ino"
  - "https://projects.arduinocontent.cc/5172178a-ad51-48cd-8d41-b335bd9e187c.ino"
  - "https://projects.arduinocontent.cc/a2318484-311b-44e7-8ef0-0166a3b46632.ino"
encryptedPayload: "U2FsdGVkX19S2Tw2KjN/hiM8OR8Ju3qFSqh2dz3SuScpbCTVCrOJPzFOf04ajZOZZqmWK4bBDGPf5FHHNoAL8bQBirQNFH0oh/7rC/vkXgxwleSvwhcqLGgOhlSkSE5ZeHj62x7kUBN25uHRRicGack24pe1V+vCQiGq03lJ7LVHbbYXDhWMX5qmt7bcTl06"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-controlled-turntable-for-3d-photography-0f0e63_cover.jpg"
lang: "en"
likes: 3
passwordHash: "8ae79a6a62a92d255f86535cb9b4ff90c43f1c53c6e1c5c0080092d2afd2360c"
price: 2450
seoDescription: "Build an Arduino-controlled 3D-printed turntable with a stepper motor and Bluetooth camera control to create 3D pictures for 3D printing."
tags:
  - "art"
  - "data collection"
  - "remote control"
title: "เปิดตัว! Arduino จัดการโต๊ะหมุนถ่ายภาพ 3D งานง่ายแต่หล่อ"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/GEsRcFQ1_H8"
  - "https://www.youtube.com/embed/k4NTf0hMjtY"
  - "https://www.youtube.com/embed/M2VazVGm7TU"
  - "https://www.youtube.com/embed/2-bqABJPZFY"
views: 8340