最近常在 Facebook 上看到 meArm,想說手邊有 EV3,自己來試著組個機器手臂,不過,無論 31313 或 45544 都只有兩個大型馬達與一個中型馬達,因此就暫時設計了三個馬達的機器手臂。

如果你想要跟著組一台相同的,可以安裝 Lego Digital Designer,然後下載我的 RobotArm.lxf 檔案,或者直接觀看它產生的 組裝步驟網頁,依當中的設計來進行組裝。
EV3 主機控鈕
為了讓家中小朋友能操作玩耍,我使用了 EV3 主機上的按鈕來進行控制,主機上的控鈕有六個,不過,左上角的按鈕保留用來取消程式執行,因此可以用的按鈕是五個:

每個按鈕被按下時會有個數字作為識別,沒有按鈕被按下時數字是 0
,左、中、右分別是 1
、2
、3
,上、下分別是 4
、5
,實際上不太需要去記憶,因為積木元件上會有圖示表示,例如:

我將左右按鈕用來控制水平馬達的正反轉,而上下按鈕用來控制垂直馬達正反轉,因為只剩一個中間的按鈕,我設計為按一次可控制馬達正轉,再按一次可以反轉,也就是用來控制夾緊或放鬆兩隻大螯。
按鈕與馬達控制程式
程式本身並不困難,基本上就是分支判斷,先寫個水平馬達控制,測試 OK 後,再加上垂直馬達控制,然後加上兩隻大螯的馬達控制,然後,程式就長成這樣了:

不用去看程式細節了,我很不滿意,圖型化程式的致命傷,你的程式會一下子填滿整個畫面,一點也不容易閱讀,於是,我獨立地設計水平馬達、垂直馬達與兩隻大螯的馬達控制,使之成為三個自訂 Block:

當你的流程線分出兩個或多個支線時,表示這些支線會同時執行,這樣子第一層畫面就簡單多了,就是同時執行三個自訂的 Block。
水平馬達的自訂 Block 是:

很簡單,在每次迴圈中等待左右按鈕之一被按下,接著分支判斷是哪個按鈕,決定正轉或反轉,在按鈕狀態改變(像是放開按鈕)後停止馬達。垂直馬達也是類似:

接著是兩隻大螯的馬達控制,使用了變數來控制馬達的正或反轉:

精簡程式畫面
基本上,到這邊是也差不多可以結束了,只不過我還是不滿意,因為顯然地,每個自訂 Block 中,分支判斷不過就是只為了設定馬達的正負功率,因此,在圖形化程式中,很明顯地,分支中有一模一樣的方塊,只是值不同。
我在想,可不可以不用分支判斷呢?後來兩隻大螯的馬達控制,我重新改成了:

就方塊佔據的面積上,這個版本顯然減少許多,就目前來說,兩個版本相比,使用了分支判斷的版本比較直覺,不過,若在某些情況下,程式流程或方塊使得畫面混亂而難以閱讀時,使用這邊的版本,輔以註解說明,反而可以收到「一文解千圖」的效果。
類似地,水平馬達的自訂 Block,我也試著改成了:

這是另一種設計的方向,特別是在狀態多需要多個分支判斷時,改用類似這類的設計,對程式精簡就蠻有用的,垂直馬達的自訂 Block 我改成了:

下次,如果又看到滿滿畫面的方塊,或者是一大堆流程線、資料線繞來繞去令人昏頭,或許可以思考一下不同的設計方式!