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

Updated: Sep 23, 2019



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


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


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

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


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

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

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

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

傳資料用的USB TypeB to TypeA傳輸線、電池。


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


避障自走車套件包傳送門

循線自走車套件包傳送門



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



示範文章傳送門 - 簡單製作自走車



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

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

mBlock5 下載傳送門




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



基礎操作

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


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



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



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

先點選"事件"然後將"當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)"這個圖塊程式到"不停重複"內。



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

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


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

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


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


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



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



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



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



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

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


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


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



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



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



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

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



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



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



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



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



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

創客萊吧MakerLab

高雄市左營區博愛二路202號B1F

0989-250-580