本帖最后由 xvholly 于 2016-6-5 12:38 编辑
光传感器可以通过检测窗检测到颜色或光强度,光传感器可设定三种模式:环境光模式、反射光模式和颜色模式。
环境光模式光传感器在环境光强度模式下不发光(其实是蓝色的),能够测量从周围环境进入到检测窗的光强度,如太阳光或手电筒的光束,测量范围从0(极暗)到100(极亮)。利用传感器识别环境光的能力可让机器人完成诸如早晨光闹钟,或在灯灭时停止行动等动作。 反射光模式光传感器在反射光强度模式下发出红色的光,能够测量从红灯(即发光灯)反射回来的光强度,测量范围从0(极暗)到100(极亮)。利用传感器识别可见光的能力可让机器人完成诸如在白色表面上移动直到检测到黑线或颜色识别卡的动作等。 颜色模式光传感器在颜色模式下发出彩色的光,EV3官方编程软件可识别七种颜色:黑色、蓝色、绿色、黄色、红色、白色、棕色,和无颜色。利用传感器区别不同颜色的能力可让机器人完成诸如分类彩色球的工作,让机器人说出各种检测到的颜色,或见到红色即停止动作等。 光传感器特性光传感器采样频率为1 kHz。当处于“颜色模式”或“反射光强度模式”时,为求最精确传感器必须角度正确,尽量靠近但不接触到正在检测的物体表面。另外,在颜色模式下虽然官方编程软件预设七种颜色,但在我们的python库里面在颜色模式下是可以将R、G、B三种颜色值都读出来,就是说可以识别更多的颜色,以及提高识别准确度。 程序设计本文的程序设计是基于ev3dev项目使用python语言来做的,感兴趣的同学可以自行搜索,或者参阅我的个人博客:http://www.pazhong.net/?p=112 分别针对三种模式,我们看看实际的测量值读取结果。首先将光传感器连接在EV3主机1-4的任意接口上,这里我们连接到1口。我们只需要调取color_sensor()这个函数就可以自动识别、连接传感器。 刚才说的光传感器有三种模式,使用modes,可以列举出ev3dev支持的所有模式。 主要的几种模式分别对应:COL-AMBIENT(环境光模式)、COL-REFLECT(反射光模式)、COL-COLOR(颜色模式)、RGB-RAW(RGB模式)。 环境光模式使用mode对象,一方面可以读取当前的模式,另一方面可以写入模式名称进行模式转换。将光传感器改为环境光模式: 接下来可以通过value()函数读取此时的测量值。 你会发现,当用手捂住时可以看到数值接近0,而冲着亮的地方数值会变大。 反射光模式首先改变传感器模式,此时会发现传感器发出的光变成了红色。在这种模式下进行测量时,传感器要尽量贴近测量物体才能够准确。
当我们对着白色区域和黑色区域进行测量时,会发现数值出现明显的变化。白色区域读值更加接近100,黑色区域读值更加接近0。 彩色模式在彩色模式下读取测量值,会发现此时的读值只是0-7的数字,正如前文所说,数字分别对应的无颜色和七种颜色。
这8个数字对应的颜色分别是: - 0:无颜色
- 1:黑色
- 2:蓝色
- 3:绿色
- 4:黄色
- 5:红色
- 6:白色
- 7:棕色
现在我们对着魔方的蓝色块测试,获得结果是:2。 RGB模式显然,在颜色模式下,有的时候7种颜色并不能满足我们的需求,比如当我们去检测红色和橘色时,测量的结果都是5(红色)。RGB模式会让我们获得的测量结果的更准确。 当转换为RGB模式后,会发现此时的测量值有三个,反馈测量值数量可以通过num_values对象获得。
这三个反馈值分别对应的R值、G值、B值,可以通过value(0), value(1), value(2)分别获得。 - for i in range(3): cs.value(i)
复制代码
现在我们来看对魔方上面红色和橘色进行测量的结果: 红色
橘色 非常接近,这也难怪颜色模式下区分不开这两种颜色。如果采用RGB模式,我们可以重新定义各个颜色的识别范围,从而将他们进行区分。理论上,RGB模式能够识别的颜色数量为:256 x 256 x 256 = 16777216种,也就是我们听说过的24位真彩色。
|