กลับไปหน้ารวมไฟล์
mia-1-open-source-advanced-handmade-humanoid-robot-36429e.md

สวัสดีครับน้องๆทุกคน! วันนี้พี่จะมาสอนวิธีสร้างหุ่นยนต์ MIA-1 ที่ไม่เพียงแต่ล้ำและเท่ แต่ยังเป็น Open Source และสร้างได้โดยไม่ต้องใช้เครื่องพิมพ์ 3D อีกด้วย! ใช่แล้วครับ หุ่นยนต์ตัวนี้สร้างด้วยมือล้วนๆ ส่วน Open Source นี่แปลว่า - โค้ดและรายละเอียดทุกอย่างฟรีหมดเลย น้องๆก็สร้างได้ถ้าอยากนะ

ในวิดีโอเราเห็นแค่เธอพูด แต่จริงๆเธอทำได้อีกเพียบเลย!

สิ่งที่น้อง MIA-1 ทำได้:

  • ฟังและตอบสนองได้
  • มองเห็นและจดจำหน้าคนได้ด้วยกล้องในตาซ้าย
  • ตรวจจับการเคลื่อนไหวและถ่ายภาพได้
  • มี GUI พร้อมหน้าจอสัมผัส LCD สำหรับสั่งงาน
  • แสดงภาพบนหน้าจอ LCD ได้
  • ดาวน์โหลดและโชว์ภาพบนหน้าจอได้
  • เล็งเป้าหมายด้วยเลเซอร์พอยน์เตอร์ที่มือขวา
  • ขยับมือตามจังหวะพูด
  • ยืนด้วยสองขาได้เองโดยไม่ต้องให้ใครช่วย
  • ก้มคำนับได้ด้วย (ดูในวิดีโอเลย)
  • และอีกมากมาย!

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

พี่ใช้อุปกรณ์ที่หาซื้อได้ตามร้านทั่วไปหมดเลย

ไมโครคอนโทรลเลอร์ + คอมพิวเตอร์ (สมอง):

  • Arduino Mega (สำหรับควบคุมเซอร์โวมอเตอร์)
  • คอมพิวเตอร์เต็มตัว (จะใช้ Raspberry Pi ก็ได้ แต่พี่ใช้แล็ปท็อปเป็นสมองเธอตอนแรก)

เซอร์โวมอเตอร์: MIA-1 มีดีกรีอิสระ (Degrees of Freedom) 13 องศา

  • เซอร์โวมอเตอร์ 2 แกน LDX227 จำนวน 8 ตัว
  • เซอร์โวมอเตอร์ MG996r / MG996 จำนวน 3 ตัว
  • สำหรับนิ้วมือใช้ micro servo SG90

หมายเหตุ: พี่เพิ่มกรงเล็บหุ่นยนต์เข้าไป ซึ่งใช้เซอร์โวมอเตอร์ MG996r อีกหนึ่งตัว

และก็สายจัมเปอร์ อะไรพวกนี้นะ

ระบบการมองเห็น: สำหรับประมวลผลภาพ เช่น ถ่ายรูปและตรวจจับใบหน้า พี่ใช้ กล้อง USB

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

ขั้นตอนที่ 1: โครงสร้างร่างกายและการจัดวางมอเตอร์

Body and Motor Layout

Motor Layout 1 Motor Layout 2 Motor Layout 3

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

ขั้วต่อเซอร์โวมอเตอร์ทำจากแผ่น PVC บางๆ เพราะมันโค้งงอได้ดี

ส่วนหัวทำจากลูกโป่ง เป่าลมเข้าไป (ดูรูป) แล้วปะชิ้นกระดาษทิชชู่เปียกๆ ทับแล้วปล่อยให้แห้ง พอกทับไป 8 ชั้นก็แข็งแรงทนทานพอแล้ว

จากนั้นก็พ่นสีขาวทั้งตัวให้เรียบร้อย

ปรากฏว่าโครงสร้างออกมาสมดุลสุดๆ เธอ (MIA-1) ยืนได้มั่นคงบนสองขาเลย!

เพิ่มหน้าจอ: หลังจากนั้นก็ใช้สกรูและกาวร้อนยึดหน้าจอ LCD เข้ากับหน้าอกของเธอ (รูปสุดท้าย)

ขั้นตอนที่ 2: แผนผังวงจร

Circuit Diagram 1 Circuit Diagram 2

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

จะเห็นว่ามอเตอร์ทุกตัวและบอร์ด Arduino เองอยู่ด้านหลังตัวหุ่นหมด พี่ก็เดินสายไฟทั้งหมดจากด้านหลังเหมือนกัน ซื้อสาย USB ยาวๆ มาเลย จะได้ต่อกับคอมได้สะดวก

ลงลึกเรื่องเทคนิค: ระบบจ่ายไฟและการควบคุม

