กลับไปหน้ารวมไฟล์
roboarm-03a267.md

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

ในโปรเจคนี้ น้องจะได้:

  • คำนวณ Mechanical Advantage ของแกนหลัก 2 แกน;
  • ออกแบบแขนกลด้วยโปรแกรม CAD (SketchUp);
  • พิมพ์โมเดลด้วยเครื่องพิมพ์ 3D;
  • เรียนรู้ 3 วิธีควบคุมหุ่นยนต์ (จัดเต็ม!).

ของที่ต้องเตรียม:

  • น็อตและโบลท์ M3 อย่างละ 50 ตัว;
  • ลวดสายไฟ;
  • บรัดบอร์ด.

น้องจะได้เรียนรู้วิธีควบคุมหุ่นยนต์ผ่าน:

  • คอมพิวเตอร์ ผ่านพอร์ต USB (แนะนำถ้าอยากจดบันทึกตำแหน่งที่เซอร์โวไปถึงได้);
  • โพเทนชิโอมิเตอร์ (ปุ่มหมุน);
  • โมดูลบลูทูธ HC-05.

1. การออกแบบแกนหลัก 2 แกน:

ก่อนอื่นต้องเข้าใจว่าแขนกลคือ คานชนิดที่ 1 (Class 1 lever) นั่นหมายความว่าจุดหมุน (Fulcrum) อยู่ระหว่างแรงพยายาม (Effort) กับน้ำหนักบรรทุก (Load) ด้านล่างนี้คือแกนหลัก 2 แกนของแขนกล ที่ทำให้มันเคลื่อนที่ ไปหน้า-หลัง และ ขึ้น-ลง ได้

Servo2 ควบคุมทิศทางขึ้น-ลง

Servo1 ควบคุมทิศทางไปหน้า-หลัง

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

ต้นแบบกระดาษลัง

ต่อมา พี่เลือกใช้ เซอร์โวมอเตอร์ MG995 เพราะมันทั้งเล็กและแข็งแรง (ที่ 6V มันดันได้สูงสุดถึง 10 kgf·cm เลยนะเออ)

ทีนี้ น้องต้องตัดสินใจแล้วว่าคานจะยาวแค่ไหน ยิ่งคานยาว แรงที่เซอร์โวต้องออกก็ยิ่งมาก และน้ำหนักที่มันรับได้ก็จะลดลง สูตรคือ effort arm * effort = load arm * load

คานชนิดที่ 1

ตัวอย่างเช่น ถ้าเราใช้เซอร์โว MG995 เป็น servo2 ตามแผนภาพด้านล่าง มันจะรับน้ำหนักได้สูงสุด 2 กิโลกรัม

การคำนวณน้ำหนักบรรทุกของ Servo2

ส่วน servo1 จะรับน้ำหนักได้สูงสุด 500 กรัม

การคำนวณน้ำหนักบรรทุกของ Servo1

อย่างที่เห็น เนื่องจาก Mechanical Advantage (ความได้เปรียบเชิงกล) servo2 จะมีบทบาทสำคัญในการยกน้ำหนักบรรทุก ในโมเดลที่แนบไว้ในส่วนฮาร์ดแวร์ servo2 สามารถยกน้ำหนักได้สูงสุด 1.6 กก. และ servo1 สามารถยกเพิ่มได้อีก 833 กรัม ตัวเลขนี้อาจเปลี่ยนแปลงได้ เพราะเซอร์โวทำงานที่ 10 kg*cm ที่ 6V จำไว้ด้วยว่าเราใช้แบตเตอรี่เล็กๆ ที่ไฟตกเร็วอยู่นะ อย่าช็อตมันล่ะ!

รายละเอียดเทคนิคเพิ่มเติม (แบบลงลึก): นี่คือการเจาะลึกเรื่อง Mechanical Advantage & Static Forensics แขนกลทำงานบนหลักการของ คานชนิดที่ 1 ซึ่งอยู่ภายใต้สมการ $Effort_Arm \times Effort = Load_Arm \times Load$ โปรเจคนี้คำนวณโมเมนต์แขนเฉพาะสำหรับแกนหลักสองแกน (ขึ้น-ลง และ ไปหน้า-หลัง) เพื่อให้แน่ใจว่าแรงบิด 10kgf·cm ของ MG995 จะไม่ถูกเกินโดยมวลของกริปเปอร์และวัตถุที่ถูกยก ด้วยการปรับความยาวข้อต่อ—หรือ ความยาวของลิงก์—ระบบจะได้ อัตราส่วนแรงบิดต่อน้ำหนักบรรทุก ที่คำนวณแล้วว่าสามารถยกน้ำหนักได้สูงถึง 1.6kg ที่จุดหมุน

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

