กลับไปหน้ารวมไฟล์
arduino-iot-robotic-arm-53dfd4.md

นี่คือหุ่นยนต์แขนกลตัวแรกของพี่นะน้อง มีฟีเจอร์เด็ดๆ ดังนี้:

  • หุ่นยนต์ 5DOF (จริงๆ ก็ 4 ถ้าไม่นับกริปเปอร์)
  • สมองคือบอร์ด [Arduino Yun] ที่มีฟีเจอร์ IoT ฝังมา
  • ควบคุมผ่านแอป [Blynk app] ที่ทำ UI ไว้สวยงาม
  • คำนวณ Forward Kinematics ด้วย [Matlab] ใช้ [Robotics Toolbox] ช่วย
  • มีไลบรารี่ใหม่ที่พี่เขียนเองสำหรับสร้างการเคลื่อนไหวที่ลื่นไหล

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

อุปกรณ์และวัสดุที่ต้องใช้

เตรียมของพวกนี้ให้พร้อมก่อนเริ่มงานนะ:

  • Arduino Yun (หรือบอร์ด Arduino อะไรก็ได้) 1 ตัว
  • มอเตอร์เซอร์โว 5 ตัว
  • ชาร์จเจอร์ 5V กระแสขั้นต่ำ 2.5 A 1 ตัว
  • หลอด LED 2 ดวง
  • ตัวต้านทาน (Resistor) 100 โอห์ม (สำหรับ LED สีแดง) และ 150 โอห์ม (สำหรับ LED สีน้ำเงิน) อย่างละตัว
  • ไม้คนกาแฟ (หรือไม้ไอติม) 2 อัน
  • ลวดโลหะ (หรืออะไรที่คล้ายกัน) 1 เส้น
  • แผ่นพลาสติกบาง (พี่เอามาจากขวดสบู่เหลว) 1 แผ่น
  • ยางยืด 1 เส้น
  • ฟองน้ำชิ้นเล็ก 2 ชิ้น (ดูมุมซ้ายบนในรูป)
  • สกรูพลาสติก M3 9 ตัว
  • สกรูพลาสติก M2.5 6 ตัว
  • แผ่นไม้หนา 3mm (ขนาดประมาณ 30cm x 50cm ก็เหลือเฟือแล้ว) 1 แผ่น
  • กาวติดไม้ 1 ขวด
  • เวลาและความอดทนสำหรับเขียนโค้ด (อันนี้สำคัญ!)

ลงมือสร้างหุ่นยนต์กันเถอะ

เริ่มต้นด้วยการวัดขนาดและเช็คแรงบิด (Torque) ของเซอร์โวที่เรามี มันจะบอกเราได้ว่าแขนของหุ่นควรใหญ่แค่ไหน และสุดท้ายก็ขนาดตัวหุ่นนั่นเอง

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

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

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

ต่อไป สร้างฐานและแผ่นสำหรับยึดเซอร์โวฐานกับบอร์ด Arduino Yun (หรือบอร์ดอื่น) จากนั้นก็ประกอบทุกอย่างเข้าด้วยกัน น้องก็จะได้หุ่นออกมาเหมือนในรูปที่ 2 แล้วล่ะ สู้งานนะน้อง!

ถ้าอยากให้หุ่นยนต์ดูเท่ๆ งานเข้า ต้องขัดชิ้นไม้ให้เนียนก่อน แล้วลงสีตามสไตล์ตัวเอง (ตามในรูปที่ 3) สำหรับหุ่นผม เลือกสีเงิน (ให้ดูเหมือนโลหะ) พร้อมแถบแดงสวยๆ ผลงานสุดท้ายดูได้ในรูปที่ 4

ซอฟต์แวร์

สำหรับฝั่งซอฟต์แวร์ เริ่มต้นด้วยการทำอินเทอร์เฟซบน Blynk ก่อน ถ้ายังไม่เคยใช้ Blynk มาก่อน ลองศึกษาวิธีการใช้งานเบื้องต้นได้ ง่ายมากๆ

