
1.3 传感器
学习目标
(1)认识光的传播规律以及光电传感器原理。
(2)掌握光电传感器的各种测量模式,学会运用光电传感器进行编程。
(3)理解反射光强度与测量距离、灰度、颜色等元素的关系。
(4)知道光值标准化的概念,学会设计程序进行光值的标准化。
(5)认识陀螺仪传感器和加速度传感器,学会运用这些传感器控制机器人的运动。
1.3.1 光电传感器原理
光在真空或是空气、玻璃、水等透明均匀介质中都是沿着直线传播的,如图1.3.1所示,但是,当光照射到物体的表面时会发生反射,正因为有物体的反射光到达了我们的眼睛,我们才能够看见那些不发光的物体。例如,我们能够看到遥远的月球,也是因为月球表面的反射光(来自太阳)到达了我们的眼睛。光在物体表面的反射如图1.3.2所示,从图中可以看出:反射角等于入射角,其中法线为垂直于物体表面的辅助线。

图1.3.1 光的直线传播

图1.3.2 光的反射示意图
光照射到不同的物体会有不同的现象,例如,镜子会反射光,玻璃会透射光,黑色的衣服会特别容易吸收光。其实所有的物体都吸收光,只是吸收多少的区别。有的物体吸收了光以后温度会迅速上升,有的物体吸收了光会产生电,还有的物体吸收了光以后其自身电阻值会发生变化,影响电路中电流的大小,这就是光敏电阻,光电传感器就是利用光敏电阻的这一特性设计而成的,通过对电流大小的检测可以反映接收的光的强弱。
光电传感器一般有四种测量模式:环境光测量、反射光测量、颜色测量和原始光测量。在环境光测量模式下,将光电传感器对着环境,光电传感器可以检测环境光的强度,以此判断环境的亮暗程度;在反射光测量模式下,光电传感器通过自身发出的光照射到物体表面上来测量反射回来的光的强度,以此来判断物体表面的灰度;在颜色测量模式下,光电传感器发出白光,白光混合了红光、绿光和蓝光,通过测量反射回来的红光、绿光和蓝光的亮度比例,从而判断物体的颜色。例如,如果物体的表面是红色,在白光的照射下,白光中的绿光和蓝光会被吸收一部分,而红光被反射,所以红色物体的表面反射的光中红光比例会高一些。
光的三基色:红光、绿光、蓝光
太阳光的可见光部分是由红、橙、黄、绿、蓝、靛、紫七种色光组成的,这七种颜色的光又可以合成白色光。一般来说,一个物体之所以显示某种颜色,是因为它反射了这种颜色的光而吸收了其他颜色的光。例如,红色的花反射红色的光,同时吸收了其他颜色的光。随着人们对光的不断研究,人们又发现红光、绿光和蓝光按不同比例可以合成各种不同颜色的光,所以这三种色光又称为三基色光,红光、绿光和蓝光按等比例混合可以合成白色光,如图1.3.3所示,其中红光和绿光可以合成黄光,红光与绿光可以合成品红色光,绿光和蓝光可以合成青色光。

图1.3.3 红光、绿光与蓝光的混合
当然,太阳光除了有看得见的各种颜色的光之外,还有看不见的光,如红外线、紫外线以及各种射线。
1.3.2 光电传感器编程
光电传感器是用来获取各种光值数据的传感器,根据这些光值数据可以控制机器人做出相应的动作。其主要的编程模块有环境光测量模块、反射光测量模块、颜色测量模块和原始光测量模块,如图1.3.4和图1.3.5所示。其中反射光测量和环境光测量都是按0~100的百分比来表示光值大小。

图1.3.4 spike的光电传感器模块

