กลับไปหน้ารวมไฟล์
tobor-the-arm-3d848f.md

นี่คือ Tobor แขนกลของพี่

YouTube video

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

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

พี่ก็ฝันอยากได้ Control Panel สวยๆ อันนึงด้วย ที่พี่สามารถควบคุมแขนกลและให้มันทำงานอัตโนมัติแยกจาก PC ได้ ใช้ไฟจากแหล่งจ่ายภายนอกอย่างปลอดภัย จะปล่อยให้เด็กเล่นก็ไม่ต้องกังวลเรื่องพวกโพเทนชิโอมิเตอร์ (Pot) ละเอียดอ่อน, สายไฟ, ปุ่มกด, ไฟ LED, การต่อสายที่เปราะบาง อะไรพวกนั้น

เอาล่ะ มาวางแผนกัน...

1 - แขนกลจะเป็นสไตล์ "MeArm" แบบ 4DOF ใช้เซอร์โวมินิ 4 ตัว หาโปรเจคในเน็ตได้เพียบ ราคาถูกและสนุกดี 2 - หลังจากอ่านมาหน่อย พี่ก็คิดว่าโปรเจคนี้คงไม่ต้องใช้ความรู้ด้านอิเล็กทรอนิกส์มากนัก... (หวังว่า...) ในฐานะ "มือใหม่หัดทำ" พี่กลัวมากที่ต้องมาเรียนและใช้ทรานซิสเตอร์, ตัวเก็บประจุ (Capacitor), ไอซี (IC) และของอิเล็กทรอนิกส์อื่นๆ นอกเหนือจากบอร์ด Arduino, โพเทนชิโอมิเตอร์, ปุ่มกด, LED และตัวต้านทาน (Resistor)... 3 - พี่อยากได้ Controlbox ที่แข็งแรงทนทานที่สุดเท่าที่จะเป็นไปได้ เพื่อใช้ควบคุมแขนกลโดยไม่ต้องต่อกับ PC 4 - จากที่ค้นคว้ามา ปัญหาหลักของแขนกลคือระบบไฟ Arduino ตัวเดียวจ่ายไฟให้เซอร์โว 4 ตัวไม่ไหว พี่เลยตัดสินใจใช้ Power Supply ภายนอก 5V/4A ที่เสียบปลั๊กบ้านได้ นี่คือของที่แพงที่สุดในงบ แต่เก็บไว้ใช้กับโปรเจคอื่นได้ 5 - Controlbox ต้องมีจอแสดงผล (20x4) เพื่อแสดง: 5.1 - หน้าจอต้อนรับ; 5.2 - ในโหมด Manual, ค่ามุมที่อ่านได้จากโพท เมื่อพี่หมุนมัน (แมปจาก 0 ถึง 180 องศา); 5.3 - ในโหมด Manual, จอต้องแสดงสิ่งที่พี่กำลังเขียนลงหน่วยความจำ เพื่อโปรแกรมให้ Tobor ทำงานในโหมดอัตโนมัติ (เดี๋ยวพี่จะอธิบายทีหลัง) 5.4 - หน้าจอแสดงสถานะแบบ " Program Running >>>" 6 - Controlbox ควบคุม: 6.1 - LED สีแดง แสดงสถานะไฟติด; 6.2 - โพเทนชิโอมิเตอร์ 4 ตัว สำหรับควบคุมเซอร์โวแต่ละตัว; 6.3 - สวิตช์ปุ่มกด สำหรับสลับระหว่างโหมด Manual กับ Automatic; 6.4 - ปุ่มกดสีดำ สำหรับเลือก "ตำแหน่งในหน่วยความจำ" เพื่อแก้ไขข้อผิดพลาดในการบันทึกขั้นตอน; 6.5 - ปุ่มกดสีเขียว สำหรับบันทึกมุมของเซอร์โวลงในอาร์เรย์ของตัวแปรห้าตัว: memPosition และมุมเซอร์โว (สี่ตัวแปร); 6.6 - ปุ่มกดสีแดง สำหรับใช้ในอนาคต

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

คิดถึงการจัดวางทางกายภาพ พี่สร้างบัสสาย 5V และ GND สำหรับต่อสายทั้งหมดที่ต้องการ โดยใช้ Universal Board กับคอนเนคเตอร์แบบขันสกรู ส่วนพินสัญญาณ (Signal Pins) พี่ใช้สาย Protoboard กับปลั๊ก

การต่อ I2C ให้กับจอ 20x4 เป็นตัวเลือกที่ง่ายมาก: ต่อแค่สี่เส้น

Controlbox components

รูปด้านบนแสดงของทั้งหมดใน Controlbox ปุ่มกดและโพทบัดกรีเรียบร้อยแล้ว ด้านล่างซ้ายคือบัส 5V/GND บอร์ด Arduino ติดตั้งด้วยสเปเซอร์และเทปสองหน้า 3M ด้านซ้ายของ Controlbox มีรูหนึ่งรูสำหรับสาย USB และอีกรูสำหรับจ่ายไฟภายนอก P4 (ไม่ใช่ช่องจ่ายไฟของ Arduino นะ!)

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