แกนสุดท้าย จะเป็น เซอร์โวฐาน (Base Servo) ที่ทำให้แขนหุ่นยนต์ หมุนได้รอบตัว เนี่ยแหละ

2. โมเดล CAD:

Example of CAD model

ทีนี้ก็ถึงเวลาวาดแขนหุ่นยนต์แล้วส่งไปปริ้นท์ 3D ได้เลย พี่ใช้ SketchUp ในการออกแบบ เพราะใช้ง่ายดี อย่าลืมตั้งหน่วยให้ถูกด้วยนะ (mm) ใน ส่วนฮาร์ดแวร์ (CAD) มี โมเดลตัวอย่าง 2 แบบ ให้ดู: แบบ 2 แกน กับ แบบ 3 แกน

เวลาออกแบบเนี่ย พวกชิ้นส่วนหุ่นยนต์ต้องแข็งแรงพอที่จะรับน้ำหนักได้ ถ้าบางเกินไปเดี๋ยวหักเอาง่ายๆ หนาประมาณ 2.6 mm น่าจะโอเค ส่วนชิ้นส่วนที่ใช้ยึดมอเตอร์เนี่ย พี่ เพิ่มความหนาเป็นสองเท่า เลย กันไว้ดีกว่าแก้ เดี๋ยวโค้งงอตอนทำงานหนัก สำหรับ แขนรับน้ำหนัก (Load Arm) เพราะมันยาวมาก พี่เลยใช้ ความหนา 8 mm ไปเลย

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

ตอนออกแบบ พี่แนะนำว่า ให้วางชิ้นส่วนพวกนี้ (สีแดง) ให้ขนานหรือตั้งฉากกับพื้น ตามในรูป จะได้ออกแบบง่ายขึ้นเยอะ

Components aligned with ground

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

Symmetrical part alignment

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

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

Symmetrical servo placement

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

Holes for moving parts marked in blue

Close-up of moving part connections

น้องต้องมั่นใจด้วยว่าได้ออกแบบ ฐาน ให้มั่นคงพอที่หุ่นยนต์จะไม่ล้มเพราะ น้ำหนักของภาระ ทำได้หลายวิธี เช่น: 1. ทำ ฐานรองรับให้กว้าง; 2. ยึดมันเข้ากับที่รองรับ (อาจจะเป็นหุ่นยนต์อีกตัวนึงก็ได้) ด้วยสลักเกลียวหรือกาว; 3. ไอเดียอื่นๆ ที่คิดออก

ก่อนส่งไปปริ้นท์ สามารถทดสอบการออกแบบ CAD ได้โดย แค่เลือกชิ้นส่วนแล้วลองหมุนมันดู โดยให้จุดศูนย์กลางอยู่ที่จุดศูนย์กลางของเซอร์โว

3. พิมพ์โมเดลด้วยเครื่อง 3D Printer:

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

This is how I attached the robotic claw gripper

พี่พิมพ์สเก็ตช์แบบ 2 แกนออกมานะ ซึ่งมันไม่มีฐาน เพราะพี่จะเอาไปติดตั้งบนรถหุ่นยนต์คันเล็กที่มันหมุนได้ด้วยตัวเองอยู่แล้ว ถ้าน้องไม่มีเครื่องพิมพ์ 3D เอง ก็ไปใช้บริการร้านพิมพ์ทั่วไปได้ ร้านฮาร์ดแวร์หรือร้านเกี่ยวกับช่างมักจะมีบริการ พอใช้ได้ ราคาก็ไม่แรงมาก (ของพี่พิมพ์ชุดนี้จ่ายไปประมาณ 20 ยูโร) แต่น้องต้องทำใจนิดนึงว่าแขนหุ่นยนต์ที่พิมพ์ออกมาอาจจะไม่เพอร์เฟคต์ 100% นะ นั่นเป็นเพราะเครื่องพิมพ์มันมีค่าความคลาดเคลื่อน (Error) อยู่ประมาณ 0.1 มม. หรือมากกว่านั้น

