micro:bit 登月計畫 - 單元(四) 路徑導航

Updated: Apr 7



這個單元將教大家如何使用循線感測器,並讓我們的MoonCar 能沿著黑色線行走。是個非常有趣且不複雜的主題,那就讓我們馬上開始吧!首先~




小知識:

在MoonCar 底部有一對循線感測器,主要用來沿著黑線或白線行走。單個循線感測器是由紅外線發射器與紅外線接收器組成,


當通電時,紅外線發射器會不停發射紅外光,光線經由照在可反射的表面而產生反射,此時只要反射光強度足夠,紅外線接收器就能接收到反射過來的紅外光。

只要是平滑的表面,且距離不要太遠,光線都會被紅外線接收器接收,但是也是有例外的情況,好比說表面的顏色較深,尤其是越接近黑色的表面。黑色的表面會吸收光線,導致反射光的強度微弱,或是幾乎沒有反射光。



綜合以上所說到的特性,當循線感測器在可反射表面時,紅外線接收器能收到反射光,而當在黑色表面時,紅外線接收器則不會收到反射光。我們就是利用這個特性,讓MoonCar 能沿著白底中的黑色線行走,或是黑底中的白色線行走。


在MoonCar 的正面,於底部循線感測器的相對位置上,有貼心的LED 指示燈,方便大家檢視目前循線感測器的狀態。當循線感測器位於黑色上方時會亮起綠色LED ,反之則熄滅,如下圖所示:


場地的部份,大家可以找一塊木板或是大張的淺色紙,黑色線的部分可以使用黑色電工膠帶黏貼,就能製作出簡易的測試場地囉~




程式撰寫:

首先一如往常地打開程式編輯器MakeCode 準備開始。

雖然能透過LED 指示燈知道MoonCar 的感測狀態,但這是給我們觀察用的,我們還是得透過程式來得知MoonCar 在黑色與非黑色面兩者的差別,才能依照對應的狀況撰寫行走的程式。


我們可以透過micro:bit 的顯示程式來顯示循線感測器目前的狀態,首先點選積木列表中的"基本",將「顯示數字( 0 )」的積木拖曳出來,放到重複無限次裡。


接著點選"登月小車",將「循跡感測器」這個程式拖曳出來。


將「循跡感測器」放到顯示數字的程式裡,這樣就完成了。將寫好的程式下載到micro:bit 裡。




我們將執行的結果用下圖顯示:


當兩個感測器都在黑線上則為狀態:0,同時也代表著黑色線剛好在MoonCar 的正中央。因為我們的目的主要是沿著黑色線走,不希望MoonCar離開黑色線,所以「狀態:0 」屬於安全狀態。

當MoonCar 因為路線使得車身往黑線右邊偏移,導致左邊感測器在黑線上,但右邊已經跑出黑線時,則為「狀態:1」。

當MoonCar 因為路線使得車身往黑線左邊偏移,導致右邊感測器在黑線上,但左邊已經跑出黑線時,則為「狀態:2」。

兩顆感測器完全離開黑色線則為「狀態:3」。

為了能讓MoonCar 一直沿著黑線跑,我們必須要透過程式修正MoonCar 的方向,對於這四種狀態對應的決策如下:

「狀態:0」,前進(是安全狀態所以前進)

「狀態:1」,左轉(因為向右偏移所以左轉修正)

「狀態:2」,右轉(因為向左偏移所以右轉修正)

「狀態:3」,後退(因為跑出去所以後退回到黑線上)


我們可以透過"如果<>那麼()否則()"這個邏輯程式來幫助我們撰寫對應的決策,程式撰寫如下:



車速不要寫太快,避免因為過快使得MoonCar 跑出去的機率增加,程式完成後就下載到micro:bit 裡,並打開開關試試看吧!


可以發現因為黑線太細,以及左右轉修正的太過快速,導致MoonCar 都只有在修正,行進的相當緩慢。

為了解決這個情況,除了可以加粗黑色線之外,我們也能從程式下手。我們要將左右轉的程式換成下面這個程式,它可以個別調整左右輪的速度。



將左轉右轉換成新的移動程式後,如下圖所示:



原程式的轉彎方式是以一個輪子向前轉,另一個輪子向後轉的原地修正方式。而新程式則是使用一個輪子向前轉,將原本向後轉的輪子改為停止,仔細比較後,新的程式就算是在轉彎修正時也能移動,而不是原地修正完再前進。



雖然我們將速度設定的比較慢,但遇到轉彎較急的路線,還是有很大機率會出界,導致MoonCar 行進不是很流暢,其實只要稍加修正,就可以解決這個問題。我們可以將程式更改為這樣:



嗯?您沒看錯,跟上一個程式的差別就是將後退的程式刪掉。將這個程式下載到micro:bit 裡,打開電源試跑看看吧~




程式說明:

為什麼只是把後退刪掉就可以得到這麼流暢的效果呢?其實很簡單,首先我們要知道一件事,MoonCar 的動作是由我們針對遇到的狀態,所下達的決策,當下達前進這個決定時,MoonCar 將會前進,只要我們不下達新的指令,MoonCar 就會一直前進。

回到我們所遇到的出界問題,在遇到出界之前,MoonCar 一定會先經過「狀態:1」 或是「狀態:2」,依照程式~遇到「狀態:1 」或「狀態:2」 會針對其左偏或右偏下達左轉或右轉的指令,此時MoonCar 接收到左轉或右轉,於是開始轉彎修正。但因車速過快或遇急彎而導致出界時,因在新的程式中並沒有針對出界的「狀態:3」 編寫對應動作,所以MoonCar 出界時依舊會持續原本的轉彎動作,理所當然的又回到黑線上。




總結:

經過本章的教學,大家已經了解~如何讓MoonCar 沿著黑線走的訣竅,可以試著把車速加快或是自行編寫更厲害的程式,使得MoonCar 移動~更加行雲流水,下一章將教大家如何加裝超音波距離感測器,讓您的MoonCar 能偵測障礙物。下一章見!



#microbit #MoonCar #Webduino #WebBit

創客萊吧MakerLab

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

0989-250-580