นี่คือหุ่นยนต์แขนกลตัวแรกของพี่นะน้อง มีฟีเจอร์เด็ดๆ ดังนี้:
- หุ่นยนต์ 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
- ใน Arduino IoT Cloud Dashboard น้องจะสร้างวิดเจ็ตสไลด์ยักษ์ 4 ตัว (
Base, Shoulder, Elbow, Gripper) ตั้งค่าตั้งแต่0ถึง180 - ไฟล์
thingProperties.hจะทำการลิงก์สไลด์จากเว็บตรงๆ เข้าไปเป็นตัวแปรในโค้ด C++ ของน้องอัตโนมัติ! - The Event Triggers: ฟังก์ชัน
loop()จะว่างเปล่าเลย! แทนที่จะวนลูปอ่านค่า โค้ดใช้การทำงานแบบonChangeinterrupts!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 ทันทีที่แขนพยายามยกของ!)