Arduino 自走車教學系列 – 單元(二)移動控制

一、前言

這是一個針對自走車主題,所撰寫的系列教學文章。主要是給支持我們 iCShop X CIRCUS Pi 的廣大朋友撰寫的基礎教學文。單元(一) 我們教大家如何組裝 Arduino 自走車,這個單元會開始控制車子移動,內容總共會分成兩個部份,分別是軟體安裝與程式撰寫。

軟體的部份我們採用 mBlock5,這是一個相當完整且免費的程式編輯器,最重要的是支援 Arduino UNO,並採用 Scratch3 一樣的圖形化架構。對於初學者或是看到英文與數字、符號組成的程式碼就過敏的朋友,這是一個入門的好選擇。

當然還有不少也支援 Arduino 的圖形化程式編輯器,您可依照自己的喜好上網 Google 尋找,接下來的單元教學,我們都將採用 mBlock5 做示範。

二、程式編輯器下載與安裝

請大家打開瀏覽器並搜尋 mBlock5,進到下圖所示的軟體下載頁面。

請依照您的作業系統下載「慧編程桌面端」軟體。

下載 mBlock5

下載後,依照軟體引導安裝即可,安裝完畢後開啟,就能看到編輯畫面。

「慧編程桌面端」軟體

、基礎操作

在還沒有安裝超音波或循線感應器前,需要先了解自走車的行進方式.首先打開 mBlock5。可以在主畫面左下方找到在設備分頁內有個加號圖案,點選加號圖案新增我們的設備控制器。

Arduino 自走車教學系列 - 單元(二)移動控制

選擇 Arduino UNO 並在右下角點選「確認」。

Arduino 自走車教學系列 - 單元(二)移動控制

選擇完我們使用的設備後,就可以在圖塊程式積木選擇列表內,看到與 Arduino 相關的圖塊程式,待會將會使用這些圖塊程式來撰寫自走車行進的程式。

Arduino 自走車教學系列 - 單元(二)移動控制

在寫行進的程式前,程式需要一個主要的開頭,表示遇到什麼事件而進行什麼動作。

先點選「事件」然後將「當 Ardunio UNO 啟動時」的圖塊拖拉到空白處。

Arduino 自走車教學系列 – 單元(二)移動控制

接下來點選「控制」,並將裡面的「不停重複」拖拉出來並放在「當 Ardunio UNO 啟動時」的下方。

Arduino 自走車教學系列 – 單元(二)移動控制

接下來我們要對自走車的輪子下達轉動的程式指令,程式指令會由 Arduino 的腳位下達訊號到馬達驅動板,再由驅動板直接驅動馬達。

如果您有按照「單元(一)」安裝自走車,那麼控制馬達的腳位肯定是第 5、6 腳位(控制其中一顆馬達)以及第 9、10 腳位(控制另一顆馬達),控制的方式是發送 PWM 訊號(範圍是 0~255),數字給的越大馬達轉動的速度就越快,反之則越慢或停止。至於什麼是 PWM,有興趣的朋友可以自己 Google,簡單來說就是可以控制速度的指令

如下圖點選「腳位」,並拖拉出「設置PWM (5)輸出為(0)」這個圖塊程式到「不停重複」內。

Arduino 自走車教學系列 – 單元(二)移動控制

馬達控制的原理為:單一顆馬達是由兩個腳位控制,假設這兩個腳位分別是 5、6,當 5 號腳位設定輸出為 0,另一支 6 號腳位設定輸出為 0~255 的數,則馬達將會依照填入的數字大小,朝某個轉向做相應速度的旋轉(可能是正轉向或反轉向)。

若改由 5 號腳位設定輸出為 0~255 的數,6 號腳位設定輸出為 0,則馬達將會依照填入的數字大小,朝與剛剛相反的轉向做相應速度的旋轉。

如同前面所敘述的馬達控制原理,如果我們要控制兩顆馬達,就要一口氣拖拉出四個圖塊程式到「不停重複」內,並在「設置PWM」 的後方填入控制的腳位編號(5、6、9、10),然後在「輸出為」的後方依照剛剛的控制說明填入數值,在此範例是填入 200,在 0~255 的範圍中屬於大約接近 80% 的速度,程式撰寫如下圖所示。

Arduino 自走車教學系列 – 單元(二)移動控制

小提醒

若是調整數度的數字給的太小 ,馬達會因為供電不足而轉不動喔!