หมายเหตุ: ถ้าไม่มีบอร์ดที่ต่ออินเทอร์เน็ตได้ ไม่ต้องกังวลไป น้องยังใช้ Blynk กับบอร์ดธรรมดาอย่าง Arduino Uno ผ่านพอร์ต USB ได้อยู่ วิธีการก็ลองศึกษาจากคู่มือการตั้งค่าบอร์ด Arduino ผ่าน USB โดยไม่ต้องใช้ Shield

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

  • ตั้งค่า (Configure) บอร์ด Arduino Yun
  • ติดตั้งไลบรารี Blynk ใน Arduino IDE โดยไปที่ Sketch > Include Library > Manage Libraries แล้วค้นหา Blynk เพื่อติดตั้ง
  • เพิ่มไลบรารี SimpleTimer โดยสร้างโฟลเดอร์ชื่อ SimpleTimer ในโฟลเดอร์ไลบรารี Arduino (ปกติคือ Arduino\libraries)
  • เพิ่มไลบรารี MotionGenerator ที่พี่เขียนขึ้น โดยสร้างโฟลเดอร์ชื่อ MotionGenerator ในโฟลเดอร์ไลบรารี Arduino เช่นกัน
  • คอมไพล์และอัปโหลดไฟล์ RobotArm_instructables.ino (อย่าลืมอัปเดต Blynk token ของตัวเองนะตัวนี้!)

หมายเหตุ: ไลบรารี MotionGenerator นี้เป็นโซลูชันแบบ analytical ที่จะทำให้การเคลื่อนที่จากจุดหนึ่งไปอีกจุดหนึ่งนุ่มนวลสวยงาม มันช่วยจำกัดความเร็วสูงสุดและความเร่งได้ด้วย

ตัวเลือกเสริม (forward kinematics ดูรูปที่ 3 ด้านบน): สำหรับส่วนนี้ต้องใช้ Matlab พร้อม Robotics Toolbox ถ้าติดตั้งครบแล้ว ตรวจสอบให้แน่ใจว่าหุ่นยนต์เชื่อมต่อกับ Blynk และต่อกับพอร์ต USB ของคอมพิวเตอร์ไว้ Matlab จะดึงข้อมูลจาก Arduino ผ่านการสื่อสารแบบอนุกรม (serial) ดังนั้น อย่าลืมกรอกหมายเลข COM port ให้ถูกต้องในไฟล์ MainScrip.m สุดท้ายก็รันไฟล์ MainScrip.m ได้เลย

หมายเหตุ: ค่าจลนศาสตร์ของหุ่นยนต์ (robot kinematics) นี้เป็นค่าสำหรับหุ่นของพี่เอง หุ่นของน้องอาจมีขนาดต่างออกไป (ปรับค่าในไฟล์ robotKinematicsFcn.m ตามสบายเลย)

Web-Connected Kinematics: IoT Robotic Arm

การทำแขนกลที่ควบคุมด้วยโพเทนชิโอมิเตอร์ในห้องมันก็เท่ดี แต่ Arduino IoT Robotic Arm นี่มันอัพเกรดไปสู่ระดับควบคุมข้ามโลกเลยนะ! แค่เปลี่ยนจากบอร์ด Uno ทั่วไปมาใช้ ESP8266 หรือ Arduino MKR WiFi น้องก็สามารถขยับของหนักๆ ในห้องได้จริงๆ แค่ลากสไลด์บนแอพมือถือ ในขณะที่นั่งอยู่คนละทวีปกันเลยทีเดียว!

Over-The-Air Variables (Arduino Cloud)

