上回我們用了【linkit7697加上Robot Shield來改造遙控車】,取得既有的遙控車外殼,改造內部的控制核心,實作了一個IoT遙控車。而這次我們要來從頭打造MR-1輪型機器人,沒錯!就是從無到有做出MR-1輪型機器人來!話不多說,咱們開始囉!

開始前準備工具與材料

巧婦難為無米之炊,既然身為一個Maker,要執行project實作之前總要把所需要的工具準備起來。這回實作我們總共需要以下零組件與工具:

  • MR-1 3D列印車架
  • Linkit7697物聯網開發板
  • Robot Shield擴充板
  • HC-SR04超音波模組
  • TT減速馬達(兩個)
  • 橡膠輪胎(兩個)
  • 白色高亮度LED(兩顆)
  • 紅色高亮度LED(兩顆)
  • 母-母杜邦線(12條)
  • 熱熔膠槍:Maker神器,方便快速固定零組件
  • 電烙鐵:焊接減速馬達的引接線用

3D列印MR-1車架

MR-1的最大特色在於,他是一體式的車架,車體穩固性與剛性較高。許多Maker或是低年齡層的同學可能都有過一些慘痛經驗,就是辛苦組裝完成的車體,因為一時疏忽不小心從桌上掉落,造成車體的損傷。一體式的車架可降低當車架不小心摔落時造成的損害,也可以省去多個機構件組裝的困擾。同時富有可愛的外型,若要擴充電子零件與模組也是相當容易。

MR-1是一個開放原始碼的車架,由一位任職於澳洲的國小(註)教師Tim Clark老師所設計。此模型設計的授權方式為創用CC(Creative Common)-姓名標示授權,MR-1車架的3D物件檔(.stl)可從Thingiverse自由取得,進行列印、輸出甚至修改使用。

正在列印中的MR-1車架

這邊我們就直接取得檔案後,使用3D列印機做輸出。各個不同型號的3D列印機都會有不一樣的參數設定,這邊列印機使用的是台灣品牌INFINITY X1列印機,同時主要列印參數給各位做參考:

  • 層高(Layer Thickness):0.24
  • 外圈(loops):3圈
  • 填充(infill):7%
  • 支撐(support):開啟(Coarse)
  • 列印速度:35mm/s

使用以上參數列印輸出耗時約10小時,完成後將多餘的支撐部分拆除,就得到了我們的要使用的MR-1車架了!

MR-1車架

註:Tim Clark任教於澳大利亞維多利亞州官方設立的Mentone Grammar school,該校學生年齡為12歲以下,相當於台灣的公立國小。

 

組裝流程步驟

當所有材料都已備妥,就可以開始按照以下內容Step by Step進行組裝了。

所需材料一覽

STEP1: 焊接減速馬達引接線。

在Robot Shield擴充板隨盒有附上兩條2pin JST2.5mm母端的接線頭,這連接器跟Robot Shield上直流馬達控制輸出連接器是相匹配的。雖然直流馬達是沒有極性之分,只有正逆轉的差異,這裡還是建議照著以下圖示焊接(注意擺放位置),不然後面的程式部分的PIN腳定義就要跟著修改了,否則動作可是會出錯的!

減速馬達的焊接引線

STEP2: 安裝減速馬達

前面一步把減速馬達的驅動銅片引線出來了,接著就是要把兩顆減速馬達安裝到車架上。由於車架上沒有卡榫可以固定減速馬達,因此在安裝時預先使用熱熔膠沾黏在車架內部,減速馬達中間有凸起那側朝向車架內部,將減速馬達與車架黏牢。左右側馬達作法皆相同,黏著後等待一段時間使其固定。

將車架上塗上熱熔膠以固定減速馬達

STEP3: 安裝前後車燈

前車燈可以選用高亮度的白色或黃色LED,為放便接線時使用杜邦線引接,同時可以使用熱熔膠固定。左前LED的正端接到PIN2,負端接地。右前LED的正端接到PIN3,負端接地。由於LinkIt7697微控制器的GPIO本身推動的電流就不大,因此不需要串接電組也不容易讓LED燒毀。統整LED接線表格如下:

後車燈則選用與前車燈不同的LED顏色即可。一樣使用杜邦線連接並用熱溶膠加以固定。左後LED的正端接到PIN4,負端接地。右後LED的正端街到PIN5,負端接地。

固定前後車燈

STEP4: 安裝超音波測距模組與開發板