ในสเก็ตช์ของพี่ พี่ใช้สลักเกลียว (Bolt) ในการยึดชิ้นส่วน บางจุด (โดยเฉพาะชิ้นส่วนที่ประกอบเป็นข้อต่อ 2 แกน) อาจต้องเจาะรูให้ใหญ่กว่านิดนึงเพื่อให้มันขยับได้คล่อง น้องแก้ปัญหาได้ด้วยการใช้ไขควงไฟฟ้าเจาะขยายรู หรือจะเลือกใช้สลักเกลียวแบบที่มีช่วงเกลียว (Thread) สั้นกว่าช่วงเรียบ (Grip) ก็ได้ ถ้าชิ้นส่วนที่พิมพ์ออกมาไม่เข้าล็อคกัน หรือมอเตอร์เซอร์โวใส่เข้าไปในรูไม่ได้ ให้ใช้กระดาษทรายขัดนิดหน่อยก็เรียบร้อย

รายละเอียดเทคนิคเพิ่มเติม: นี่คือโน้ตสำคัญเรื่อง ความเผื่อ (Tolerance) ของการพิมพ์ 3D เนื่องจากต้องเผื่อค่าความคลาดเคลื่อนของเครื่องพิมพ์ (~0.1mm) เทคนิคหลังการพิมพ์ เช่น การขัดด้วยกระดาษทรายและการขยายรูด้วยไขควง จึงจำเป็นมากเพื่อให้สลักเกลียว M3 ขนาด 50 ตัว เข้าได้พอดีในจุดหมุนที่พิมพ์ออกมา ทำให้การเคลื่อนไหวลื่นไหล

3D printed parts

Assembled 3D printed arm

แค่นี้ก็ได้แขนหุ่นยนต์จากเครื่องพิมพ์ 3D แล้ว เยี่ยมมาก :) ตอนนี้สิ่งที่ขาดก็คือการต่อสายเซอร์โวเข้ากับ Arduino และจ่ายไฟให้มัน - สำหรับ เซอร์โว นะ น้องใช้ แบตเตอรี่ AA 4 ก้อน ก็เพียงพอแล้ว เพราะต้องการแค่ 6 โวลต์ ส่วน Arduino น้องจ่ายไฟจาก คอมพิวเตอร์ หรือจาก แบตเตอรี่ 9V ก็ได้

Wired robotic arm setup

รายละเอียดเทคนิคเพิ่มเติม: การรักษาความเสถียรของวงจรจ่ายไฟเซอร์โว (Servo Rail Stabilization) เป็นสิ่งสำคัญ การขับเซอร์โว MG995 หลายตัวพร้อมกันอาจทำให้เกิดสไปค์กระแสสูง (>2A) โปรเจกต์นี้ใช้ แบตเตอรี่ชุด 6V แยกเฉพาะสำหรับจ่ายไฟให้เซอร์โว ซึ่งช่วยแยกสัญญาณรบกวนจากมอเตอร์ออกจากวงจรลอจิกที่ไวต่อสัญญาณรบกวนของ Arduino โดยยังคงเชื่อมต่อกราวด์ร่วมกัน

4. จะควบคุมแขนหุ่นยนต์ยังไงดี?

  1. ใช้ PC คุม:

น้องจะต้องมี โค้ดสำหรับปรับเทียบ (Calibration Code) (อยู่ในส่วนโค้ด) เพื่อทดสอบว่าแขนหุ่นยนต์ทำงานยังไง และเซอร์โวติดตั้งดีหรือยัง (เช่น กรณีของพี่ที่ติดเซอร์โวใกล้ขีด 180° เกินไป มันหมุนกลับไม่ได้ หมุนไปข้างหน้าได้อย่างเดียว) วิธีทดสอบที่ง่ายที่สุดคือใช้แล็ปท็อปหรือ PC ของน้อง บอร์ด Arduino สามารถเชื่อมต่อกับคอมพิวเตอร์ผ่านพอร์ต USB วิธีการต่อสายดูได้ในส่วนแผนภาพวงจร (Schematics)

รายละเอียดเทคนิคเพิ่มเติม: นี่คือกระบวนการ ปรับเทียบเชิงลึก (Calibration Forensics) "สเก็ตช์ปรับเทียบ" ที่ให้มาใช้เพื่อหาขีดจำกัดความกว้างพัลส์ PWM ที่แม่นยำ (ปกติอยู่ที่ 500µs ถึง 2400µs) สำหรับเซอร์โวแต่ละตัว ซึ่งจะป้องกันไม่ให้เฟืองภายในติดขัดกับจุดหยุดเชิงกล (Hard-stop) ของโครงสร้าง ช่วยยืดอายุการใช้งานและทำให้การทำงานน่าเชื่อถือ

น้องสามารถเขียนโปรแกรมเฉพาะขึ้นมาเพื่อให้ทำท่าทางบางอย่าง หรือเขียนโปรแกรมที่รับค่าจากน้องแล้ว Arduino ก็จะประมวลผลและสั่งให้เซอร์โวขยับตามนั้น

  1. ใช้โพเทนชิโอมิเตอร์ (Potentiometers) (100k หรือ 10k):

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

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

