任务1:悬崖勒马
发布人:张建辉发布时间:2018-12-07 10:36:14
如果制作“悬崖勒马”这个任务,就一定要学习新的传感器。还记得传感器是什么吗(参见图 9-1)?
传感器是机器人的输入设备,是机器人用于感知外界并将各种感知转换为电信号的设备的统称。有了这些传感器,机器人就像长了眼睛、耳朵等感觉器官,就更像“人”,并在感觉上比人类更精确、更丰富。到目前为止,我们只用过一种传感器:触碰传感器。下面学习一种新的传感器:光电传感器。这种传感器非常重要,后面的章节都会用到。
一、光电传感器
为了制作可以“悬崖勒马”的小车,我们需要学习的新传感器是:光电传感器(参见图 9-2)。
光电传感器可以感知光线的强弱。反应到程序中,就是光线越强,返回的数值(或者叫光值)就越大。
光电传感器上还有一个 LED 灯,在灯不亮时,可以感应环境光的强弱;在灯点亮时,可以感应灯光打到物体后的反射光的强弱。
LED 灯的灭与亮(参见图 9-3),即可以用程序控制(本章我们将采用此方法),也可以在控制器上直接控制。
依据 LED 灯的两种状态,光电传感器模块有两种使用场景,一种是测量环境光,一种是测量反射光。
光电传感器在测量环境光时不需要“开灯”,而测量反射光时需要“开灯”。
那么,我们为什么要测量反射光呢?
因为可以判断反射面的灰度(也就是表面颜色的深浅)。光电传感器的发光二极管会发出一束白光,照到不同颜色的物体上之后,由于不同颜色表面对光线的吸收作用不一样,所以反射光线的强弱也不同。一般来说,深色表面吸收光线多,反射光线少;浅色表面吸收光线少,反射光线多。
所以,反射面是白色时,传感器侦测到的反射光值比较大;反射面是黑色时,传感器侦测到的反射光值比较小;反射面是灰色时,传感器侦测到的反射光值介于白、黑之间;而反射面是某种具体颜色时,传感器侦测到的反射光值也将介于白、黑之间,或者说和某个灰度相同。
二、“悬崖勒马”机器人的搭建
下面我们需要准备一下“悬崖勒马”机器人的元器件(参见图 9-4)。其实很简单,就是在基本车的基础上安装光电传感器。
把这些元器件安装之后,就是下面的样子了(参见图 9-5、9-6、9-7)。好,现在带着一个问题观察下面的 3 张图片:这辆小车为什么有一个长长的“脖子”?


经过观察可以发展,光电传感器是安装在控制器的 P1 接口上。现在来回答刚才提出的问题:这辆小车为什么有一个长长的“脖子”呢?因为这样可以提高安全性。否则,在速度比较快时,就算发现了悬崖,在惯性作用下也停不住。
三、测量光值
之所以用光电传感器来完成“悬崖勒马”,是因为光电传感器可以“看见”桌子。
光电传感器向下对着桌子,打开灯,桌子会反光,这样光值会比较高。但是到了“悬崖”就没有反光了,光值会比较低。我们就是利用这个方法来判断小车是否还在桌子上(或者说前面是否有悬崖)。
下面来学习一下如何测量光值。首先,把光电传感器接在 P1 接口上(参见图 9-8)。
选择“内置测试”菜单,然后选择“光电”项(参见图 9-9)。
在光电界面中,左上角的 P1 上显示的光值就是我们要的(参见图 9-10)。
读取到的光值是:1990。
下面我们来测量一下桌子与桌子外的光值。我们找一张桌子,白桌子最好,现在把小车放在桌子上,光电传感器对着桌面(参见图 9-11)。
读 P1 的数,大概 2400 多(参见图 9-12)。这个数字是个动态的数,会一直变,但变化范围在 2400 到 2500 之间。
把车向前推,直到光电传感器被推出桌面(参见图 9-13)。
再次读取 P1 的光值,大概 580 多(参见图 9-14)。
那么,光值取多少时我们认识光电传感器是在桌子上呢?其实在 2400 至 580之间取一个任意数就可以。但为了提高程序的敏感度,我们定为 2000。如果光值大于 2000,我们就认为光电传感器是在桌子上,反之就是到悬崖了。
四、编程
任务描述:小车是在桌子上跑的,小车跑到桌子边时可以自动刹车。
下面是参考程序(参见图 9-15):

