Python可以這樣玩(23):MeArm 機器手臂


最近夾娃娃機流行,為了把家裡的小朋友導入正途,因此四處尋找夾娃娃機的 Arduino 模組,可惜沒找到,不過倒是找到了替代方案,MeArm,如下圖:




meArm 是時下最夯的桌上型機器手臂,藉由DIY套件,它不只能帶你走入 maker 世界,更能透過實做培養電路設計與程式設計能力,從學生到社會人士都適合玩。meArm 目的是要喚酷大家潛藏已久的自造魂,希望藉時下最夯的機器手臂來引發興趣,同時透過深入淺出的教程帶領大家進入程式設計殿堂。

除了機械手臂特質外,meArm 更代表開源精神,因為它搭載開放的 Arduino 主板,我們特別設計的搖桿擴展板也會開源出來。不僅如此,它的軟體也是開源的,包括C語言和圖形語言開發環境,您所在上面修改的任何一條程式碼,都可以放到社群供大家分享,藉以融入廣大的國際 Arduino MeArm 社群,透過 meArm,您不僅能鍛鍊程設功力,並能融入國際社群,為未來開創無限可能。

首先,開源的MeArm 的原始狀態,其實就是一張開源的設計圖,如下圖:




有了這張藍圖,您可以用木板,紙板,鋼板,壓克力板來自行製作,網路上真的可以看到有人用紙板和美工刀來自行製作機器手臂,不過我覺得不用那麼麻煩,網路上只要花530元就可以買到。我買的零件如下圖:




我的 MeArm 是在露天拍賣買的,原本想在台北光華商場買,但是找不到,如果有其他網友知道哪家有賣,也可以留言分享。最後組裝好如下面的影片(娃娃太大夾不起來)




伺服馬達

上圖中可以看到,機器手臂的主要動力來自於四顆伺服馬達(SG90),一般電子材料店都可以買到,下面先整理一下馬達的種類:

同步馬達:特點是恆速不變與不需要調速,起動轉矩小,且當馬達達到運轉速度時,轉速穩定,效率高。

感應馬達:特點是構造簡單耐用,且可使用電阻或電容調整轉速與正反轉,典型應用是風扇、壓縮機、冷氣機。

可逆馬達:基本上與感應馬達構造與特性相同,特點馬達尾部內藏簡易的剎車機構(摩擦剎車),其目的為了藉由加入摩擦負載,以達到瞬間可逆的特性,並可減少感應馬達因作用力產生的過轉量。

步進馬達:特點是脈衝馬達的一種,以一定角度逐步轉動的馬達,因採用開迴路(Open Loop)控制方式處理,因此不需要位置檢出和速度檢出的回授裝置,就能達成精確的位置和速度控制,且穩定性佳。

伺服馬達:特點是具有轉速控制精確穩定、加速和減速反應快、動作迅速(快速反轉、迅速加速)、小型質輕、輸出功率大(即功率密度高)、效率高等特點,廣泛應用於位置和速度控制上,如機器手臂。

線性馬達:具有長行程的驅動並能表現高精密定位能力。

有了馬達的基本概念之後,我們就來深入討論伺服馬達。試著 Google 一下就可以找到相關資料。

伺服馬達(Servomotor)是對用於使用伺服機構的馬達(電動機)總稱。伺服(Servo)一詞來自拉丁文"Servus",本為奴隸(Slave)之意,此指依照命令動作的意義。所謂伺服系統,就是依照指示命令動作所構成的控制裝置,應用於馬達的伺服控制,將感測器裝在馬達與控制對象機器上,偵測結果會返回伺服放大器與指令值做比較。由此可知,因為伺服馬達是以回饋訊號控制,與藉由輸入脈波訊號控制的步進馬達有所區別。

伺服馬達的動作特性是進行位置定位控制和動作速度控制,其主要特點是 轉速可以精確控制,速度控制範圍廣,可以安定平順等速運轉之外,還可以根據需求隨時變更速度。在極低速度也可以穩定轉動。能迅速做出正轉與逆轉,也能迅速加減速。在由靜態改為動態運作或由動態改為靜態運作所需費時極短,而且即便有外力附加仍可以保持位置。並在額定容量範圍內瞬間產生大轉矩,輸出功率大且效率也高。

