首先來看一下這個顏色傳感器的工作原理。當她工作在顏色識別的工作模式下時,她的顏色發光管通過集成在一起的紅、綠、藍三個LED,利用光的三色原理,交替發出7種不同顏色的光,然后通過傳感器上的接收二極管,測量被測物體反射光的強度,當反射光最強時,就認為此時發出的顏色光就是物體的顏色。
例如,在她的發射LED交替發出7種不同顏色光的時候,同時也在不斷地接收反射光的強度。而當發出紅色光的時候,測量到此時物體的反射光最強,那么就認為這個被測量的物體是紅色。黑色物體因為吸收了所有可見光,所以當傳感器交替發完7種不同顏色的光以后,比較每一種顏色所接收的反射光強度,數值都非常弱,同時與測量的環境光比較后,則認為被測物體是黑色。
明白了這個顏色傳感器工作原理,我們再來看顏色識別錯誤的問題和幾種解決方法:我們用藍色來舉例,首先被測色塊盡可能靠近顏色傳感器,以減少外界環境光源的干擾,但不要完全貼在傳感器上,留給物體反射回傳感器的一個距離空間,一般5mm左右就可以。不要移動被測色塊,再看測量結果。
1.如果一個藍色的色塊,顏色傳感器總是讀出綠色,或者讀錯的概率太大,說明這種藍色的色調不適合用EV3的顏色傳感器。建議換一種不同色調的藍色,最好用Lego的藍色積木塊。因為EV3的顏色傳感器在設計時,是以Lego自己的顏色為標準。
2.如果一個藍色的被測色塊,有時會被識別成綠色,但多數情況被正確識別成藍色。這種情況可以用數字均值濾波的方法,去除掉干擾。比如當第一次讀出藍色后,延時再讀一次,再判斷第二次讀出的是否還是藍色,如果兩次讀出不一致,則忽略不計。直到連續讀出同一顏色結果,則認為此顏色正確。具體測量采樣的頻率和次數,根據實際應用來定。我在顏色分揀傳送帶的程序里,根據傳送帶的速度,和色塊尺寸,用了兩次采樣,間隔0.5秒。
3在實際應用中,我們多數情況對要識別的色塊,識別到了即可,不需要對已經識別到的色塊再反復識別。比如對傳送帶上經過的色塊計數。經過一個色塊就記一次數,如何控制檢測計數器,也是會經常用到的。我比較常用的方法是經過數字濾波后,確認正確識別到了物體后,計數器操作一次,同時作‘本次已操作過’標志。保證對同一物體不再重復運算操作。直到傳感器采樣到另一種顏色后,比如黑色或無色或其他環境顏色,再清除“本次已操作過”標志。具體程序并不復雜,大家可自己嘗試。