การสร้างหุ่นยนต์ที่เดินสองขาได้เนี่ย คือการประกาศสงครามกับฟิสิกส์โดยตรงเลย หุ่นยนต์ฮิวแมนนอยด์ MIA-1 ตัวนี้เป็นหนึ่งในโปรเจค Arduino ที่ต้องใช้ทั้งความรู้กลศาสตร์และคณิตศาสตร์ขั้นเทพ ต้องควบคุมเซอร์โวอย่างน้อย 12 ตัวพร้อมกัน ในขณะที่ต้องคำนวณจุดศูนย์ถ่วงตัวเองใหม่ตลอดเวลา

เจ้า I2C PCA9685 PWM Array Arduino Uno ตัวเดียวไม่สามารถสร้างสัญญาณ PWM ที่เสถียรและแยกกันได้ถึง 16 ช่องหรอก แม้แต่ Mega ก็ช่วยได้ไม่มาก

  1. PCA9685 16-Channel Servo Driver ตัวนี้แหละที่รับหน้าที่คำนวณสัญญาณ PWM หนักๆ ไปเลย Arduino แค่ส่งคำสั่งเล็กๆ ผ่าน I2C (ประมาณว่า "ขยับเซอร์โวหมายเลข 14 ไปที่ตำแหน่ง 300 สิ") แล้วชิป PCA9685 ก็จะจัดการสร้างพัลส์ PWM ที่หนักหน่วงให้เองแบบ asynchronous!
  2. ทำให้ CPU หลักของ Arduino ว่างพอจะไปคำนวณคณิตศาสตร์ "Inverse Kinematics" ที่ซับซ้อนสำหรับการเคลื่อนไหวที่ประสานกันได้

คลื่นไซน์สำหรับวัฏจักรการเดิน ขาหนึ่งขามีข้อเท้า เข่า และสะโพก คุณสั่งแค่เข่าให้ขยับเฉยๆ ไม่ได้ ข้อเท้าต้องหมุนสวนทิศเพื่อให้เท้าแตะพื้นอยู่!

  • การทำงานของท่าทางการเดิน: โปรแกรมเมอร์ต้องสร้างคลื่นไซน์และโคไซน์จากตรีโกณมิติเพื่อให้ได้การเคลื่อนไหวของมนุษย์ที่ลื่นไหล
    for(float phase = 0; phase < 2*PI; phase += 0.1) {
      int kneePos = 90 + (sin(phase) * 30); // ขยับระหว่าง 60 ถึง 120!
      int anklePos = 90 - (sin(phase) * 20); // หมุนสวนทิศเล็กน้อยเพื่อให้เท้าแตะพื้น!
      driver.setPWM(kneeIndex, 0, kneePos);
      driver.setPWM(ankleIndex, 0, anklePos);
      delay(10);
    }
    
  • การเพิ่ม MPU6050 Accelerometer ทำให้หุ่นรู้ตัวทันทีถ้ามันเริ่มเอียงไปทางซ้ายเกินไป คณิตศาสตร์จะบังคับให้เซอร์โวที่ข้อเท้าขวาเกร็งตัวทันทีเพื่อปรับสมดุลจุดศูนย์ถ่วงของโครงโลหะหนักๆ นี่ในเวลาจริง!

ส่วนประกอบของโครงสร้างหุ่นสองขา

  • Arduino Mega หรือ ESP32 (ต้องใช้ RAM เยอะมากสำหรับติดตามอาร์เรย์ที่ซับซ้อน)
  • PCA9685 16-Channel I2C PWM Driver Module
  • MG996R Heavy Metal Servo จำนวน 12 ถึง 16 ตัว (เซอร์โวพลาสติกจะแตกกระจายในพริบตาภายใต้น้ำหนักของหุ่นโลหะที่เดินได้)
  • Step-Down Buck Converter ตัวใหญ่ๆ (เช่น XL4015) เพื่อลดแรงดันจากแบตเตอรี่ LiPo 12V ขนาดใหญ่ ลงมาเป็น 6.0V / 20A พอดี ซึ่งเป็นกำลังไฟที่จำเป็นสำหรับจ่ายให้เซอร์โว 16 ตัวทำงานพร้อมกันโดยไม่ง้อไมโครคอนโทรลเลอร์!

ขั้นตอนที่ 3: เรื่องของโค้ด

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

/*default/standby position of servos*/<br>  komor.write(4);      #waist servo
  left1.write(120);
  rFinger.write(0);
  servo1.write(55);

  clawOpen();
  rightStandBy();
  leftStandBy();

  headTilt.write(134);
  headPan.write(90);

โค้ดควบคุมมอเตอร์นี่ยาวกว่า 750 บรรทัดเลยนะ ระวังเวลาจะแก้นิดนึง

ส่วนการประมวลผลหลักๆ ใช้ Python3 สคริปต์จัดการ