截至目前為止,程式的運作順序流程為:當 Ardunio UNO 啟動時,會無限循環執行放在「不停重複」裡面的圖塊程式,直到斷電為止。若是自走車的組裝沒有問題,將程式上傳到 Arduino 後只要接上電池,自走車的兩個輪子應該就會自己轉動起來了。

那我們就來將程式上傳到 Arduino UNO 測試看看吧!首先要拿出 USB 傳輸線連接 Arduino UNO 與電腦,電腦是接一般常見的 Type A(像隨身碟那種頭),而 Arduino UNO 則是接上Type B(連接一般印表機那種),接上後點選下方的「連接」。

Arduino 自走車教學系列 – 單元(二)移動控制

接著勾選「顯示所有可連接的設備」後選擇設備連接電腦的序列埠(圖中是COM3,依照個人電腦不同而有不同編號),選擇完畢後點選「連接」。

Arduino 自走車教學系列 – 單元(二)移動控制

連接完畢後就可以看到「上傳」的按鈕,點選上傳將圖塊程式上傳到 Arduino UNO 裡。

Arduino 自走車教學系列 – 單元(二)移動控制

點選上傳後會跑出上傳進度視窗,等到跑到 100% ,此時拔掉 USB 線並裝上電池,您的自走車輪子就會開始轉動囉!

Arduino 自走車教學系列 – 單元(二)移動控制

四、調整轉向

輪子可以轉動後,接下來我們要來調整轉向,首先試著讓兩個輪子都是往前轉,若是您目前兩個輪子就是往前轉動的話就可以不用調整。小編運氣比較不好,只有一顆輪子是向前轉,由腳位 5、6 控制的輪子是向後轉的,所以需要調整。

有兩種方法可以調整,第一種方法是從接線下手,將接在腳位5、6 的兩條杜邦線對調接,即可改變轉向。第二種方法是更改程式寫法,將腳位 5 的輸出改為 0 ,腳位 6 的輸出改為 200 ,也就是對調這兩個腳位的參數,這樣也能改變轉向,哪種方法都可以!小編在這邊選擇第一種作法,單純個人喜好。

試著自己調整並了解如何讓車子的輪子像前轉吧!

五、進階操作

知道如何更改轉向後,試著挑戰撰寫除了前進以外的左右轉及後退吧~為了方便識別與使用,我們可以使用自訂積木功能來做各動作的分類。

點選「自訂積木」然後選擇「新增積木指令」。

Arduino 自走車教學系列 – 單元(二)移動控制

接著在「積木名稱」的位置,輸入您要建立的積木名稱,在這邊小編是輸入:前進,輸入完畢後點選右下角的確認。

Arduino 自走車教學系列 – 單元(二)移動控制

您可以看到剛剛新增的前進積木出現在兩個地方,一個是在積木選擇列表裡,另一個是在撰寫程式的白底區,而白底區的前進積木多了「定義」兩個字,顧名思義我們可以在它的下方定義這個前進積木的功能。

Arduino 自走車教學系列 – 單元(二)移動控制

試著如下圖新增其他方向的積木指令,挑戰依照自己的理解寫看看。

Arduino 自走車教學系列 – 單元(二)移動控制

新增完畢後點選「控制」並拖拉出「等待(1)秒」的程式,這個程式能讓機器人暫停一段時間,而不立即執行下個動作。

Arduino 自走車教學系列 – 單元(二)移動控制

將程式改為如下圖所示,並將程式上傳到 Arduino UNO ,試著觀察看看「等待」這個圖塊程式所表示的意義。

您也可以將程式更改為沒有加上「等待」,如下圖所示,比較看看有什麼不同?

Arduino 自走車教學系列 – 單元(二)移動控制

發現了嗎?有加上「等待」的程式,將會跟著我們所撰寫的邏輯,依照 3 秒的時間長度重複執行前進、後退、左轉與右轉。而沒有加上「等待」的程式卻沒有辦法正常執行,並不是他沒有依照邏輯執行,只是因為程式執行的速度很快,當他執行完「前進」就會馬上接著執行「後退」,切換過程中硬體跟不上程式的變換速度,所以看起來就會怪怪的,彷彿程式不存在一樣。

六、結語

這個單元教大家如何使用 mBlock5 撰寫程式,藉由程式控制自走車移動,並了解如何調整自走車的轉向。接下來的單元(三)將會帶大家裝上循線感測器,經由循線感測器就能讓自走車依照地上的黑色線移動。如果有避障功能需求的朋友,我們也會教大家如何在循線的基礎上,再增加超音波避障的功能。