Python可以這樣玩(24):MeArm Arduino 程式碼

廠商所附程式碼也有些小問題,必須稍加修改才能跑,有兩點要注意,第一是角度極限,按照我的程式碼中的建議輸入即可,第二是操作的合理性,原本程式的左搖桿左右搖動的時候手臂是上下動、而上下搖動的時候手臂卻是左右動,因此我在程式中把定義對調了,這樣操作起來會更直接。

不但如此,我使用 上下 左右 前後 開合重新定義了變數名稱,這樣可以增加程式的可讀性,建議直接複製我的程式碼來執行,裡面有清楚的註解,我就不逐一解釋,如果有不明白的地方,可以留言討論。

只說明幾個部分:

要控制 Servo 旋轉角度,只要呼叫 Servo write() 並傳入指定的角度就可以了,例如 myservo.write(180) 是控制 Servo 轉到 180 度,myservo.write(120) 是控制 Servo 轉到 120 度。

關於 map() 函數,0 1023 的數值必須經過數值轉換,依比例轉為 0 180 的數值,因為我們的伺服馬達只能在 0 180 度之間旋轉。範例程式利用 map() 函式將 0 1023 的值對應到 0 -179

#include <Servo.h>
// AndrewPythonArduino
// http://andrewpythonarduino.blogspot.tw/
Servo  myservo1; //底部伺服馬達
Servo  myservo2; //左側伺服馬達(四邊形側板為左側)
Servo  myservo3; //右側伺服馬達(五邊形側板為右側)
Servo  myservo4; //爪子的伺服馬達

const int VERT1 = A1;   // 搖桿1垂直(左邊)
const int HORIZ1 = A2;  // 搖桿1水平
const int VERT2 = A3;   // 搖桿2垂直(右邊)
const int HORIZ2 = A4;  // 搖桿2水平

int servoVal1 = 90;
int servoVal2 = 90;
int servoVal3 = 30;     // 退到後面
int servoVal4 = 0;      // 爪子全開

void setup()
{
  myservo1.attach(9);         // 連結pin9到底部伺服馬達
  myservo1.write(servoVal1);  // 一開始先置中90
  myservo2.attach(10);        // 連結pin10到左側伺服馬達
  myservo2.write(servoVal2);  // 一開始先置中90
  myservo3.attach(11);        // 連結pin11到右側伺服馬達
  myservo3.write(servoVal3);  // 一開始退到後面,30
  myservo4.attach(6);         // 連結pin6到爪子的伺服馬達
  myservo4.write(servoVal4);  // 一開始鉗爪全開,0
  delay(3000);

  Serial.begin(9600);
}

void loop()
{
  int L_R, U_D, F_B, O_C; //左右、上下、前後、開合
 
  // 從搖桿讀取數值
  U_D = analogRead(VERT1);        // will be 0-1023 控制上下
  L_R = analogRead(HORIZ1);       // will be 0-1023 左右轉
  F_B = analogRead(VERT2);        // will be 0-1023 控制前後
  O_C = analogRead(HORIZ2);       // will be 0-1023 控制開合
          
  servoVal1 = map(L_R, 0, 1023, 0, 180); //=0, =1023
  myservo1.write(servoVal1);

  servoVal2 = map(U_D, 0, 1023, 50, 130); //=0, =1023
  myservo2.write(servoVal2);

  servoVal3 = map(F_B, 0, 1023, 30, 150); //=0, =1023
  myservo3.write(servoVal3);

  servoVal4 = map(O_C, 0, 1023, 0, 90);   //=0, =1023
  myservo4.write(servoVal4);
  
  Serial.print("L_R: ");
  Serial.print(L_R);
  Serial.print(" U_D: ");
  Serial.print(U_D);
  Serial.print(" F_B: ");
  Serial.print(F_B);
  Serial.print(" O_C: ");
  Serial.println(O_C);
}

下圖是我所安裝的成品,把程式上傳到 Arduino 之後,USB就可以拔掉,然後建議可以裝上電池模組,這樣就可以脫離電腦獨立操作機器手臂了。我還買了 Arduino Shield v5.0 以及 JoyStick x2




上圖是完成圖,搭配上電池模組,就可以脫離電腦USB線獨立用搖桿完機器手臂了。稍微練習一下,保證可以夾到娃娃。

有一件小撇步可以用,就是在手臂底座的後面放一個電池,這樣就會有重量,當手臂往前伸的時候,底座就不會往前倒了。

玩到這裡,建議您稍微練習一下搖桿的操作,一開始可能不太靈光,但是經過練習之後,就可以夾到東西了。


留言

這個網誌中的熱門文章

Python可以這樣玩(16):共陰/共陽七段顯示器

Python可以這樣玩(15):蜂鳴器與音樂

Python可以這樣玩(13):外部LED控制