為了紮實固定超音波模組,車架的兩個圓形開孔,在設計上通常都會比較緊密一些,3D列印時又因為有開啟支撐,在拔除後可能圓形已經有些失真,如果因此在安裝上比較不便利,可以先行用銼刀修飾圓孔在做安裝。超音波模組共有4隻引腳,接線位置如下表所示:

LinkIt7697開發板與Robot Shield的位置於車架正上方,下方開孔剛好可以容納兩顆超級電容。

 

STEP5: 安裝輪胎與接線

接著安裝兩顆減速馬達,減速馬達中間有凸起那側朝向車架內部。由於車架上沒有卡榫可以固定減速馬達,因此在安裝時使用熱熔膠將減速馬達與車架黏牢。等待熱熔膠冷卻固定後再分別安裝左右側輪胎。線路連接部分,右輪接到Robot Shield的Motor A,左輪連接到Robot Shield的Motor B。

STEP6: 檢查各組件線路、完成!

最後一步就是檢查前面各個零組件線路是否確實有連接至擴充板上,以及把線路整理固定好,MR-1的硬體組裝即完成了!

組裝完成的MR-1

Linkit Remote Control

Linkit Remote(以下簡稱LRemote)是聯發科團隊在去(2017)年九月新增的一個功能,可以直接在Arduino的程式裡面就直接撰寫好行動裝置端的UI(User Interface,使用者介面)。只要到Google Play(Android)或是APP Store(iOS)直接下載linkit remote程式,完全不需要再寫手機或是平板的APP,就可以做到遙控的功能,可以說是非常的方便實用,省去相當多製作APP的麻煩!檢查一下Arduino IDE開發板管理員當中的LinkIt7697支援,只要是0.9.5以後的版本,就有支援LRemote的功能!(建議可直接更新到目前最新版本)

從Arduino IDE檢查開發板管理員LinkIt7697支援版本

目前LRemote所支援的物件有五個:

  • LRemoteLabel:文字標籤,10.9版本以後,可以使用updateText()方法來動態更新顯示文字。
  • LRemoteButton:按鈕,手離開後即自復歸的按鈕。
  • LRemoteCircleButton:圓形按鈕。同上,不過是將外形改為圓形。
  • LRemoteSlider:滑動桿,可以指定範圍的線性數列軸,用以選取一個數值。
  • LRemoteSwitch:ON/OFF開關,按下即轉態。

 

UI規劃

為了讓接下來UI規劃順利,我們先建立一個3x5的表格當作是手機上面APP要呈現的畫面。以左上角為原點(0,0),將所需要用到的按鈕、開關、文字與滑動桿物件等規畫上去要擺放的位置。每個物件都有位置(pos)與大小(size)屬性,依照這些屬性調整表格,就可以約略看出手機連線後的介面。

程式碼解析

本專案同樣也是Open Source,所有程式碼可由GitHub上取得。關於Robot Shield的馬達控制原理,可以參照前一篇【利用LinkIt 7697和Robot Shield來改造遙控車】文章,這邊就不再贅述了。

行號#4~#13:定義各零件接線的腳位,如果前面接線有改過,這邊也需要跟哲調整。

行號#17:這定義了BLE裝置的名稱,再多個機器人的環境下一定要修改,免得大家的名稱都相同,連到誰家的機器人都不知道了。

行號#20~#30:宣告LRemote UI上各類型物件

行號#38~#140:Linkit7697初始化程式段,前面幾行設定會用到各個IO腳為輸出模式。中間為LRemote各位物件的顯示名稱、位置、大小、顏色等設定,只要照著前面規劃好的表格內容去設定即可。最後記得呼叫LRemote.begin()來啟動這項功能。

行號#142~#195:實作了輪型機器人控制的相關函式,包含forward()、backward()、turn_right()、turn_left()與控制LED的front_light()、rear_light()等。

行號#197~#323:主程式段。其中#213的LRemote.process()會將手機端接收到的事件傳遞到各物件,必須定期呼叫。其餘主要都是處理各LRemote物件的各種事件處理。

透過手機連線到MR-1的控制介面

結語

使用Linkit7697加上Robot Shield所打造的MR-1輪型機器人,不僅是外型小巧可愛,組裝上也是相當便利省工。加上Linkit7697強大的物聯網,不論是讓其避障自動行走,或是使用行動裝置透過藍芽BLE的遙控,都可以輕鬆完成。除此之外,MR-1面向教育可以使用BlocklyDuino編程自走車動作,面相物聯網還可以連上雲端的MCS做進階的應用!最後附帶一提,一月27日MakerPRO和亞堤教育團隊合作開設【MR-1輪型機器人種子教師課程】,屆時將會有更完整的教學與工作坊,千萬別錯過了!