图1.3.5 EV3的光电传感器模块
spike机器人测量的颜色有黑色(0)、紫色(1)、蓝色(3)、浅蓝(4)、绿色(5)、黄色(7)、红色(9)、白色(10)和无颜色(-1),其中括号里的数字指的是相应颜色的编号。EV3机器人测量的颜色有黑色(1)、蓝色(2)、绿色(3)、黄色(4)、红色(5)、白色(6)、棕色(7)和无颜色(0)。
spike机器人的光电传感器还可以测量物体表面反射回来的原始红光、绿光或蓝光的光值,其光值范围为0~255。
任务探究
探究不同物体表面的原始光值。
选择spike光电传感器,使用原始光模块,分别开启红色、绿色和蓝色检测模式,在相同的测量距离下,依次探究白色、红色物体表面对应的原始光值,如图1.3.6所示。同时对比红色和白色表面在反射光模式下的光值大小。
将光电传感器分别对准图中的白色区域和红色区域,光电传感器与测量表面保持约8mm的距离,这相当于一个乐高单位的长度。设计测光程序,如图1.3.7所示,将光电传感器的光值通过变量显示出来,并将数据记录到表1.3.1中。

图1.3.6 红色与白色区域

图1.3.7 测光程序
表1.3.1 光值数据

根据实验数据可以得出,在反射光模式下难以区分白色表面和红色表面(使用颜色模式进行检测可以区分),但使用原始光模块,开启绿色或蓝色检测,可以明显区分白色表面和红色表面。在光电传感器的白光照射下,白色物体的表面反射红光、绿光和蓝光,而红色表面反射更多的是红光,大部分的绿光和蓝光被吸收了。所以使用原始光模块的绿色或蓝色检测模式能够区分白色和红色表面。这在机器人竞赛中非常有用,若场地有红线或红白边界,采用以上方法可以让机器人以比例或PID算法进行巡线。
试一试
使用原始光模块,分别开启红色、绿色和蓝色检测模式,在相同的测量距离下(约8mm),依次探究绿色、蓝色和黑色物体表面对应的原始光值,如图1.3.8所示,同时测量绿色、蓝色和黑色表面在反射光模式下的光值大小,并将所有数据记录到表1.3.2中,根据表中的数据可以归纳出什么结论?

图1.3.8 绿色、蓝色和黑色
表1.3.2 光值数据

1.3.3 反射光强度
任务探究1
本节探究光电传感器测量白色表面的反射光强度与检测距离的关系。
光电传感器测量的反射光强度与测量方式、物体表面特征有关,从测量方式来说,测量距离和测量的角度都会影响反射光值,例如,当光电传感器正对着物体表面进行反射光测量时,测量的效果最好,若倾斜测量,反射光值会偏小。在相同的测量方式下,物体表面的颜色和平整光滑的程度也会影响测量的反射光值。
设计一个可调节距离的测光装置,设计示例如图1.3.9所示,将光电传感器安装到装置上,在计算机端直接读取光电传感器的反射光值,并将光值记录到表1.3.3中。

图1.3.9 可调节距离的测光装置
表1.3.3 光值数据

在探究过程中,仔细观察会发现,光电传感器发出的光不是平行光,而是向外发散出去的,所以在同一个物体表面,不同的照射距离会影响光的接收,距离越大,接收到的反射光越少。对于spike的光电传感器,发光的灯环绕着光接收窗口,如图1.3.10所示,随着测量距离的减小,光值会逐渐变大,当测量距离小到一定程度时,光值达到最大,并不再改变。对于EV3机器人的光电传感器,当测量距离较大时,随着测量距离的减小,光值会逐渐变大,在特别近的某一位置时,由于发光的灯与光接收窗口是分离设计,如图1.3.11所示,随着测量距离的再次减小,反射光基本上都回到了灯的附近,而很少有反射光进入接收窗口,所以测量的反射光值会变小。

图1.3.10 spike的光电传感器

图1.3.11 EV3的光电传感器
在机器人竞赛中,场地可能会不平整,光电传感器在测量场地表面的反射光强度时,spike机器人的光电传感器与物体表面保持8~16mm的距离,EV3机器人的光电传感器与物体表面保持约8~12mm的距离。
任务探究2
探究不同灰度物体表面的反射光强度和不同颜色物体表面的反射光强度。
灰度色是指纯白、纯黑以及两者中的一系列从黑到白的过渡色,如图1.3.12所示。图1.3.13所示为彩色图案。开启光电传感器的反射光强度模式,将光电传感器以约8mm的高度对着图1.3.12、图1.3.13中的灰度色和彩色,光电传感器从左向右缓慢移动,测量不同颜色表面的反射光强度,并将反射光值记录到表1.3.4中。

