[步驟四] 軟體程式說明
程式說明:
(1) 使用 Arduino Libraris : Server Class (已經存在 Arduino 原生 Libaries)
(2) 利用 Intel Edison 提供的 PWM 腳位(3,5,6,9)來控制4個不同的伺服機(Servo),分別可控制機器手臂不同的功能單元:旋轉底座、上升臂、下降臂、及夾具。
完整程式如下:
/*
* 以 Intel Edision 控制簡易型4軸機器手臂
*
* Made by JimLi @ RealPlus Technology
*
*/
#include <Servo.h>
const int Servo_No = 4; // Robot Arm total servo no is 4 (機器手臂共4個Servo)
Servo myservo[Servo_No] ; // Declare servo (宣告Servo物件)
int servopin[Servo_No] = {3,5,6,9}; // Declare Intel Edison available servos (Intel Edison 只提供4個PWM)
//
// 初始化的程序
//
int tim = 100;
void setup()
{
for(int i=0; i<Servo_No; i++) {
myservo[i].attach(servopin[i]); // Attach Servos (連結Servo)
myservo[i].write(0); // Initial all servo angle to 0 (起始所有Servo位址為0)
delay(tim);
}
}
//
// 重覆執行的程序
//
void loop()
{
int pos;
//底座Servo
for (pos = 10; pos < 170; pos=pos+10 ) { // Shift position
myservo[0].write(pos);
delay(tim); // Delay for servo movement (延遲適當時間讓Servo穩定)
}
//右臂Servo
for (pos = 10; pos < 150; pos=pos+10 ) { // Shift position
myservo[1].write(pos);
delay(tim); // Delay for servo movement (延遲適當時間讓Servo穩定)
}
//夾子Servo
for (pos = 1; pos <= 14; pos++ ) { // Shift position
myservo[3].write(pos);
delay(tim); // Delay for servo movement (延遲適當時間讓Servo穩定)
}
//左臂Servo
for (pos = 10; pos < 150; pos=pos+10 ) { // Shift position
myservo[2].write(pos);
delay(tim); // Delay for servo movement (延遲適當時間讓Servo穩定)
}
//夾子Servo
for (pos = 12; pos >= 1; pos-- ) { // Shift position
myservo[3].write(pos);
delay(tim); // Delay for servo movement (延遲適當時間讓Servo穩定)
}
}
[步驟五] 執行結果
請上 Youtube 連結收看~
四、結語
雖然 Intel Edision 開發板功能很強,但也很複雜,因為它整合了雙頻 Wi-Fi (abgn),BT4.0等;創客們在上面有很大的發揮的空間,舉凡 BLE、iBeacon、VideoCam,不需另外的硬體擴充。對於沒有經驗的初學者,只要有耐心克服一些開發環境上碰到的問題,利用它所提供的 Arduino 環境,也能在很短的時間內,完成簡易的專案。
以下是個人在研究 Intel Edison 時,整理出來與軟體開發環境上,所碰到的一些問題解決之歷程:
1. 以筆者的經驗,原來預估可在短時間內完成本篇機器手臂的控制,但是,卻發生因為 Arduino 環境變更,造成程式無法載入到 Edison 的問題,並花費了不少時間來解決 :
● 如果發生 Arduino 軟體載入問題,務必將 Window 環境中
C:\Users\<name>\AppData\Roaming\Arduino15的目錄刪除,再重新安裝Arduino。 (參考Intel網站資料:https://communities.intel.com/thread/78666'、https://communities.intel.com/thread/78296)
2. 在 Arduino 延伸板上執行的程式,基本上是一個在 Linux 多工環境中的 Process (sketch/sketch.elf dev/pts/0),如下圖。如果要終止程式,必須在 Linux 環境中執行 Linux 的指令 #Kill pid,殺掉相對應的 Process。
3. Intel Edision Yocto 的 Linux,其目前最新版本是 ww25.5,但會有在 Adruino 板上的 Micro USB 拔除之後,已經載入的程式會停止執行之問題。解決方法是需將 Yocto Linux 的版本降低為 WW18.15 (參考 Intel 網站資料: https://communities.intel.com/thread/78242)。
4. 如果要在 Linux 環境欲使用 Python 語言撰寫 Servo 控制程式或其他裝置控制程式,可以使用 Library “mraa”。(參考 Intel 網站資料:https://communities.intel.com/thread/60294、https://github.com/intel-iot-devkit/mraa)。但要注意的是, Library mraa 中所定義的腳位與 Arduino 延伸板的腳位定義不同。 腳位定義可參考下表 (參考 Intel 網站資料:https://github.com/intel-iot-devkit/mraa/blob/master/docs/edison.md)。
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!