賈維斯的智慧工坊

  • Home
  • About
  • Note
  • Project
  • Experience
  • Service
  • Sitemap


MY | EXPERIENCES

  1. 首頁
  2. >
  3. 經歷

meARM 機械手臂創客工作坊

Nov, 2015


(宣傳照片版權屬桃園市政府青年事務局)
本來就一直對機械手臂很有興趣,湊巧在活動通上看到
這是個舉辦在中央大學的一日活動,藉由DIY套件,讓我們自己組裝機械手臂
其實只要弄懂四個伺服馬達設計出來的運動軌跡,原理就並不難懂



套件是由木板構成


左馬達的運動軌跡如黃線


右馬達的運動軌跡如黃線
另外前馬達負責夾起物品,下馬達是旋轉基底

有興趣的人可以上官網或淘寶購買

所有都是開源的資料,如有大量需求可以自行洗電路、切割板子
以下附上我的程式碼

#include <Servo.h>

int value = 0 ;
int angle[4];

Servo servo_pin_11;
Servo servo_pin_10;
Servo servo_pin_9;
Servo servo_pin_5;

int pos;

void setup() {
// put your setup code here, to run once:

     servo_pin_11.attach(11);
     servo_pin_10.attach(10);
     servo_pin_9.attach(9);
     servo_pin_5.attach(5);
     angle[0] = 90; //底座
     angle[1] = 90; //左邊馬達
     angle[2] = 90; //右邊馬達
     angle[3] = 90; //前面馬達
     Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:

      for (int i= 0; i < 4 ; i++ )
      {
           value = analogRead(i);
           //  底座
           if (i == 0)
           {
                 if(value < 300)
                 {
                  if (angle[0] > 0){
                  angle[0] = angle[0] - 1;}
                 }else if(value>700)                  {
                  if (angle[0] < 180){
                  angle[0] = angle[0] + 1;}
                 }
                 servo_pin_11.write(angle[0]);
           }
           //   左馬達
           if (i == 1)
           {
                 if(value < 300)
                 {
                  if (angle[1] > 0){
                  angle[1] = angle[1] - 1;}
                 }else if(value > 700)
                 {
                  if (angle[1] < 180){
                  angle[1] = angle[1] + 1;}
                 }
                 servo_pin_10.write(angle[1]);
           }
           // 右馬達
           if (i == 2)
           {
                      if(value < 300)
                      {
                       if (angle[2] > 0){
                       angle[2] = angle[2] - 1;}
                      }else if(value > 700)
                      {
                       if (angle[2] < 180){
                       angle[2] = angle[2] + 1;}
                      }
                      servo_pin_9.write(angle[2]);
           }
           //  前面
           if (i == 3)
           {
                 if(value < 300)
                 {
                  if (angle[3] > 0){
                  angle[3] = angle[3] - 1;}
                 }else if(value > 700)
                 {
                  if (angle[2] < 180){
                  angle[3] = angle[3] + 1;}
                 }
                 servo_pin_5.write(angle[3]);
            }
            Serial.print(value);
            Serial.print(" ");

            //value = 0;
      }
     Serial.println(" ");
     delay(15);
}

有興趣的人可以去活動通隨時關注關於Arduino相關的活動


← Back to experience