โค้ดของโปรเจคนี้ไม่ได้ใช้ analogRead(A0) มาควบคุมเซอร์โวนะ มันใช้ Cloud Property Variables

  1. ใน Arduino IoT Cloud Dashboard น้องจะสร้างวิดเจ็ตสไลด์ยักษ์ 4 ตัว (Base, Shoulder, Elbow, Gripper) ตั้งค่าตั้งแต่ 0 ถึง 180
  2. ไฟล์ thingProperties.h จะทำการลิงก์สไลด์จากเว็บตรงๆ เข้าไปเป็นตัวแปรในโค้ด C++ ของน้องอัตโนมัติ!
  3. The Event Triggers: ฟังก์ชัน loop() จะว่างเปล่าเลย! แทนที่จะวนลูปอ่านค่า โค้ดใช้การทำงานแบบ onChange interrupts!
    void onBaseAngleChange() {
      Serial.println("Web Update Received: Moving Base...");
      baseServo.write(baseAngle); // ขยับเกียร์ยักษ์ให้เห็นกันจะๆ!
    }
    

Robotic Hardware Integrity

  • NodeMCU ESP8266 หรือ Arduino MKR WiFi 1010
  • เซอร์โวเกียร์โลหะ MG996R 4 ตัว (ห้ามลองยกแขนกลด้วยเซอร์โวพลาสติก SG90 เป็นอันขาด! เซอร์โวฐานจะกัดเกียร์แตกและล้มคว่ำทันทีเพราะแรงบิด!)
  • โมดูล PWM 16 ช่อง PCA9685 (Optional แต่แนะนำสุดๆ ถ้าไม่อยากให้ไทเมอร์ใน ESP8266 สตัตเตอร์ดิจิทัลตอนที่ต้องรับมือกับอินเตอร์รัพท์ Wi-Fi JSON เยอะๆ!)
  • Adaptor 5V 5Amp ภายนอก (ห้ามจ่ายไฟให้เซอร์โวโลหะ 4 ตัวจากพอร์ต USB! มันจะทำให้ ESP8266 บราวน์เอาท์และตัดการเชื่อมต่อ Wi-Fi ทันทีที่แขนพยายามยกของ!)

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

apps:
  - "1x Blynk"
  - "1x MATLAB"
author: "aerdronix"
category: "Motors & Robotics"
components:
  - "1x Arduino Yun"
  - "5x Servos (Tower Pro MG996R)"
description: "แขนกล 5 DOF ตึงๆ ใช้ Arduino Yun เป็นตัวหลัก ควบคุมผ่านแอป Blynk ที่มือถือได้แบบจัดไป ส่วนการคำนวณท่าทางเทพๆ ใช้ Matlab ในการทำ Forward Kinematics งานง่ายแต่หล่อมาก!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/451086d8-2aa3-4d1b-8e60-dacc6b565775.zip"
  - "https://projects.arduinocontent.cc/451086d8-2aa3-4d1b-8e60-dacc6b565775.zip"
encryptedPayload: "U2FsdGVkX1+I0SPp1IAwvnPfPnd6mtD1CcMO0d2jmRL6S+mgE6ijGEyoiQVsixJ3ScotwBbvmbft9IZuVRqzrENqrUXAloxTCgDLbrS9jd4="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-iot-robotic-arm-53dfd4_cover.JPG"
lang: "en"
likes: 30
passwordHash: "7f9ab2fc2ffa0378df588d0022d1bacb21561eb80222f3964caadbd50a131e31"
price: 2450
seoDescription: "Arduino IoT Robotic Arm: 5 DOF arm using Arduino Yun, Blynk app, and Matlab for forward kinematics."
tags:
  - "robot arm"
  - "forward kinematics"
title: "หุ่นยนต์แขนกล IoT ควบคุมด้วย Arduino งานเทพๆ วัยรุ่นต้องลอง!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/B4DPD9VfmHA"
  - "https://www.youtube.com/embed/0F-LejtGc24"
  - "https://www.youtube.com/embed/0F-LejtGc24"
views: 40904