图1.3.12 灰度色

图1.3.13 彩色
表1.3.4 反射光强度的变化

通过探究发现,在探究反射光强度与灰度关系的实验中,当其他条件相同时,颜色越深,测量的反射光值越小。
物体表面的颜色越深,说明它对光的吸收能力越强,反射光就越少。当光照射到白色物体表面时,大部分光会反射出去,很少被吸收;若照射到物体表面的光被吸收了,几乎没有反射光到达我们的眼睛,这就是我们“看到”的黑色。
当被检测物体的表面是彩色时,不同颜色区域的反射光强度也是不同的,其中红色、橙色和黄色表面测量的反射光值较大,而绿色、蓝色和紫色表面测量的反射光值较小。
1.3.4 光值的标准化
同型号的光电传感器之间的测光性能可能存在差异,这给机器人的编程带来一些麻烦。由于编程往往不需要实际的光值大小,只需要光值的百分比,为了统一各光电传感器的光值,可以通过程序将光值按百分比进行标准化。
试卷分数的标准化
光值的标准化过程类似于将试卷得分百分化,通常一份试卷的满分为100分,若有一份试卷满分为80分,若考试成绩为72分,则这个分数相当于标准试卷100分的多少分?
可以先计算72分在80分中所占的比例,然后再与100分相乘,即可获得标准化分数。

选择一块白色区域和黑色区域,如图1.3.14所示,以白色区域测量的反射光值作为最大光值,黑色区域测量的反射光值作为最小光值。

图1.3.14 白色和黑色区域
将光电传感器的反射光值按百分制进行光值标准化,可表示为

用光电传感器分别测量白色和黑色的反射光值,例如,使用光电传感器测得白色区域的反射光值为83,黑色区域的反射光值为3,则传感器的实际测量范围为3~83。若光电传感器测量黑白边界上的反射光值的“测量值”为67,则按百分制标准化后的光值为

即该光电传感器的测量值67对应的标准化光值为80。运用程序对实时测量的反射光值进行标准化,其程序设计示例如图1.3.15所示。

图1.3.15 光值标准化程序
运行程序,将光电传感器正对黑白边界区域,左右移动光电传感器,移动过程中,光电传感器的高度不变,分别测量白色区域的反射光最大值和黑色区域的反射光最小值,然后按下主控制器的左按钮,退出最大值和最小值的测量,最后根据光值标准化公式计算标准化光值。
在机器人竞赛中,可通过手动输入测量的光电传感器反射光的最大值和最小值进行光值标准化,如图1.3.16所示,也可以自动输入反射光的最大值和最小值,实现光值的标准化。

图1.3.16 手动写入反射光的最大值和最小值
试一试
设计程序,让机器人自动获取图1.3.14中黑白区域的反射光的最大值和最小值,并对反射光强度进行标准化。
1.3.5 陀螺仪传感器
EV3机器人有外接的单轴陀螺仪传感器,单轴陀螺仪传感器只能识别一个方向,并且陀螺仪测量的角度容易出现不稳定现象。而spike机器人的主控制器内置了三轴陀螺仪传感器,角度测量稳定,三轴陀螺仪传感器可以让机器人同时识别三个方向:偏航、俯仰和横滚。将spike机器人的主控制器水平放置,偏航模式可以测量机器人在水平面上逆时针或顺时针旋转的角度;偏航角可以控制机器人精准转向;俯仰模式可以测量机器人低头或抬头的角度,俯仰角可以让机器人识别当前行驶的路面是平面还是坡面;横滚模式可以测量机器人左倾或右倾的角度,横滚角可以检测机器人是否发生向左或向右的倾斜。
当spike机器人的控制器顺时针旋转半周时,其偏航角的变化为0°→180°,逆时针旋转半周时,偏航角的变化为0°→-179°。
当spike机器人的控制器左倾半周时,其横滚角的变化为0°→-180°,当右倾半周时,其横滚角变化为0°→179°。
当spike机器人的控制器低头半周时,其俯仰角的变化为0°→90°→0°,当抬头半周时,其俯仰角变化为0°→-90°→0°。
例如,使用陀螺仪传感器控制机器人向右原地顺时针转向90°。可以选用偏航角控制机器人的转向,为了提高转向精度,电机速度设置为25。在机器人转向前重置陀螺仪传感器的偏航角为0°,机器人左电机向前运动,右电机向后运动,直到偏航角等于90°时,机器人停止运动,其程序设计示例如图1.3.17所示,其中机器人左电机接B端口,右电机接C端口,EV3机器人选用大型电机驱动,EV3的陀螺仪传感器安装时正面朝上。

