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);
}
上圖是完成圖,搭配上電池模組,就可以脫離電腦USB線獨立用搖桿完機器手臂了。稍微練習一下,保證可以夾到娃娃。
有一件小撇步可以用,就是在手臂底座的後面放一個電池,這樣就會有重量,當手臂往前伸的時候,底座就不會往前倒了。
玩到這裡,建議您稍微練習一下搖桿的操作,一開始可能不太靈光,但是經過練習之後,就可以夾到東西了。
留言
張貼留言