自然界的颜色非常丰富,从原理上来讲彩色的光进入人眼色度细胞来判断出来各种颜色,对于我们人眼类来说,自然界的颜色分为两种,一种是加色原理得到的直射的光,另一种是减色原理得到的反射光。
    一种红色的光源和另外绿色的光源的光线混合我们得到了黄色的光,蓝色的光和绿色光混合我们得到的是青色,而等量的红色+蓝色+绿色我们可以得到白色光。所以在加色原理的系统中我们说三原色是红色R,绿色G,蓝色B。使用不同比例混合这三种光线我们可以得到自然界各种颜色的光线,手机的显示屏就是使用了这种方式得到的彩色影像。
    而对于自然界大多数物体来说,我们人类看到的颜色是减色原理来的。自然界的光照来自太阳光,因为太阳每种颜色的光线都可以看作是均匀的,我们得到了白色光。一个不发光物体之所以能显示红色,是因为这个物体在白色光线达到物体后吸收了蓝色和绿色的光,仅仅把红色光反射出来,我们人眼只能看到它是红色。

    Jpg1

    于是红色=白色-蓝色-绿色。黄色=白色-蓝色。蓝色(青色)=白色-红色,而黑色=白色-红色-蓝色-绿色。所以,黄色的颜料和蓝色的颜料混合时候把白色光中的蓝色和红色都吸收了,所以我们可以得到绿色的颜料。人们总结出减色系统的三原色为C蓝色(青色),M红色(品红)和Y黄色,使用不同比例的这三种颜料可以调配出各种颜色,绘画用的颜料就是使用减色规则调色的。这也是为什么美术课上的讲的三原色CMY和物理课上的三原色光RGB完全不同的原因。
    为了识别非发光物体的颜色,只要知道它对不同颜色光线的吸收比例就行了。于是我们使用三原色光线,RGB分别照射物体,并且使用光敏传感器去检测在三种光线照射下,物体对对光线的吸收比例就可以识别出物体的颜色。

    Jpg2

    米兔积木机器人的颜色传感器就是在颜色检测过程中使用切换三原色光照,并且分别实时检测出物体对不同颜色光照的反射强度,从而得知物体的颜色的。传感器内部由高速MCU来完成这种快速的判断和识别。为了减少编程中的困惑,在传感器中内置了对12种颜色识别的智能算法,传感器不用把采集到的数据传输给主控直接可以做出判断,在把判断结果发送给主控。如果使用者希望得到更精确的判断,也支持把采集到的数据发给主控由用户自己写识别程序判断所采集到的颜色。
    这种使用减色反射原理做出的颜色判断好处是它可以直接看到物体的本质,对外界颜色光的干扰影响很小。比如在红色环境光照下的白色物体人眼看到的是红色的,但是这并不能欺骗颜色传感器,它依然可以读到物体的本质颜色是白色。但是同样的受限于这种传输原理,颜色传感器对检测物体要求比较苛刻它只能识别表面有漫反射的物体,首先物体不能透明或者有镜面反射面,其次物体自己不能发光。
    灰度传感器是在这个基础上增加了一个红外线光源,我们通过这个红外线光源的反射情况来判断不同物体的灰度或者相同物体的距离。综合颜色传感器和灰度传感器的数据我们可以得到更准确的判断结果,就好像我们人类的眼睛色度细胞识别距离短专门管理色彩的识别,亮度细胞距离远专门管理灰度和物体的轮廓。
    我们一个颜色传感器就类似昆虫的一个单眼(不是复眼),它主要来判断光线的强弱,比如蜘蛛有八只单眼,多个这样的单眼就可以得到外界环境的信息,所以巡线最好使用两个传感器,识别手势动作最好使用两个传感器,走迷宫最好使用三个以上的传感器,而识别机器人足球最好能安装有更多的传感器。

    Jpg3