รายละเอียดเทคนิคเพิ่มเติม: นี่คือ Analog HMI (Human-Machine Interface) แบบอนาล็อก มันใช้ Arduino's 10-bit Analog-to-Digital Converter (ADC) เพื่อแปลงสัญญาณอนาล็อก 0V-5V จากโพเทนชิโอมิเตอร์ไปเป็นตำแหน่งเซอร์โว 0º-180º ทำให้เราควบคุมแขนกลได้แบบเรียลไทม์ แม่นยำ เหมาะมากสำหรับการดีบั๊กและศึกษาจลนศาสตร์ของแขน

  1. ด้วยโทรศัพท์มือถือ (และโมดูล HC-05 Bluetooth):

แน่นอนว่าการใช้โทรศัพท์ควบคุมหุ่นยนต์น่าจะเป็นตัวเลือกที่ดีที่สุด แต่ตรงนี้แหละที่เริ่มยากขึ้น เพราะน้องต้องจัดการทั้งการสื่อสารแบบอนุกรม (Serial Communication) และการสร้างแอป Android ให้โทรศัพท์ทำหน้าที่เป็นรีโมทคอนโทรล

รายละเอียดเทคนิคเพิ่มเติม: วิธีนี้ใช้ระบบ Wireless Telemetry โมดูล HC-05 ทำหน้าที่เป็นสะพาน Bluetooth SPP (Serial Port Profile) โดยใช้แอป Android ที่สร้างขึ้นเอง (เช่น สร้างด้วย MIT App Inventor) ผู้ควบคุมสามารถส่งคำสั่งแบบอนุกรมผ่านอากาศได้ ทำให้ควบคุม End-Effector จากระยะไกลได้

ถ้าน้องสนใจอยากรู้ว่า จะควบคุมแขนกลด้วยโทรศัพท์มือถือได้ยังไง ลองไปดูโปรเจคอื่นของพี่ได้

จัดไปวัยรุ่น เอาไปใช้และปรับปรุงกันต่อได้เต็มที่เลยนะ :) สู้งานนะน้อง

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

apps:
  - "1x Arduino IDE"
  - "1x MIT App Inventor 2"
  - "1x SketchUp"
author: "anova9347"
category: "Motors & Robotics"
components:
  - "1x 3D Printer (generic)"
  - "1x Arduino UNO"
  - "1x 3d printed robotic arm"
  - "1x Robotic Claw Gripper"
  - "4x Servo motor Mg995"
  - "1x Multitool, Screwdriver"
description: "โปรเจคเจ๋งๆ กับ Arduino ที่ทำแขนกล 2 แกน พร้อมกริปเปอร์แบบก้ามปู ควบคุมได้หลายแบบจัดไป ทั้งจาก PC, ปุ่มปรับค่า (Potentiometer) หรือแม้แต่จากมือถือเราเอง งานง่ายแต่หล่อมาก วัยรุ่นต้องลอง!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/7e5ebb1f-2170-47f2-935f-905c13edd7a6.ino"
  - "https://projects.arduinocontent.cc/7e5ebb1f-2170-47f2-935f-905c13edd7a6.ino"
encryptedPayload: "U2FsdGVkX1+PhZhhE429PXF5afomlhE/VO5bCXklhAjmNCfxyp1PkYuUwYKODGYHe7IPdnPmAR1rO2VFcVV6fgzphpwLZsUvtBc+OTPcc4mOasObaKqYymWrXtuuyHJwyJKEBhAVwZ4CNWwa46QWDg=="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/roboarm-03a267_cover.jpg"
lang: "en"
likes: 12
passwordHash: "96537debf75d12df85ee352ed605ea73f78cc9ffd55c3dbf789fc366e993b1b2"
price: 699
seoDescription: "Build a RoboArm: Arduino 2 axis robotic arm with robotic claw gripper. Control via PC, potentiometers, or phone. DIY robotics project."
tags:
  - "robots"
title: "แขนกลเทพๆ 2 แกน ควบคุมได้ทั้งมือถือ!"
tools: []
videoLinks:
  - "https://giphy.com/embed/LPBnEKxQhTllLb2SCG"
  - "https://giphy.com/embed/Ifh20MUWlQ3vKOwQQW"
  - "https://giphy.com/embed/QXJDQa938XPZpSCQky"
  - "https://giphy.com/embed/YqnbilVWfEipjC0qXy"
  - "https://giphy.com/embed/RgavLUvMioLS5HhTSj"
views: 6496