Controlbox interior

Controlbox wiring

Controlbox side view

ใช้เทปกาวไฟฟ้าติดสายสัญญาณให้อยู่กับที่ งานเดียวกันนี้ก็ทำกับสายอนาล็อกและสายไฟเลี้ยงที่ขอบ Arduino อีกด้านนึง

Wiring secured with tape

เรียบร้อย! (แบบฝรั่งเศส)

เหนื่อยยังวะ?

ทีนี้มาคุยเรื่องลอจิกของโค้ดกันดีกว่า

แน่นอนว่ามีอะไรให้ปรับปรุงอีกเพียบ ผมคิดว่าการจะไปจาก "จุด A ถึงจุด B" นั้น โปรแกรมเมอร์ที่เก่งๆ เขาเดินตรงๆ แต่ผมดันเดินแบบซิกแซก โทษทีภาษาอังกฤษไม่แข็งแรง และด้วยเหตุผลเดียวกันนี้ ผมก็เลยเขียนโค้ดในแบบที่ความรู้ด้านภาษาของผมจะอำนวยให้...

ตัวอย่างการใช้ servo.write(), analogRead(), pinMode(), การแมปค่าโพเทนชิโอมิเตอร์ หาได้ง่ายๆ ในเน็ต ผมเลยอยากโฟกัสที่ประเด็นหลัก ซึ่งก็คือ "ลอจิก" ที่ผมใช้

การลงมือทำจริง: ข้อต่อและจลนศาสตร์

โปรเจคนี้เผยให้เห็นเลเยอร์ซ่อนๆ ของหุ่นยนต์พื้นฐาน:

  • เลเยอร์การเคลื่อนที่: เซอร์โว 4 ตัวทำหน้าที่เป็นข้อต่อ — ฐาน, ไหล่, ศอก, และกริปเปอร์ — ทำให้แขนสามารถเคลื่อนไหวในพื้นที่ 3 มิติได้
  • เลเยอร์อินเทอร์เฟซควบคุม: ใช้ โพเทนชิโอมิเตอร์ 10k ohm 4 ตัว ผู้ใช้สามารถควบคุมมุมของแต่ละข้อต่อด้วยมือแบบเรียลไทม์ได้ สัญญาณ 0-5V แต่ละตัวจะถูกแปลงเป็นค่าดิจิทัล 10 บิต (0-1023)
  • เลเยอร์การแมปค่า: Arduino ใช้ฟังก์ชัน map() เพื่อแปลงค่าอนาล็อก 10 บิต เป็นสัญญาณ PWM 8 บิต (0-180 องศา) สำหรับเซอร์โว
  • ลูปควบคุมแบบลำดับ: โค้ด Arduino จะอัปเดตตำแหน่งของเซอร์โวแต่ละตัวให้สอดคล้องกับการเคลื่อนที่ของโพเทนชิโอมิเตอร์ที่จับคู่กันอยู่ตลอดเวลา

พอคิดถึงโหมดควบคุมด้วยมือ (Manual Operation) ก็ไม่มีอะไรท้าทายเลย แค่ analogRead(), map() แล้วก็ตั้งค่าจอแสดงผลให้แสดงค่า

Manual Mode Screen

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

ปุ่มสีเขียว:

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

Memory position display

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

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

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

โหมดอัตโนมัติ (Automatic Mode)

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

บนจอแสดงผล จะมีข้อความ "Program Running" พร้อมกับตัวอักษร " > " ที่ "เคลื่อนไหวได้" ทำให้ดู "โปร...ระดับหนึ่ง"

ถ้าไม่มีตำแหน่งหน่วยความจำถูกบันทึกไว้ก่อนหน้านี้ ข้อความ "Empty Memory" จะปรากฏขึ้นมาแทน

ปัญหาและความท้าทายในอนาคต

การจัดการกับเซอร์โวจิ๋วเปราะๆ พวกนี้มันช่างปวดหัวจริงๆ นะ พี่เผาไปสองตัวแล้วแหละ ไม่รู้สาเหตุชัดเจนเหมือนกัน แต่บางทีมันก็ร้อนจัดเลย น่าจะเป็นปัญหาเรื่องกระแสไฟล่ะมั้ง การปรับค่าเซอร์โว (Calibrate) ก่อนเอาไปติดตั้งที่แขนนี่สำคัญมากนะ อย่าข้าม

การเคลื่อนไหวของเซอร์โวก็เป็นอีกเรื่องที่ต้องปรับปรุง พี่กำลังอ่านเกี่ยวกับการติดตั้งตัวเก็บประจุ (Capacitor) 100nF บนสายสัญญาณของโพเทนชิโอมิเตอร์ (Potentiometer) อยู่

อีกอย่างพี่กำลังจะลองใช้ไลบรารี่ "VarSpeedServo.h" เพื่อให้เซอร์โวขยับได้ลื่นไหลขึ้น

