Arduino 專題教學-循線與避障自走車(上)

Arduino 自走車 - 循線與避障(上篇)

前言

這一篇主要是給支持我們iCShop 的廣大朋友撰寫的基礎教學文,近期發現很多朋友或學生想開始學習Arduino ,下載了官方的Arduino IDE 後,試著照查詢到的教學網站或是觀看YouTube 學習,但使用起來好像沒有想像中的簡單,所以入坑的有點吃力。

本篇我們將針對「自走車」這一個非常輕鬆有趣的主題,透過大家都可以取得的免費資源來體驗寫程式的有趣之處。

不管您想製作循線的,還是避障的自走車,或是兩種都要的。

首先您需要有一台已經組好的自走車,配置相當常見也平價,大致上需要的東西如下~

主控板:Arduino UNO (正版、相容版、加強版、霹靂無敵酷炫版……都可以,但壞掉的不行)

擴充板:Arduino Sensor Shield V5.0 (為了方便連接感測器或是馬達與電源使用)

馬達驅動:L9110 或L9110S (有沒有加這個S都無所謂)

自走車車架(馬達、輪子、螺絲螺帽、銅柱、壓克力車板……等)

傳資料用的USB Type B to Type A傳輸線、電池。

如果您不想要這麼麻煩一個一個搜尋,可以直接依照您的喜好,到iCShop 選擇您要避障還是循線的套件包,本篇教學也會使用這些套件包。

擁有製作自走車的材料後,請參考「簡單製作自走車」示範文章試著自己動手組裝您的自走車。如果您是買套件包的朋友,要特別注意的是馬達驅動板的部份,示範文章是藍色的,而我們套件包內附的是紅色的,功能都一樣只差別在於螺絲孔的數量與位子,紅色的只需要一根螺絲,安裝的位子不管是哪種,都是在車底兩個馬達的中間。

馬達驅動板

製作完自走車後您需要下載寫程式的軟體,為了方便大家入門輕鬆趣玩,我們決定使用MakeblockmBlock5 ,它是使用圖形化拼接的方式來撰寫程式,且支援上傳程式功能。

以往是使用mBlock3 來撰寫,但是新版的mBlock5 已經支援Arduino,且上傳程式的速度比起mBlock3 加快了不少,所以我們會使用mBlock5 來撰寫本篇的示範程式。

mBlock
mBlock

有了組裝好的自走車,程式也下載安裝完成,就可以開始來寫程式囉!以下會分為三個部份:第一部份是基礎操作,第二部份是避障篇,第三部份是循線篇。建議大家一定要先看基礎操作,然後再依照您購買的套件包,選擇要看第二部份還是第三部份。

基礎操作

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

新增設備
新增設備

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

選擇Arduino UNO
選擇Arduino UNO

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

Arduino相關的圖塊程式
Arduino相關的圖塊程式

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

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

拖拉「當Ardunio Mega 啟動時」圖塊到空白處
拖拉「當Ardunio Mega 啟動時」圖塊到空白處

有仔細看過Arduino 系列產品的朋友一定會發現,我們明明使用的是Arduino UNO ,為什麼是當Arduino Mega 啟動時呢? 其實這是翻譯沒弄好的問題,當切到英文畫面時是顯示「When Arduino UNO starts up」喔,所以即便在中文介面下它是顯示Mega 也不用在意,就當它是顯示Arduino UNO 吧!在接下來的教學描述中依舊會以Arduino Mega 來說明。

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

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

如果您組裝自走車的過程,是參考「簡單製作自走車」,那麼您的Arduino 負責下達指令的腳位為5、6 腳位(控制其中一顆馬達)以及9、10 腳位(控制另一顆馬達),控制的方式是發送PWM 訊號(範圍是0 – 255),數字給的越大馬達轉動的速度就越快,反之則越慢或停止。至於什麼是PWM ,有興趣的朋友可以自己Google ,簡單講就是可以控制速度的指令

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

從腳位中拖拉出「設置PWM (5)輸出為(0)」圖塊程式
從腳位中拖拉出「設置PWM (5)輸出為(0)」圖塊程式

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

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

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

設置兩顆馬達四個腳位PWM數值
設置兩顆馬達四個腳位PWM數值

若是調整數度的數字給得太小 ,馬達會因為供電不足而轉不動喔!這點請注意。

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

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

點選「連接」
點選「連接」

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

勾選「顯示所有可連接的設備」
勾選「顯示所有可連接的設備」

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

上傳圖塊程式至Arduino UNO
上傳圖塊程式至Arduino UNO

點選上傳後會跑出上傳進度視窗,等到跑到100% ,您的自走車輪子就會開始轉動囉!

上傳進度
上傳進度

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

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

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

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

點選「自訂積木」並選擇「新增積木指令」
點選「自訂積木」並選擇「新增積木指令」

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

建立積木名稱
建立積木名稱

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

「前進」積木
「前進」積木

如下圖所示,我們可以將控制兩個輪子前進的圖塊程式,改移動到「定義前進」的積木底下,這樣一來我們就定義了在積木選擇列表裡的「前進」這個積木,代表會控制輪子向前轉動。

這時只要將積木選擇列表裡的「前進」拖曳到「不停重複」積木內即可,簡單說就是將原本需要四個圖塊程式,改為只需要一個即可。

將定義為「前進」的積木拖拉至「不停重複」
將定義為「前進」的積木拖拉至「不停重複」

試著如下圖新增其他方向的積木指令吧!

新增「前進」、「後退」、「左轉」、「右轉」積木指令
新增「前進」、「後退」、「左轉」、「右轉」積木指令

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

設定「等待(1)秒」程式
設定「等待(1)秒」程式

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

設定等待時間為3秒
設定等待時間為3秒

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

無設定等待指令
無設定等待指令

綜合以上我們已經學會了第一部份 – 基礎操作,您已經能簡單控制自走車移動,本篇就先介紹到這邊,下一篇會一口氣介紹避障與循線「Arduino 自走車 – 循線與避障(下篇)」,就選擇您買的套件類別選著看吧!