图1.3.17 机器人转向程序
陀螺仪传感器可以精准控制机器人的转向和直行,提高机器人运动的精准度。同时还可以减少烦琐的参数调试,提高程序编写的效率。
试一试
使用陀螺仪传感器控制机器人原地转向270°。
1.3.6 加速度传感器
spike机器人的主控制器内置了三轴加速度传感器,有了加速度传感器,机器人就可以很容易地判断当前的运动状态(加速、减速、转弯和撞击等),测量机器人的加速度。spike机器人三轴加速度的方向如图1.3.18所示。

图1.3.18 机器人三轴加速度的方向
三轴加速度的数据可在主控面板中显示,如图1.3.19所示,由于地球引力的作用,即使机器人静止在桌面上,其z轴加速度值约为1000。而一个真实的重力加速度值约为10m/s2(理解为物体从高空自由落下,其速度每秒增加10m/s),所以机器人测量的加速度值大约是真实加速度值的100倍,测量精度较高,正因为如此,加速度的数据测量非常敏感,其测量值一般会在±5以内变化。

图1.3.19 加速度传感器数据显示
任务探究
探究机器人在x轴方向上的撞击加速度。
选用spike机器人,让机器人朝向控制器的左侧以速度50匀速向前移动,探究机器人在撞击平整墙壁过程中的加速度的最大值。
机器人设计参见图3.3.15,机器人以速度50直行前进,预设驱动轮电机旋转300°时机器人可抵达墙壁前方约3cm,然后再预设1s的时间让机器人抵向墙壁,测量机器人撞击墙壁过程中的最大加速度,撞击过程中的加速度值是正值,其程序设计示例如图1.3.20所示。

图1.3.20 探究机器人在x轴方向上的撞击加速度
通过探究发现,机器人朝向主控制器的左侧运动,当受到撞击时,其测量的加速度值会明显增大。撞击的最大加速度与墙壁的硬度、撞击的角度以及机器人撞击前运动的速度等因素有关。还可以通过线形图的方式来显示撞击过程中的加速度值的变化,其程序和加速度线形图如图1.3.21和图1.3.22所示。
一般来说,机器人以功率50撞向墙壁,其加速度值会在1000以上。所以可以通过测量加速度来判断移动中的机器人是否发生撞击,机器人撞击的加速度阈值可以选用中间值,若加速度的阈值设置为500,机器人以速度50直行,当遇到墙壁时,停止运动,其程序设计如图1.3.23所示。

图1.3.21 撞击加速度线形图程序

图1.3.22 撞击加速度线形图

图1.3.23 机器人撞击制动程序
控制器水平安装在spike机器人上,当机器人朝向控制器右侧加速运动或朝向控制器左侧运动受到撞击时,其x轴加速度值会朝向正值增大;当机器人朝向控制器前方加速运动或朝向控制器后方运动受到撞击时,其y轴加速度值会朝向正值增大;当水平放置的机器人向上加速运动或下落受到撞击时,其z轴加速度会朝向正值增大。
试一试
(1)选用spike机器人,探究机器人在不同功率下撞击墙壁的最大加速度值,如果加速度为负值,取其绝对值。
(2)选用spike机器人,探究机器人以功率100从静止启动过程中的最大加速度值,如果加速度为负值,取其绝对值。
(3)选用spike机器人,机器人以功率100匀速移动,探究机器人制动过程中的加速度变化。
(4)选用spike机器人,当机器人以一定功率转弯时,探究x轴加速度值和y轴加速度值的变化。