MoonCar 登月小車最具特色的功能,就是底部有一顏色感測器,並且搭配一個白色補光燈。除了循線與避障之外,多了顏色感測的功能使得小車能執行的任務多了不少,例如:沿線行走時,能加上判別地上的顏色,進而執行額外動作。增添不少玩法與提高程式撰寫難度,使得學習者能挑戰更複雜的邏輯。
這個單元就是要教大家如何使用顏色感測器來判別顏色,並搭配魔幻LED 顯示其感測的顏色。但在開始之前我們需要知道MoonCar 看到的顏色與我們看到的有何不同?
小知識:
對於感測器來說,它讀取到的顏色是由R、G、B 三個顏色組成的,也就是說~我們讀取到的會是三組有意義的數值,依照這三個顏色的數值高低組成,代表不同的顏色。接下來~為了方便大家理解,R、G、B 三個顏色將以通道稱呼,例如:下圖內的紅色,是由R 通道數值為255 加上G 通道與B 通道數值為0 所組成的。
圖片來源:http://blog.shuiguzi.com/2015/05/04/Shader_5/
對我們來說,我們看到的是「黃色」,而感測器看到的則是「R: 255, G: 255, B: 0」。
程式功能說明:
在MoonCar 的程式庫內,與顏色感測器有關的程式共有6 個 ,我們將一一對其說明。
首先是「顏色感測器初始化」,該程式會準備感測顏色前的所有啟動流程,包含開啟補光燈,使用於要感測顏色前,通常放置在「當啟動時」,會完成一切設定以便使用者能開始感測顏色。
「補光燈開啟與關閉」這個程式,能讓使用者決定補光燈何時關閉與開啟。
「顏色感測器讀取〔紅色〕通道數值」這個程式,顧名思義就是當感測顏色時,能讀取到組成該顏色的R 通道數值,下拉式選單能選擇讀取其他通道。透過這個程式能看到感測器讀取到的三個通道數值。
「顏色感測器讀取顏色數值」、「顏色感測器紀錄[紅色]數值」、<讀取顏色等於[紅色]>這三個程式必須搭配使用,用於方便讓使用者紀錄並比對。
與上個程式不同,程式裡的顏色不是指通道,而是實際的顏色(會自動記錄三個通道的數值)。使用方法首先需要用「顏色感測器紀錄[紅色]數值」來記錄數值,然後透過「顏色感測器讀取顏色數值」不斷讀取感測的數值,再透過<讀取顏色等於[紅色]>比對是否與之前紀錄的顏色相同。
下拉式選單能選擇紀錄其他顏色,除了有隨車附贈的色卡顏色之外,還有自訂的選項能讓使用者額外紀錄其他顏色。特別值得一提的是~選單內的顏色只是一個名稱或標籤,方便使用者紀錄顏色,就算你用紅色紀錄綠色的色卡也是可行的喔。
程式撰寫:
首先寫一個檢測顏色通道數值的程式吧,於當啟動時放入「顏色感測器初始化」,以便啟動顏色感測的功能,透過序列功能與字串組合顯示各通道數值。
將程式下載到micro:bit 後即可打開序列埠監控軟體查看讀取數值。
由上圖可以看到小編的MoonCar 感測綠色顏色時,讀取到的通道數值為R: 29、G: 66、B: 35,感測數值會依照環境光源與感測物體的材質,或是本身感測器誤差會有所不同。但應該不會誤差太大才是~您可以透過這個程式去觀察各色卡,或是身邊物品的數值。
接下來示範如何使用「顏色感測器讀取顏色數值」、「顏色感測器紀錄[紅色]數值」、<讀取顏色等於[紅色]>這三個程式。
一樣在當啟動時透過「顏色感測器初始化」啟動感測程序,我們使用了micro:bit 上的A 按鈕與「顏色感測器紀錄[紅色]數值」來決定何時紀錄我們想要紀錄的顏色數值,在這邊選擇紀錄紫色。接下來於重複無限次內放入「顏色感測器讀取顏色數值」用來不斷讀取顏色數值,然後用<讀取顏色等於[紫色]>來比對,當紀錄的顏色與感測的顏色一樣時則顯示打勾,不同則顯示打叉。
將程式下載到micro:bit 內即可執行,執行流程如下~先將MoonCar 放置在欲紀錄的紫色色卡上,並按下按鈕A 紀錄,紀錄完畢後就能抽換色卡看有沒有成功囉~
我們也可以搭配之前學到的魔幻RGB LED 來讓顯示更精彩。在這邊示範另一種紀錄顏色的方式,於當啟動時決定要紀錄的顏色,等待記錄完畢後再讓程式進到重複無限次去比對。
我們會用到重複判斷迴圈並搭配一些邏輯來做到這點,如下圖所示~這次我們紀錄兩個顏色,分別是紅色與綠色:
與之前學過的一樣,設定RGB LED連接的腳位與亮度,並初始化顏色感測器後,使用重複判斷迴圈檢查按鈕A 是否被按下?若是沒有則會一直在迴圈內,等到按下A 按鈕時才會跳出迴圈執行後面的記錄紅色數值程式。為了方便使用者知道紀錄完畢沒,使用顯示文字告知使用者紀錄的狀況,告知完成後清空畫面,再進到下一個重複判斷迴圈,等待記錄下個顏色。等到再次按下A 按鈕時跳出迴圈,並記錄綠色且同樣顯示文字,等到清除畫面後則進到重複無限次的程式內。
至於重複無限次內的程式與上一個雷同,只是將比對的結果顯示替換成RGB LED,並且改為比對兩種顏色。
將程式下載到micro:bit 內即可執行,如下圖:
如果您已經完成上述功能且瞭解其運作,可自行修改上面這個程式來新增其他顏色,可一次紀錄九種顏色。
結論:
基本上顏色感測器的使用方式大致上就是這樣,我們學會透過序列埠,觀察感測到的顏色其RGB通道數值,並能透過記錄程式來記憶顏色並比對。您可以挑戰將循線程式加入其中,讓MoonCar 能邊循線邊偵測顏色。
關於micro:bit 登月計畫就到這邊告一段落,總共八個單元,學習如何使用MoonCar 登月小車上的各個功能。其實除了使用MakeCode 來撰寫程式之外,您還能用Arduino IDE 或是Micro Python 來使用登月小車,不過要自己找程式庫就是了,目前我們並沒有提供,有興趣的朋友可以自己挑戰看看,若之後有時間再跟大家分享如何使用Micro Python 玩 MoonCar,完畢!