伺服馬達分為交流(AC)和直流(DC)兩種,直流伺服馬達機體較細長,因此轉子慣性較小[3],而且具有線性反應佳與簡單易於控制特性,因為直流伺服馬達因為操作容易,也就是旋轉方向由電流決定,並且旋轉速度由改變施加的電壓來控制,控制簡單所以廣泛使用因此現在直流伺服馬達是使用最多的馬達。

校正伺服馬達

伺服馬達是有角度的,從 0度到 180度,所以我們是用角度來控制,如果希望機器手臂向右轉90度,就下轉 90度的指令給它即可。當您拿到 MeArm 之後,請按照說明書的步驟組裝,通常第一步就是要校正伺服馬達,為何要校正呢?我們以底座的伺服馬達為例,必須先校正到 90度之後才能安裝,這樣才能讓底座能夠向左轉到0度,向右轉到 180 度,也就是個轉 90度,如果沒有校正,假設伺服馬達的內定值是0度,那麼很可能你裝好手臂之後,只能向右轉 180度了。

我按照說明書,使用 Python 將底座(控制左右)、左側(控制上下)、右側(控制前後)、與鉗爪(控制開闔)分別校正。其校正角度分別是 90909025度。前面三個設定成90度我沒有意見,但是我實際測試的結果,如果設定25度,鉗爪開到最大的角度就是 50度,感覺上還可以再張開一點,建議設定成 45度。我自己已經改成45度了,這樣鉗爪就可以完全打開。




組裝

校正好四顆伺服馬達之後,就可以開始組裝了,組裝的過程中,伺服馬達的角度在扣上白色小槓桿之前,絕對不可以轉動,否則角度就跑掉了,必須重新校正。一旦按照說明書的角度扣上槓桿之後,就可以隨安裝需要轉動了。

我買的這組MeArm 的說明書中,有兩個錯誤的地方,您可以相信說明書,也可以接納我的安裝經驗加以修正。

第一個錯誤是在倒數第二個步驟,也就是安裝鉗爪的步驟有錯誤,這裡少裝了一個小圓圈,請看下圖:




在右上角那個螺絲的地方,兩個板中間會出現一個空隙,請自行把小圓圈夾在中間鎖上,不然,安裝完成之後,會發現多出一個小圓圈來。

我們都有去機車行修機車的經驗,最擔心的事情,就是當師傅把拆下的車零件案裝回去之後,發現多一顆螺絲,真的很尷尬,我真的遇過這種情況,最後那個師傅把那顆多出來的螺絲踢掉了,我有看到,但也不能說啥?

第二個錯誤則是最後一個步驟,請看下圖:




這個步驟說了需要三個 8mm的螺絲,這三個螺絲裝在下面三個地方,就是鎖住鉗爪馬達座的三顆螺絲,請看下圖:





圖中的螺絲有七顆,我所說的這三顆螺絲,是上面朝左右側的那三顆。不是下面面朝上的四顆。

左上角那顆面朝左的那顆鎖上8mm的螺絲沒有問題,但是接下來側面的那兩顆,由於 8mm螺絲是用來鎖三層厚度的板子的螺絲,側面那兩顆所要鎖的厚度則超過三層,實際鎖的時候會發現根本躲不到內層板子,兩個螺絲就這麼掛在上面還會晃動,雖然因為上面那一顆螺絲有鎖緊,馬達並不會掉下來,但是運作的時候那兩顆螺絲會晃來晃去。

剛好,整組組合完畢之後,有多出三顆螺絲,應該是用來鎖底座跟開發板用的,其中剛好多出兩個 10mm的螺絲,建議,把這兩顆螺絲鎖在這個位置。這樣一來,整個螺絲就可以鎖緊,不會再晃動。

完成了這一步,恭喜你,整個機器手臂就安裝完畢了。



插裝線路

接下來,我們就可以接受下一個挑戰,線路部分,就按照下圖安裝:





至於哪一個 Digital Pin 接在哪個馬達上,請參考下面的程式碼:

  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

哪個是左側馬達哪個是右側?有一個原則,方形的馬達座裝的馬達是左側馬達,而五邊形的馬達座則是右側馬達,另一個方式,請從手臂的後面往前看,左右邊就不會有錯。



留言

這個網誌中的熱門文章

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

Python可以這樣玩(11):數學繪圖

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