04[机器人课堂RCX编程]第四章.pdf
本章所包含的内容:n 触动传感器 n 光电传感器 n 角度传感器 n 温度传感器 n 传感器的使用方法与技巧 n 其他传感器 4.1 简介 马达通过齿轮和滑轮传动,可以让你搭建的机器人动起来,他们就如同是移动机器人腿和手臂的肌肉。同时,你还可以使用传感器来装备你的机器人,它们就如同是机器人的眼睛、耳朵和手指。机器人套装中包含两种传感器:触动传感器(两种)和光电传感器。在本章中,我们主要是描述它们的特性,对于其它的传感器你可以单独购买,如:角度传感器和温度传感器。每一个设备都有其特定的作用,你将会因为它们的功能强大和所能涉及的范围之广而感到惊讶。当然也包括这种情况,可以用一种传感器仿效另一种传感器,以用来代替不能使用的传感器。利用R C X 上的红外光电,使用一些小技巧,你可以把把你的光电传感器变成一个雷达。在阅读本章的过程中,我们希望你能把机器人套装放在身边,这样你可以跟随我们的例子亲自动手去做。为了保持其完整性,我们还会讲一些机器人套装的扩展套装和技术套装的内容。若你现在还没有这些也不要担心,这不会影响到你搭建体积较大的机器人。4.2 触动传感器 触动传感器(图4.1)是乐高传感器大家庭中最简单、最直观的一种。它的工作方式非常像是你家门铃上的按钮:当它被按下时,电路接通,电流就会通过,R C X 就能够检测到这个数据流,你的程序就会读取触动传感器的当前状态:开或者关。图4.1 触动传感器 如果你已经开始使用机器人套装,阅读了C o n s t r u c t o p e d i a,并搭建了一些模型,你可能对传感器的一般用途比较熟悉,如缓冲器。缓冲器是与周围环境相互作用的一种简单方式,当你的机器人遇到障碍物时,可以用它们来进行检测,并由此而改变运动状态。典型的缓冲器是一个重量较轻的可移动装置,事实上,当它碰到障碍物时会把冲击力传递给Page 1 of 18机器人课堂2009-4-15触动传感器并使之关闭。你也可以发明出很多种缓冲器,但它们的外形应该能够反映机器人的外形,而且还能反映出环境中障碍物的外形。如图4.2 中所示一个非常简单的缓冲器,可以很容易发现墙壁,假如房间里有像椅子一样等复杂障碍物,它的效果就不好了。在这种情况下,我们建议你通过实验来进行。为机器人设计一个缓冲器,在房间的周围离地板适当高度的地方移动它,检查它是否能够发现所有可能的碰撞点。如果你的缓冲结构较大,当它用最佳部位撞击到障碍物并按下触动传感器时,不要以为这就是正确的。图例4.2 是一个不太好的缓冲器,因为当碰撞发生时,它几乎不能用横轴的边缘来关闭触动传感器,说它是一个不好的缓冲器是因为它把整个碰撞产生的力直线传输给了传感器,也就是说,在机器人身上安装一个非常稳固的支架对传感器的安装是非常有必要的。图4.2 简单的缓冲器 根据经验,应该尝试不同的碰撞来看看缓冲器在各个位置是否能很好的工作。你可以编写一个无限循环的小程序,当传感器被按下时,发出一声蜂鸣声用来测试你的缓冲器。谈起缓冲器,人们往往会想到当遇到障碍物时开关会被按下。这样说似乎有点绝对,在发生碰撞的时候同样可以松开开关。看一下图4.3,橡胶皮筋可以使积木轻压着传感器,当缓冲器的前面部分接触到物体时,开关就会被释放。图4.3 平常压下的缓冲器 实际上,向你推荐这种缓冲器有这样几个重要的原因:Page 2 of 18机器人课堂2009-4-15l 冲击力不可能直接传递给传感器,传感器与标准的乐高积木相比更容易受损坏,因此应避免不必要的撞击。l 橡皮圈可以吸收撞击力,这对你的传感器和机器人来说都会起到保护作用,当你的机器人速度非常快,或者重量大,或者反应比较慢,或者具备其中的一个因素时,这种保护作用显得尤其重要。缓冲器是一个非常重要的装置,而且触动传感器的应用也非常广泛。当你想告之R C X 一个事件发生时,你可以使用按钮一样人为的把它按下去。你能想象出类似的情况吗?事实上,有很多。比方说,你可以按下铵钮告诉R C X”现在读取光电传感器的值”,从而进行读取校准(我们将在以后的部分进行讨论)。另一个常用的作用就是把触动传感器作为一个位置控制器来用。如图4.4,机器人向前看时(图4.4 b)就关闭了头部(图4.4 a)的触动传感器。通过编程可以在水平面上实时的控制头部的旋转(向左或向右),当传感器被按下时,机器人的头部就能转回到正确的位置,值的注意的是,我们在这个例子中用到的凸齿轮在与触动传感器相配合时是非常的有用,你可以让轴通过三个十字孔个中的一个来选择合适的距离去关闭触动传感器。图4.4 用触动传感器定位 Page 3 of 18机器人课堂2009-4-15在本书的第三部分我们还会介绍位置控制的其它一些应用。事实上,在搭建你的机器人之前需要你去研究一些不同的方法。我们再举几个事例来说明传感器的应用。假如你想搭建一个电梯。你希望电梯可以在任何一层都能停下。首先你会想到在每一层安放一个触动传感器,当按下其中一个时,电梯室会在那一层停下。这是一个好方法,但这里有一个小问题;你仅有两个触动传感器,对你来说,一个电梯仅有二层不是非常实际,你可以再买一个触动传感器,但这只能再加高一层,并没有解决实质性的问题。此时,R C X 的三个输入端口已经全部被占用。突然,你会想到一个办法:为什么不把传感器放在电梯厢上而不是外面呢?在电梯厢上固定一个传感器,这样只需一个传感器就可以加高更多的楼层了。从最初的方案到现在更好的方案,两个系统是完全相同的吗?答案是否定的。首先,你需要决定厢的绝对位置,当它在第二层时,你仅是可以知道它的相对位置。那么,你需要一个初始点,从起始点开始计算就可以推断出厢的位置.或者程序运行时,需要厢体在一个特定的位置,或者用第二个传感器来探测一个特定的楼层。例如,在最底层放置一个传感器,因此程序一开始就降下电梯到最底层。那样就可以计算出厢体的绝对位置了。现在,电梯就能够准确的升降了。但你还有最后一个问题需要解决:如何告诉你的电梯它应该去哪一层呢?在每一楼层放置一个传感器去提示电梯是不切合实际的。在R C X 上只剩下一个输入端口了。你要用这一个触动传感器来做什么呢?你还可以采用以前的方法吗?可以,你可以计算一个触动传感器被按下的次数。比如说,被按下三次表示是三楼,依次类推。现在你就可以去搭建你的电梯了。方法与技巧 计算按下次数 下面这个例子是用伪代码来编写的,一个代码并不与实际编写语言相对应,而是界于程序语言和机器语言之间。使用伪代码编程在专业程序员中是一种非常普遍的做法。计算触动传感器被按下多少次需要一些小窃门。假如你写了一些简单的代码,如下:C o u n t e r =0 r e p e a t i f S e n s o r 1 i s o n t h e n C o u n t e r =C o u n t e r +1 e n d i f e n d r e p e a t 当你保持触动传感器被按下很短的间隔内,你的程序代码就会在你的R C X 上飞快的执行。然而,在记录下一个新的按下之前,需要松开触动传感器:C o u n t e r =0 r e p e a t i f S e n s o r 1 i s o n t h e n C o u n t e r =C o u n t e r+1 w a i t u n t i l S e n s o r 1 i s o f f e n d i f Page 4 of 18机器人课堂2009-4-154.3 光电传感器 用”看”来形容光电传感器的功能有点夸大其辞。实际上它只是用来检测光并测量其强度。尽管受到限制,但其应用范围仍比较广。图4.5 光电传感器 光电传感器和触动传感器的最大区别是,后者返回的是一些数值而不是单纯的开/关状态。你所读到的数值由光电传感器在那个时候所检测到的光强所决定。这些数值以0 至1 0 0 的百分数的形式返回,光值越大,百分数就越大。你可以用光电传感器来做什么呢?你可以用它搭建一个由光电传感器所驱动的机器人,我们称之为光的追随者,它可以检测周围的环境,找到一个强光源(或者是最亮的)并朝着它前进。在一间足够暗的房间里进行,以免产生干扰,你也可以用手电筒来控制你的机器人。e n d r e p e a t 现在,你编写的代码正确地记录了从断开到闭合的变化。在你的代码中,有一个重要的特点需要介绍一下:当它在一段时间内接收不到触动信息时,你希望你的计数程序停止。为了实现这一点,你需要使用一个计时器用来测量上一次按下时间与最后一次时间的间隔:C o u n t e r=0 i n t e r v a l =r e s e t T i m e r r e p e a t i f S e n s o r 1 i s o n t h e n C o u n t e r =C o u n t e r +1 w a i t u n t i l S e n s o r 1 i s o f f o r u n t i l T i m e r i f g r e a t e r t h e n I n t e r v a l r e s e t T i m e r e n d i f u n t i l T i m e r i s g r e a t e r t h e n I n t e r v a l 假如你的时间间隔是两秒。当计数程序开始时,计时器和计数器首先复位为0,然后开始检测传感器的状态。如果两秒内没有按下触动传感器,它仍将保持复位状态,如果有触动传感器被按下,此动作将被记下并等待使用者释放按钮,计时器复位为零,在程序停止运行之前,使用者可以在两秒内第二次按下触动传感器。Page 5 of 18机器人课堂2009-4-15检测外部光源的功能是非常有趣的,但是或许你不能用它来做最令人惊奇的事情。我们介绍一下光电传感器的另一个用途:它不但可以用来检测光强,而且还可以自身发光。提供稳定光源的是一个红色的发光二极管,因此你可以用来测量反射光并传给传感器。当你用来测量反射光时,你必须去避免一些来自其它光源的干扰。需要注意的是光电传感器对I R 所发出的光也非常敏感,像典型的远距离控制器发出的红外光,如摄像机;或者是乐高红外发射器。光在表面的反射率取决于许多因素,主要是表面的颜色,质地和它距光源的远近。黑色物体的反射能力要弱于白色物体;黑色光滑表面的反射能力要强于黑色不光滑表面。另外,距离光电传感器越远,光电传感器所检测到的反射光就会越少。这些因素都是相互依赖的,通过光感读取的值,并不能说明是由哪个因素引起的。但你可以保持其它因素不便,而让一个变化,这样就可以通过读取的数值来推断出环境的一些变化。例如,如果你的光电传感器经常对着同一个物体,或者相同质地和颜色的物体,你能够用它去测出它的相对距离。另一方面,你可以把不同的物体放置在光电传感器的前面,在恒定的距离内分辨出它们的颜色。4.3.1 测量反射光值 为了举例说明测量反射光的原理,我们来做一个实验。拿一个R C X 并打开其电源,在任意一个输入端口连接一个光电传感器,在你的程序中正确的设置其端口(红色发光二极管应该发光)。准备一间光线较暗的房间,R C X 有个控制模式,可以实时查看光感读取的值。按R C X 上的V I E W 键,当小箭头正确显示在传感器所接的输入端口位置。在显示屏上会显示出读取的光线值。接下去你把光感放到桌上,在桌上以一定间隔(0.5 c m,1 c m,1.5 c m)并排放置不同颜色的积木块,保证积木之间的间距相等。查看数据,得到的是不同颜色的积木反射的光值是不同的。再进行第二个实验:将白色的积木快慢慢的移向光感,然后再慢慢的移开,观察显示屏上的数据,可以发现当光感与积木间的距离加大时数值将减小。我们的目的就是为了证明光感是不能同时判断出距离和颜色的。我们重点强调在你使用光感时尽量避免外界光线的干扰。设计与计划 读取周围的光值 乐高光电传感器并不适合于测量外部光源来说,因为其灵敏度比较弱。红色发光二极管所所发出的光太靠近检光器以致于过多的影响了光值的读取。如果你想测外部光源,你应该考虑尽可能的去减少红色发光二极管的影响。一个简单的办法就是在光电传感器的前部放一个1 2 的单孔积木块,.更多的行之有效的办法需要你对光电传感器有些细微的改动。在R a l p h H e m p e l 的网站中,他提到了如何对光电传感器作修改,既不是永久的改变也不会损害你的光电传感器。(见附录A)方法与技巧 理解原始值的概念 了解原始值是很关键的,对于熟练的使用机器人套装并不是必须的。但从另一个方面讲,它可以帮助你理解传感器是如何工作的。R C X 把来自传感器(不管是什么类型)的电信号全部转变成范围在0 至1 0 2 3 之间的数字信号,我们称之为原始数值。在程序中,你在一个端口上设置了一个特定的传感器,R C X 会自动设定该传感器的原始数值范围,例如,从触动传感器读取的数值范围是1 或者0,代表开或者关,当从温度传感器读取时就会转变成摄氏温度或华氏温度。同样地,光电传感器读取时就会通过下面的方程式转换成一个百分数:百分数=1 4 6-原始数值/7 为什么我们需要知道这种转换呢?对于大多数应用程序来说,通过R C X 返回的光感值的百分Page 6 of 18机器人课堂2009-4-15 识别不同的颜色是光电传感器一个非常普通的应用。我们曾说过,光电传感器实际上并不是用来识别颜色的,而是用来读取反射光值。因此,它很难把黑色和蓝色的积木块区别开。但目前来说,我们仍说它能识别颜色,在读完之后您会明白真正的意思是什么。4.3.2 沿线走 目前,光电传感器最普遍的使用方法就是用它搭建一个沿线走的机器人。这个项目的设置是很简单的,这也是之所以流行的一个原因。尽管其外观简单,这项工作仍需要引起足够的重视,并需要你仔细设计和认真编程。我们将在第二部分详细的讨论这个主题的细节内容。当光电传感器在轻质地面上读取一条黑线时,你要注意有什么事情发生。当把光电传感器放在地板上时,假设说读取的数值为百分之七十,黑线为百分之三十。如果你想让机器人缓慢的从地板移动到黑线或者是有污点的地方.你会注意到,数值不是从一个值突然跳到另一个值,而是会出现一系列的中间值。原因是光电传感器不是读取一个点,而是光电传感器前部的一个小区域。所以当光电传感器穿过线的边缘时,它所读取的是地板和黑线的边界值并返回一个中间值。这个功能有用吗?当然,有时有用,有时没有用。尤其当我们涉及到沿线走时,它是有用的。实际上,你可以(或者说应该)编写一段程序让你的机器人沿着边界走而不是实际的黑线。这样当机器人需要改变它的行进路线时,它知道往哪个方向转身:如果所读取的值太”暗”,它应该向亮的区域前进,或有污点的区域。当你需要控制一个更复杂的区域时,举例来说,区域包括三种不同的颜色,想象一个台面被划为白色,黑色和灰色三个不同颜色的区域。在白色和黑色之间的边界上你如何能区别出灰色区域?这时你不能只做一个简单的读取,你必须深入考虑其它的因素,像预先读取,或者你可以使你的机器人在一个地方收集更多的数据并推断它所在的位置。要处理这样的情况,对软件的要求就会变得更加复杂。光电传感器如同一个万能器,它有很多种使用方法。你可以在光电传感器的前部放置一个彩数形式更加有效,但也有这种情况,你需要所有光感变化值而百分数形式却不能体现出光感值的一些变化。我们用一个例子来做一下说明。假设会有两种不同的情形,光电传感器读取7 0 7 和7 1 3 两个不同的数值。把这两个数值转换成百分数,因为R C X 只使用整数,需要将除的结果进行圆整。1 4 6-(7 0 7/7)=1 4 6-1 0 1=4 5 1 4 6-(7 1 3/7)=1 4 6-1 0 1=4 5 在第二个方程式中数值1 0 1 实际上是1 0 1.8 5 7,去掉小数部分为1 0 1.就看部不出两个值是不同的。我们知道在大多情况下数值的小数部分是不重要的。但也会有其它情况需要用到这样一个微小的变化的数据 如果你用L E G O 图形化的编程环境为R C X 编写程序,你必须接受它的刻度值,否则无法处理原始数值。如果你选择其它的编程语言,则可以直接处理没有处理过的原始数值,在必须的时候,利用其优势,可能会有更好的解决方案。技巧与提示 校准读取值 有时,你并不能预先知道光电传感器实际上所读取的数值是多少。假如你要参加一个沿线走的比赛:你并不能确定你的传感器所返回的地板和黑线的数值。在这种情况下,一般的习惯是,在你的程序中不写入预期的常数值是比较好的。但可以让你的机器人通过一个简单的测量程序来读取这些数值。继续我们沿线走的例子,你可以专设一个空的输入端口用来接入一个触动传感器,当你把机器人放在地板上时手动按下触动传感器,然后再放在黑线上,因此它就可以保存下读取到的最大值和最小值。或者你可以编写一个小的检测程序,以取消那些限制。Page 7 of 18机器人课堂2009-4-15色的可以移动的乐高梁来搭建一个对称形状的装置.图4.6 就是一个这样的例子。当你推或者拉梁的上部时,光电传感器就会读取不同的光值。图4.6 用光电传感器作一个模拟控制 光电传感器与灯相结合(不包括在头脑风暴套装中)可做成一个光电管(图4.7);当有物体挡在光电传感器和灯之间时,机器人就会察觉。值得注意的是,我们在光电传感器的前面放置了一个1 2 的单孔梁,以减少来自周围光线的干扰。图4.7 光电管 4.3.3 接近探测 你可以用光电传感器做成一个雷达探测器用于检测即将碰到的障碍物。这被称之为接近探测。这项技术所基于的特性我们已经讨论并探究过了,就是光电传感器可以根据反射光线来测定相对距离。假如你的机器人要直线前进,用一个光电传感器为它在前面引路。假如你的机器人要在一个暗室里移动,除了光电传感器上的红色发光二极管之外没有任何的光源。在向前移动的过程中,机器人连续不断的读取传感器所检测到的光值。如果读取值趋向于迅速增大,就可以推断出机器人正向着一个物体前进。但不能推断出障碍物的种类及与障碍物之间的距离,如果房间内没有物体在移动,你确信机器人正在接近障碍物。现在我们有了一套系统可以躲避障碍物而不是局限于碰撞以后再检测它们。注意:R C X 内部的I R L E D 发射的是不可见光,光电传感器的红色二极管发射的是可见光。遗憾地是,当房间内有光源时,这项技术工作就有问题了,原因是你的程序不能区别自身反射回的红色光还外界环境光线。你需要在机器人身上有一个更明显的独立光源提供更高的参考。令人欣慰的是,正好有一个!R C X 内部有一个I R L E D 可以发射信息给红外发射仪或是另一个R C X。用R C X 内部的I R L E D 以比特的编码形式发送信息可以被红外发射器所接收到。关于信息的内容我们并不关心;我们需要的仅仅是光。尽管红外光对于肉眼来说是不可见的,却与可见光具有相同的性质,L E G O 光电传感器对此却非常敏感。所以,现在你的程序有了使用接近探测的所有条件。发送一个I R 信息并立即读取光电传感器的值.你最好把读取的数值进行一下平均处理,这样可以把外部光源所导致的影响降至最低Page 8 of 18机器人课堂2009-4-15(我们将会第1 2 节讨论这个窍门)。如果你注意到在随后的二组值中有显著的增加,举例来说,百分之十,说明你的机器人很有可能正朝着障碍物前进。4.4 角度传感器 我们将要研究的第三个乐高传感器是角度传感器(图4.8)。遗可是机器人套装中没有包含该部件,它的多功能性仅次于光电传感器。在3 8 0 1 U l t i m a t e A c c e s s o r y 套装里面包含一个角度传感器,还有一个触动传感器,一个灯,遥控器 和少量的其它附件。图4.8 角度传感器 角度传感器,顾名思义,是用来检测角度的。它的身体中有一个孔,可以配合乐高的轴。当连结到R C X 上时,轴每转过1/1 6 圈,角度传感器就会计数一次。往一个方向转动时,计数增加,转动方向改变时,计数减少。计数与角度传感器的初始位置有关。当初始化角度传感器时,它的计数值被设置为0,如果需要,你可以用编程把它重新复位。通过计算旋转的角度,你可以很容易的测出位置和速度。当在机器人身上连接上轮子(或通过齿轮传动来移动机器人)时,可以依据旋转的角度和轮子圆周数来推断机器人移动的距离。然后就可以把距离转换成速度,你也可以用它除以所用时间。实际上,计算距离的基本方程式为:距离=速度时间 由此可以得到:速度=距离/时间 如果把角度传感器连接到马达和轮子之间的任何一根传动轴上,必须将正确的传动比算入所读的数据。举一个有关计算的例子。在你的机器人身上,马达以3:1 的传动比与主轮连接。角度传感器直接连接在马达上。所以它与主动轮的传动比也是3:1。也就是说,角度传感器转三周,主动轮转一周。角度传感器每旋转一周计1 6 个单位,所以1 6*3=4 8 个增量相当于主动轮旋转一周。现在,我们需要知道齿轮的圆周来计算行进距离。幸运地是,每一个L E G O 齿轮的轮胎上面都会标有自身的直径。我们选择了体积最大的有轴的轮子,直径是8 1.6 C M(乐高使用的是公制单位),因此它的周长是8 1.6=8 1.6 3.1 4 2 5 6.2 2 C M。现在已知量都有了:齿轮的运行距离由4 8 除角度所记录的增量然后再乘以2 5 6。我们总结一下。称R 为角度传感器的分辨率(每旋转一周计数值),G 是角度传感器和齿轮之间的传动比率。我们定义I 为轮子旋转一方法与技巧 角度传感器是如何工作的呢?因为角度传感器有四种不同的状态,所以会返回四种不同的值。我们称之为A,B,C 和D。对于每一次完整的旋转,它经过了四种状态各四次这也就是我们为什么要用十六来计数的原因。如果角度传感器是顺时针旋转,它会读序列A B C D,如果是逆时针旋转,读取的结果会是A D C B A,R C X 会时刻检测传感器,当R C X 检测到状态发生变化时,它不但可以推断出角度传感器已经转动,而且还可以知道所旋转的方向。举例来说,从A 转变到B,或从D 转变到A,计数器将增加一个单位,然而,从D 到C,或者是从A 到D,计数器将减少一个单位。Page 9 of 18机器人课堂2009-4-15周角度传感器的增量。即:I=G R 在例子中,G 为3,对于乐高角度传感器来说,R 一直为1 6.因此,我们可以得到:I=3 1 6=4 8 每旋转一次,齿轮所经过的距离正是它的周长C,应用这个方程式,利用其直径,你可以得出这个结论。C=D 在我们的例子中:C=8 1.6 3.1 4=2 5 6.2 2 最后一步是将传感器所记录的数据-S 转换成轮子运动的距离-T,使用下面等式:T=S C/I 如果光电传感器读取的数值为2 9 6,你可以计算出相应的距离:T=2 9 6 2 5 6.2 2/4 8=1 5 8 0 距离(T)的单位与轮子直径单位是相同的.实际上,在程序不仅仅会用到乘法和除法的数学运算,还有更多的需要多留心(有关内容我们将在第1 2 章进行进一步的讨论)。使用角度传感器来控制你的轮子可以间接的发现障碍物。原理非常简单:如果马达运转,而齿轮不转,说明你的机器已经被障碍物给挡住了。此技术使用起来非常简单,而且非常有效;唯一要求就是运动的轮子不能在地板上打滑(或者说打滑次数太多),否则你将无法检测到障碍物。如果是一个空转的齿轮连接到马达上就可以避免这个问题,这个轮子不是由马达驱动而是通过装置的运动带动它:在驱动轮旋转的过程中,如果惰轮停止了,说明你碰到障碍物了。在许多情况下角度传感器是非常有用的:控制手臂,头部和其它可移动部位的位置。值的注意的是,当运行速度太慢或太快时,R C X 在精确的检测和计数方面会受到影响。事实上,问题并不是出在R C X 身上,而是它的操作系统,如果速度超出了其指定范围,R C X 就会丢失一些数据。S t e v e B a k e r 用实验证明过,转速在每分钟5 0 到3 0 0 转之间是一个比较合适的范围,在此之内不会有数据丢失的问题。然而,在低于1 2 r p m 或超过1 4 0 0 r m 的范围内,就会有部分数据出现丢失的问题。而在1 2 r p m 至5 0 r p m 或者3 0 0 r p m 至1 4 0 0 r p m 的范围内时,R C X 也偶会出现数据丢失的问题。这仅仅是一个小小的问题,你可以上下调整传感器来使其处在合适的范围内。Page 10 of 18机器人课堂2009-4-15 4.5 温度传感器 这是机器人套装里面的最后一个传感器。这是一个可选传感器,它不在机器套装里面提供,但是你可以很容易的通过L E G O 在线购物或是家庭购物得到。我们说,它只是一个传感器,你可以不用到它。尽管它可以为您带来一些乐趣,当你的饮料太热或是太凉时,机器人可以提示你。温度传感器没有可以活动的部分,只是一个圆形的小铝筒(图4.9)。根据你在程序中所使用的图标,你可以获取到摄式温度和华氏温度。它可以测量-2 0 至7 0 之间的温度值(-4 至1 5 8),但是从一个值变到另一个值,刷新率会有点慢。所以,如果你想用它来进行温差变化比较快的实验,它不是一个最好的设备。图4.9 温度传感器 注意:乐高传感器有两种:有源传感器和无源传感器。无源传感器,简而言之,也就是它并不需要外界电源就可以工作。触动传感器和温度传感器属于无源传感器。而角度传感器和光电传感器则属于有源传感器。你是否想知道有源传感器是如何通过一条导线输出电源并将数据返回R C X 的呢?答案是输出电源(大约3 秒)和读取数值(大约1 秒)是一个周期。下面这个方程式常常用来把传感器读取到的原始值转换成摄式()温度值:=(7 8 5-原始数值)/8 根据下面这个公式可以将摄氏温度转换成华氏温度:=9/5+3 2 4.6 传感器的使用技巧和窍门 不久你就会发现,在一个特殊的项目中,可能会没有合适的传感器可以使用。例如,你需要三个触动传感器,而你却只有二个,或者你需要一个角度传感器,而你却根本没有。怎么办呢?没有什么办法可以将任何一个传感器变成一个光电传感器或是温度传感器,但触动传感器和角度传感器有时是可以互换的。另外一个问题是,我们每次用R C X 进行搭建时,都会因为端口数量的限制而产生冲突。以后,在本书中我们会摸索一些非乐高的方案去解决这个问题,但现在我们将要讨论的是一些简单的事例,你可以在同一个输入端口上接一个或更多的传感器。机器人课堂2009-4-15Page 11 of 18在以后的章节里,你将会发现一些通用或是经过测试的小窍门,会对你有一定的帮助。4.6.1 模拟一个触动传感器 把一个光电传感器变成一个触动传感器比较容易;实际上你已经知道其解决方法了。首先,搭建一个类似于图4.6 中所示的结构。在默认状态时,传感器前面有一个L E G O 积木。靠杠杆(或者是梁、轴、板等等)的压力在光电传感器的前面移动一个不同颜色的积木,此时程序就会检测到这种变化。用一条橡皮筋将你的元件保持在初始位置。尽可能从外围保护你的光电传感器。通过做一个小的传动装置,将触动传感器转换成一个角度传感器也是可行的,当按下触感时,这个装置至少旋转1/1 6 圈。图4.1 0 所显示的是许多可能用到的方法中的一种。4.6.2 模拟一个角度传感器 在很多情况下都可以选择角度传感器,且所才用的方法是基于计算一个旋转机构产生的单个脉冲的次数。但有个缺点是他们通常无法检测出旋转方向。但这无关紧要,当与马达连结起来以后,你就知道传感器的运动方向。图4.1 0 用角度传感器来模仿触动传感器 图4.1 1 用触动传感器来模仿一个角度传感器 机器人课堂2009-4-15计算从一种颜色到另一种颜色的变化(如图4.1 2)。同样要尽可能的降低来自外界光源的影响。用一个光电传感器模仿一个角度传感器来也并不困难:用不同颜色的小积木做一个旋转的盘,图4.1 1 的组图显示了轴带动凸轮按下触动传感器,其原理就是用一个凸轮或者是其它合适的部件,其旋转时周期性的按下触动传感器。每旋转一次,作一个记号,这种传感器的精确度较低。但可以旋转一次多次按下传感器来提高精度,或者稍微向上调整一下传感器以达到所需的精度。Page 12 of 18 第一个是我们在第三章所提到的极性开关。如图4.1 3 一样连接,当一个触动传感器一样来使用它。每旋转一次,电路接通二次。机器人课堂2009-4-15有两种L E G O 电气元件,尽管它们并非实际的传感器,但它们可以很好的模仿角度传感器的应用。它们并不包括在M I N D S T R O M S k i t 中,但它们并不难找到。图4.1 2 用光电传感器来模仿角度传感器 图4.1 3 用极性开关来模拟一个角度传感器 注意:当用极性开关来模拟一个角度传感器时,由于磨擦系数太高,极性开关不能象真正的角度传感器那样自由的旋转。第二种就是光纤(F O S)系统装置(如图4.1 4)。主要是作为一个装饰,当有电源提供时,会发射红色光线,通过旋转它,你可以定位8 个小孔中其中一个小孔.尽管其应用原始,作为一个角度传感器,它的用途是令人惊讶的。尽可能直接把它连接到R C X 的输入端口上并作为一个光电传感器一样来进行设置;缓慢的旋转它并在显示屏上查看其值。从7 0%变化到2%,然后又回到7 0%,可以计算出每转动一次值变化1 6.然而,方法与原始的角度传感器相类似。它有一个低磨擦商数,可以看成是一个理想的替代品。图4.1 4 光纤系统装置 Page 13 of 18 4.6.3 在同一个端口上连接多个传感器 在许多特殊情况下,在同一个端口连接多个传感器是可行的,对你的设备也是安全的。例如,触动传感器用并联结构可以很简单的把它们联接在一起,也就是说,它们中的一个被按下,就产生O N 状态,实现方法也比较容易.只需把所有传感器连接到同一端口。你不用明白哪一个被按下,但你可以根据已有的因素推断出这些信息。例如,有一个机器人的前后部都有一个缓冲器,你可以把两个开关连接到同一个端口上。当有一个缓冲器被按下时,你的程序就会知道应该是向前还是向后,然此它能正确的解释这些信息和动作。还有一个例子,或许你的移动机器人有一个手臂,在特定位置它需要一个限位开关去停止动作。如果在触发手臂时机器人静止的,你可以让限位开关和机器人的缓冲器的开关线安全的使用同一个端口。用串联结构的方式来合并两个传感器稍微有点复杂。T o m S c h u m m 拿出了如图4.1 5 所示的解决方法。只有当你同时把两上触动传感器都按下去时,才可以得到O N 状态。虽然这是一个难以想象的方法,你或许会需要一个这样的合并。图4.1 5 用串联结构连接两传感器 其它的传感器(如光电,角度和温度)如果同时接在同一个端口上,不能很好的工作。如果它们中的相同的或者不同的传感器连在一起使用,你所得到的结果会是无法预测的。但有一个例外:你可以把光电传感器和触动传感器连接在同一个端口上(只适用于配置光电传感器)。这个窍门是由B r i a n S t o r m o n t 提供的,实际上,光电传感器所读取的值不会超过9 0,当角度传感器被按下时,读取的数值就会跳过1 0 0,这样就允许程序去检测这个事件。唯一的缺点是当触动传感器被按下时,你无法读取其光值。但触动传感器接受短脉冲的情况下,通过使用这个小窍门,你可以隐藏其中一个输入端口。4.7 其它传感器 在乐高家族中还有多种传感器,但我们在此不作过多讨论,因为要么它们不太容易学,用途大也不大。C y b e r m a s t e r 套装包括3 个触动传感器,与M I N D S T O R M S 提供的触动传感器相似。不过,机器人课堂2009-4-15Page 14 of 18本套装中提供的3 个传感器的按钮颜色不同,所以易于识别(图4.1 6)。且这些传感器的外壳是透明的,可以看到其内部的机械结构,可以看到其内部电阻上标的数值。由于其原始数值不同,其反馈回的读数也不同,也就是说,我们可以将这些传感器连接到同一端口,根据读数不同,来确定哪个传感器被触发。图4.1 6 所示为C y b e r m a s t e r 套装里的3 种触动传感器 L E G O D A C T A 系列产品中另有其他类型的传感器,如用于测量天气状况(如湿度)或其他特殊变量。这些传感器不是通用传感器,价格也较高。很多人开发了自己的传感器,如果你想为系统添加其他非乐高部件,这些传感器会非常有用,我们将在第9 章中讨论这个问题。如果希望进一步了解L E G O(和非乐高)传感器的工作原理,请参阅附录A,强烈推荐M i c h a e l G a s p e r i 的网站。M i c h a e l G a s p e r i 是这方面的权威,有很多独到的发现,他将自己的发现及从其他爱好者那里收集到的有用的信息都公布在他的网站上。小结 本章主要介绍了乐高传感器家族-4 种基本传感器:触动、光电、角度与温度传感器。这些传感器的基本用途显而易见,但是,如果想完全了解,就要仔细研究。例如,触动传感器看似简单,但在你的小发明中,触动传感器可以完成许多重要的工作,如作为计数器或缓冲器。前面已经介绍的光电传感器,是极为通用的硬件。在制作中可以代替触动传感器或角度传感器,配合I R L E D 或R C X,可以用于检测环境,使你的机器人不需要碰到障碍物就可以避开。本书的很多复杂项目中都使用了角度传感器,现在你已经了解了它的工作原理,也知道了如果手头没有角度传感器,可以用什么方式实现它的功能。到目前为止,我们很少关注温度传感器,一则是因为它的应用范围所限,另外,我们将在第二部分后面详细介绍它。这是机器人套装里面的最后一个传感器。这是一个可选传感器,它不在机器套装里面提供,但是你可以很容易的通过L E G O 在线购物或是家庭购物得到。我们说,它只是一个传感器,你可以不用到它。尽管它可以为您带来一些乐趣,当你的饮料太热或是太凉时,机器人可以提示你。温度传感器没有可以活动的部分,只是一个圆形的小铝筒(图4.9)。根据你在程序中所使用的图标,你可以获取到摄式温度和华氏温度。它可以测量-2 0 至7 0 之间的温度值(-4 至1 5 8),但是从一个值变到另一个值,刷新率会有点慢。所以,如果你想用它来进行温差变化比较快的实验,它不是一个最好的设备。机器人课堂2009-4-15Page 15 of 18 图4.9 温度传感器 注意:乐高传感器有两种:有源传感器和无源传感器。无源传感器,简而言之,也就是它并不需要外界电源就可以工作。触动传感器和温度传感器属于无源传感器。而角度传感器和光电传感器则属于有源传感器。你是否想知道有源传感器是如何通过一条导线输出电源并将数据返回R C X 的呢?答案是输出电源(大约3 秒)和读取数值(大约1 秒)是一个周期。下面这个方程式常常用来把传感器读取到的原始值转换成摄式()温度值:=(7 8 5-原始数值)/8 根据下面这个公式可以将摄氏温度转换成华氏温度:=9/5+3 2 4.6 传感器的使用技巧和窍门 不久你就会发现,在一个特殊的项目中,可能会没有合适的传感器可以使用。例如,你需要三个触动传感器,而你却只有二个,或者你需要一个角度传感器,而你却根本没有。怎么办呢?没有什么办法可以将任何一个传感器变成一个光电传感器或是温度传感器,但触动传感器和角度传感器有时是可以互换的。另外一个问题是,我们每次用R C X 进行搭建时,都会因为端口数量的限制而产生冲突。以后,在本书中我们会摸索一些非乐高的方案去解决这个问题,但现在我们将要讨论的是一些简单的事例,你可以在同一个输入端口上接一个或更多的传感器。在以后的章节里,你将会发现一些通用或是经过测试的小窍门,会对你有一定的帮助。4.6.1 模拟一个触动传感器 把一个光电传感器变成一个触动传感器比较容易;实际上你已经知道其解决方法了。首先,搭建一个类似于图4.6 中所示的结构。在默认状态时,传感器前面有一个L E G O 积木。靠杠杆(或者是梁、轴、板等等)的压力在光电传感器的前面移动一个不同颜色的积木,此时程序就会检测到这种变