首先来看一下这个颜色传感器的工作原理。当她工作在颜色识别的工作模式下时,她的颜色发光管通过集成在一起的红、绿、蓝三个LED,利用光的三色原理,交替发出7种不同颜色的光,然后通过传感器上的接收二极管,测量被测物体反射光的强度,当反射光最强时,就认为此时发出的颜色光就是物体的颜色。
例如,在她的发射LED交替发出7种不同颜色光的时候,同时也在不断地接收反射光的强度。而当发出红色光的时候,测量到此时物体的反射光最强,那么就认为这个被测量的物体是红色。黑色物体因为吸收了所有可见光,所以当传感器交替发完7种不同颜色的光以后,比较每一种颜色所接收的反射光强度,数值都非常弱,同时与测量的环境光比较后,则认为被测物体是黑色。
明白了这个颜色传感器工作原理,我们再来看颜色识别错误的问题和几种解决方法:我们用蓝色来举例,首先被测色块尽可能靠近颜色传感器,以减少外界环境光源的干扰,但不要完全贴在传感器上,留给物体反射回传感器的一个距离空间,一般5mm左右就可以。不要移动被测色块,再看测量结果。
1.如果一个蓝色的色块,颜色传感器总是读出绿色,或者读错的概率太大,说明这种蓝色的色调不适合用EV3的颜色传感器。建议换一种不同色调的蓝色,最好用Lego的蓝色积木块。因为EV3的颜色传感器在设计时,是以Lego自己的颜色为标准。
2.如果一个蓝色的被测色块,有时会被识别成绿色,但多数情况被正确识别成蓝色。这种情况可以用数字均值滤波的方法,去除掉干扰。比如当第一次读出蓝色后,延时再读一次,再判断第二次读出的是否还是蓝色,如果两次读出不一致,则忽略不计。直到连续读出同一颜色结果,则认为此颜色正确。具体测量采样的频率和次数,根据实际应用来定。我在颜色分拣传送带的程序里,根据传送带的速度,和色块尺寸,用了两次采样,间隔0.5秒。
3在实际应用中,我们多数情况对要识别的色块,识别到了即可,不需要对已经识别到的色块再反复识别。比如对传送带上经过的色块计数。经过一个色块就记一次数,如何控制检测计数器,也是会经常用到的。我比较常用的方法是经过数字滤波后,确认正确识别到了物体后,计数器操作一次,同时作‘本次已操作过’标志。保证对同一物体不再重复运算操作。直到传感器采样到另一种颜色后,比如黑色或无色或其他环境颜色,再清除“本次已操作过”标志。具体程序并不复杂,大家可自己尝试。