EV3 Tutorial(12)土炮的繪圖機械手臂(上)


以前沒有學過機械,組裝 EV3 積木時,遇到需要機械作動的部份,進度就非常地慢,多半是一邊做、一邊瞭解動作、一邊修正,這次的繪圖機械手臂,就是這樣做了很久 … XD

之所以稱為土炮的繪圖機械手臂,是因為在做的過程中,有些朋友說很懷念,他們以前在學校時也寫過機械手臂的程式,我不知道學校會怎麼搞這東西,一切都是自己想出來的,應該是許多地方很陽春,那就叫它土炮繪圖機械手臂吧!

土炮的繪圖機械手臂

積木組裝

你可以在下載 DrawBot.lxf,或者是在 線上觀看組裝步驟

關於這次的積木組裝,有幾個要注意的地方,由於積木為了讓使用者組裝方便,它會有一定的鬆緊度與彈性,而這樣的鬆緊度與彈性,對於需要精細控制的作動不利,因此,有些上頭的積木看似無用,實際上是為了減少鬆緊度與彈性,比方說 …

土炮的繪圖機械手臂

兩個箭頭處指向的積木,一方面是為了加強手臂的固定,一方面是了增加轉動時的力矩,如果拆了這兩根,那麼手臂的搖晃度會變大,而且會變成只靠大齒輪軸心在帶動手臂,繪圖時的誤差會變得更大 …

其實一開始想做這個手臂,已經有精細度控制有極限的心理準備了,我基本上是想驗證自己的想法對不對,並看看能做到多細的控制,理論上,可以在一些地方做更多固定手臂的組裝,減少鬆緊度與彈性。

手臂前端可以用一般的原子筆心剪短塞進去,靠齒輪的作用,讓筆昇降 …

土炮的繪圖機械手臂

接下來要看看怎麼寫程式了,這大致可以分為兩個部份,馬達的基礎作動,以及下筆處的座標定位 …

馬達的基礎作動積木

既然剛剛看到了筆昇降的組裝照片,那麼就來看看如何讓筆上昇碰觸頂點,或下降碰觸底部時自動停止,嗯?組裝圖中你沒有看到觸碰感應器啊!?這是怎麼做到的?

之前的文件中看過,EV3 馬達內建馬達感應器,除了量測馬達轉動角度與圈數之外,還可以量得馬達目前的功率,對於一個轉動中的馬達,如果你試著阻止它轉動,那麼會造成它的功率下降,因此,就可以寫出以下的 PenMotor 程式:

土炮的繪圖機械手臂

圖中可以看到等待方塊,當筆上昇碰觸頂點,或下降碰觸底部時,就會有受阻的情況,而使得功率減少,等待方塊的條件成功就會停止等待,而後停止馬達,這樣就好像裝了一個隱形的觸碰感應器呢!以下是實際作動的影片示範:

影片示範

運用同樣的道理,我們可以控制 A、B 兩個馬達,讓它們各逆時針轉動至無法轉動後停止,我將這個動作稱為 Park,這是為了接下來進一步定位做準備,可以看到,停靠開始時,先將筆上昇:

土炮的繪圖機械手臂

因為繪圖時,手臂移動至指定的座標點,需要兩個馬達的配合,而我希望,兩個馬達轉動必須同時開始與結束,這樣可以讓繪出來圖比較平順一些(像是個圓弧),之後會看到,如果要繪直線,那麼會一小段一小段距離畫,只要距離夠小,看起來就會像直線,因此,對於 A、B 馬達,我設計根據兩個指定馬達轉動的角度,來分配獲得的功率,這就是 MotorAMotorB 方塊的作用:

土炮的繪圖機械手臂

記得,依目前積木組裝方式,從上往上看繪圖機時,MotorB 中的馬達指定角度為負時,手臂才會是順時針轉動:

土炮的繪圖機械手臂

每次要轉動手臂時,必須同時指定角度,這使用 MoterAB 方塊來完成:

土炮的繪圖機械手臂

注意!以上都還是指定馬達轉動角度,而不是指定兩個手臂內角要轉動幾度,兩個內角的量測是指以下:

土炮的繪圖機械手臂

留意實際上手臂轉動是以大齒輪軸心為原點,而不是小齒輪,馬達帶動小齒輪,而小齒輪帶動大齒輪,大齒輪有 40 齒,小齒輪有 8 齒,也就是小齒輪轉 5 度,大齒輪轉 1 度,因此,當指定手臂內角時,必須據此轉換為馬達轉動角度,而這使用 ArmAB 實現:

土炮的繪圖機械手臂

這麼一來,之後就可以透過 ArmAB 直接指定兩手臂內角,而不用管馬達了,這才方便接下來我們專心算數學,根據座標求角度 … 這就等下一篇再來說明了 … XD