EV3 的顏色感應器可以感應顏色、反射光線強度與環境光強度。顏色感應時,可以分辨的顏色是:

經常的應用是實作顏色分類器、色卡電子琴等。反射光線強度與環境光強度下,基本上都是感應光線的強度,差別在於,量測反射光線強度,紅色 LED 指示燈會開啓,感應器量測反射回到鏡頭內的光線,為了減少其他光源的影響,感應器要很接近但不接觸物體表面,環境光強度量測時,主要是收集周遭環境的各種光線的總強度。
反射光線強度應用
這次我想使用反射光線強度量測,通常會使用來設計循跡機器人,以黑色軌道為例,光線從黑色區域反射回來的量會比較少,因此可將顏色感應器靠在黑色軌道旁:

如果黑線是在感應器的右方,當機器人越往左偏離黑線,反射光會越大,在大於某個值時可使其偏右接近黑線,如果機器人越偏右進入黑線,為避免它整個往右超出黑線,可在反射光小至某個值時,讓機器人偏左,像這樣始終讓感應的反射光維持在某個範圍內,保持黑線在感應器的右方,就可讓機器人延著劃下的軌道前進。
當然,這樣的方式只適合不交叉的黑線,如果軌道有交叉,就要使用兩個感應器夾住黑線,如此在兩個感應器反射光都小於某個值時,就表示目前處於交叉點。
實作掃描器
我想到的是,使用反射光線強度量測來實作掃描器,將掃描的結果顯示在 EV3 主機螢幕上,積木的組裝可以下載檔案 Scanner.lxf,或者直接 線上觀看組裝過程,積木成品圖如下:

這是簡單的掃描器可掃描小面積的影像,底下是實際運作的影片:
掃描器程式實作
照例,程式實作時分為數個自訂 Block,剛開始進行掃描時會清除螢幕,接著進行 Scan 自訂積木,完成掃描後會暫停等待按下任一主機按鈕,可以趁此看看掃描成果:

在進行掃描時,因為我的目的是測試顏色感應器的能力,因此在馬達控制上我投機了一些,直接測試它可以作動的範圍,得到大型馬達可轉動 100
度,中型馬達可轉動 392
度來驅動掃描器,我選擇讓大型馬達運作 20
次,中型馬達運作 28
次,因此,我可以擷取的點總共有 20 x 28
,當然,可以再設得精細一些,掃出來的圖實際上測也會再精細一點,不過,這樣掃描一次的時間就會拉長了。
因為解析度為 20 x 28
,我選擇在 EV3 主機螢幕上將每個擷取到的黑色使用 6 x 6
正方型顯示,因此整個會使用到的 EV3 主機螢幕範圍為 120 x 168
。
在這樣的設定下,ScanAll 自訂方塊的設計如下:

每前進一行,顏色感應器會掃描該行,進行反射光的偵測,這就是 ScanOneLine 自訂 Block 的作用:

在 CatchBlack 自訂 Block 中,實際的反射光該在什麼樣的量判定為黑色或白色,建議實際量測一塊全黑的表面,看看反射光值為多少,再於該值上下微調(你也可以設計將此設計為一個校準的自訂 Block,也可以保留一個拉桿,讓使用者可以微調該值,這就像是在設定對比度,閥值越高表示越容易判定為黑色,這樣掃出來的圖會比較多黑色區塊,反之就是白色區塊比較多)。

實際測試成果
我印製了一張圖來做掃描測試:

中間三角型是用來測試可以掃描的黑色區塊最小極限,成果如下:

至於「EV3」圖樣,因為我畫的太大了,實際上只能掃描到「EV」兩個字母,成果如下:

有興趣的話,可以自行組裝一個更大台的掃描機,結合較多的顏色感應器,如果有另一台主機,串接起來,另組一台印表機的話,就會像是影印機了 … XD