เรื่อง "debouncing" พี่ยังไม่ได้จัดการเลย กำลังอ่านอยู่เหมือนกัน

Arduino EEPROM

ตอนนี้ ถ้าดับไฟ ความจำที่เก็บไว้ก็หายเกลี้ยง พี่กำลังศึกษาการใช้ EEPROM ของ Arduino เพื่อเก็บข้อมูลไว้ มันน่าสนใจมาก แต่พี่ต้องศึกษาให้มากกว่านี้ก่อนถึงจะทำได้

MeArm:

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

MeArm assembly

MeArm wiring จัดสายให้เป็นระเบียบหน่อยนะน้อง!

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

แผนขยายในอนาคต

  • OLED Identity Dashboard Integration: เพิ่มจอ OLED ขนาดเล็กเพื่อแสดงแถบชีวิต (life bar) ที่ใหญ่ขึ้นและ "ดัชนีความเป็นจริง (Reality Index)" สำหรับมุมข้อต่อแต่ละอัน
  • Cloud Interface Registration Support: เพิ่มโมดูล WiFi (ESP8266/ESP32) และเชื่อมต่อกับแดชบอร์ดบนคลาวด์ เพื่อควบคุมและติดตามแขนหุ่นยนต์จากสมาร์ทโฟนได้อย่างแม่นยำ
  • Advanced Velocity Profile Customization Support: ใช้เซนเซอร์หลายตัว (เช่น อัลตราโซนิก) เพื่อช่วยให้แขนสามารถ "จับ" วัตถุได้อัตโนมัติตามระยะทาง
  • Multi-Sensor Bio-Security Integration Support: เชื่อมต่อเซนเซอร์หลายชนิด (เช่น จอยสติ๊กหรือเมาส์) เพื่อเพิ่มความแม่นยำในการเคลื่อนไหวของแขน

เกี่ยวกับชื่อ

แขนตัวนี้ตั้งชื่อตามภาพยนตร์ไซไฟปี 1954 ชื่อ "Tobor the Great" ซึ่งมีคำอธิบายไว้ว่า:

"ในการรีวิวของ The New York Times Tobor the Great ถูกบรรยายไว้ว่าเป็น 'ภาพยนตร์ผจญภัยไซไฟสำหรับเด็ก ที่บอกเล่าเรื่องราวมิตรภาพระหว่างเด็กชายวัย 11 ขวบกับหุ่นยนต์ Tobor ของปู่ของเขา ซึ่งถูกออกแบบมาเพื่อสำรวจจักรวาลอันลึกซึ้ง'"

Original film poster โปสเตอร์ภาพยนตร์ต้นฉบับ - สงวนลิขสิทธิ์

"Tobor" ของพี่ไม่ได้ฉลาดหรือดราม่าขนาดนั้นหรอกนะ แต่ว่าลูกชายพี่ชอบมันมากเลย

หวังว่าน้องจะสนุกและมีคอมเมนต์มาแบ่งปันกันนะ! Tobor ขอบคุณทุกคนไว้ล่วงหน้า!

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

title: "โตโบร่ หุ่นยนต์แขนเทพ งานง่ายแต่หล่อ!"
description: "หุ่นยนต์แขนกลสุดเท่ ทั้งสั่งงานด้วยมือผ่านคอนโทรลพาเนลจัดเต็ม และโปรแกรมสั่งงานเองได้แบบอินเตอร์รัพต์ตึงๆ เหมาะกับวัยรุ่นสายช่างที่อยากลองของ!"
author: "NerdFatherRJ"
category: "Motors & Robotics"
tags:
  - "toys"
  - "kids"
  - "robots"
views: 12231
likes: 7
price: 1499
difficulty: "Intermediate"
components:
  - "1x 5 mm LED: Red"
  - "1x Cutting pliers"
  - "1x 20x4 Display with I2C module"
  - "1x Soldering iron (generic)"
  - "1x P4 female outlet"
  - "1x Switch button"
  - "1x LED housing"
  - "1x External Power source 5V/4A"
  - "1x Arduino UNO"
  - "3x Colored push-button"
  - "4x Rotary potentiometer (generic)"
  - "1x MeArm or any other 4DOF robotic arm"
  - "1x Jumper wires (generic)"
  - "4x SG90 Micro-servo motor"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "27b31d81b0fea85c2082e03c57d3929e95f56557659f0a16f9399b8129c0a8b2"
encryptedPayload: "U2FsdGVkX1+jOaHIAjmNboAttRFqrvR/oCdYPYS1NfCB+JhBLPIvi9zYzylRS6a9/ccpZx7moFciIqS6t7LQcXBq28c5taSxzWMw36geIws="
seoDescription: "Build a manual and programmable robotic arm with a fancy control panel. A complete DIY Arduino project."
videoLinks:
  - "https://www.youtube.com/embed/e5kDpdm420s"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/tobor-the-arm-3d848f_cover.jpg"
lang: "en"