Python ใช้ไลบรารี่ pySerial ในการคุยกับ Arduino ผ่านพอร์ตอนุกรม อย่าลืมเช็ค 'COM PORT' ให้ดีล่ะ

#Connect with mia motor driver board over serial communication
try:
    mia = serial.Serial("COM28", 9600)
except:
  pass

น้องก็ต้อง pip install ไลบรารี่พวกนี้ด้วย

"""import necessary libraries"""<br>#import requests             #for making post/get requests
import pyttsx3               #offline text to speech
import speech_recognition as sr   #Speech to text (requires internet to function)
import time
from random import randint   #random integer picking library
import tkinter               #tkinter gui library
from tkinter import Tk, Button, Label, Tk  #import necessary things
import serial                #serial library for serial communication over USB
from PIL import Image        #fro showing image
import cv2                   #Computer Vision library
import wikipedia             #to get data direcly from wikipedia

ทุกอย่างลงง่ายๆ ด้วย pip install นะ สำหรับ opencv พิมพ์ใน command prompt ว่า:

pip install opencv-contrib-python

GUI (Graphical User Interface) สวยๆ ที่เห็นนี่พัฒนาด้วย tkinter สำหรับไลบรารี่นี้และตัวอื่นๆ ก็ลงด้วยคำสั่งนี้เลย:

pip install library_name

แล้วมันก็จะติดตั้งให้เสร็จสรรพ

อีกอย่างนึง ถ้าน้องใช้เว็บแคม ส่วนใหญ่จะกำหนดค่าเป็นเลข 1 นะ

cap = cv2.VideoCapture(1)   #camera

ส่วนถ้าอยากรู้ลึกขึ้นว่าหุ่นยนต์ตอบกลับยังไง พี่แนะนำให้ไปหาอ่านเพิ่มเติมได้

โค้ดของ MIA-1 นี่ก็คือเวอร์ชันขยายของหลักการนั้นแหละ

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

mia.write(b'p')  #command to head up then down<br>count_down(3)
respond("Smile please", 100)

จัดไปวัยรุ่น! สู้งานนะน้อง ห้ามช็อตนะตัวนี้

ขั้นตอนที่ 4: จ่ายไฟและปิดงาน

พี่จ่ายไฟให้หุ่นด้วยแบตเตอรี่ลิเธียม 7.4V ตัวนี้แหละ พวกเซอร์โว LDX227 มันกินไฟจัดมาก (แต่คุณภาพดีนะ) ต้องมั่นใจว่ามันได้ไฟอย่างน้อย 7.3V ตลอดเวลานะ ส่วนเซอร์โว MG996r นี่ราคาถูกแต่บอบบางมาก ระวังอย่าให้ไฟเกิน 7.8V เด็ดขาด! ดังนั้นแรงดันไฟที่เหมาะกับหุ่นตัวนี้ที่สุดก็ควรอยู่ระหว่าง 7.4V ถึง 7.8V นั่นเอง

จัดไปวัยรุ่น! สู้งานนะน้อง ถ้าชอบหุ่นตัวนี้ อย่าลืมกดติดตามช่องเพื่อตามดูโปรเจคเจ๋งๆ ต่อไป

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

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

apps:
  - "1x Arduino IDE"
author: "ashraf_minhaj"
category: "Motors & Robotics"
components:
  - "1x UTSOURCE Electronic Parts"
  - "8x LDX227 servo motor"
  - "1x Arduino Mega 2560"
description: "หุ่นยนต์ขั้นสูงแบบโอเพ่นซอร์ส ใช้ Arduino และ Python ควบคุม งานง่ายแต่หล่อ วัยรุ่นสายช่างต้องจัดไป!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://github.com/ashraf-minhaj/MIA-1-Open-Source-Humanoid-Robot"
  - "https://github.com/ashraf-minhaj/MIA-1-Open-Source-Humanoid-Robot"
encryptedPayload: "U2FsdGVkX1/aHGa0qZ8J1FybgiA4szRMv4Twetkf9prJ5Ou/lKlCHNc+KZuVItoJdL3manf3te/dN46N6fzsaEJQBFxF6FJ3GaERfXBNAR4="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/mia-1-open-source-advanced-handmade-humanoid-robot-36429e_cover.png"
lang: "en"
likes: 16
passwordHash: "6a32766f15832eb81fc7d4e1b32c7b2c7a9d97ed36749d07ae1cf50077ef0fdf"
price: 2450
seoDescription: "Build MIA-1, an advanced Open Source Humanoid Robot powered by Arduino and Python. A DIY Handmade project for robotics enthusiasts."
tags:
  - "humanoid robot"
  - "open source"
  - "robots"
title: "MIA-1 หุ่นยนต์ฮิวแมนนอยด์สุดเท่ เปิดซอร์ส! มาประดิษฐ์กันแบบมืออาชีพ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/yz_pLOqqwdM"
  - "https://www.youtube.com/embed/yz_pLOqqwdM"
views: 23373