只需要一个数采卡就可以了,有PXI、PCI总线的,用USB接口比较方便,比如NI 9234,如果要精确的话,可以在数采卡前段接一个信号调理箱,用labview编写采集程序,或者用NI自带的MAX采集~
红外线光电传感器(光电开关),是利用物体对近红外线光束的反射原理,由同步回路感应反射回来的光,据其强弱来检测物体的存在与否,光电传感器首先发出红外线光束到达或透过目标物体,物体或镜面对红外线光束进行反射,光电传感器接收反射回来的光束,根据光束的强弱判断物体的存在。红外光电开关的种类很多,有镜反射式、漫反射式、槽式、对射式和光纤式等。
常见的红外线光电开关有对射式和反射式两种,反射式光电开关是利用物体对光电开关发射出的红外线反射回去,由光电开关接收,从而判断是否有物体存在。如有物体存在,光电开关接收到红外线,其触点动作,否则其触点复位。
对射式光电开关是由分离的发射器和接收器组成。当无遮挡物时,接收器接收到发射器发出的红外线,其触点动作;当有物体挡住时,接收器便接收不到红外线,其触点复位。
光电开关和接近开关的用途如今已远超出一般行程控制和限位保护,可应用于高速计数、测速、液面控制、检测物体的存在、检测零件尺寸等许多场合。
楼主你这里的光电开关又叫光电对管(一个红外发射管和一个基极内接的感光三极管) 因为这是循迹小车我选用rpr220,我以上传电路图
我补充一句光电耦合器原理也类似光电对管只不过把发光管和感光管镶嵌在内部,而且值得注意的是光电耦合器规格只有多少电压的,我没有听说有多少电流的,要用光耦还不如用三极管更直接。其实不推荐使用光耦做驱动,我的电路就是使用l298n驱动12v电机
顺便说一下,电路图里有一个电机接一个电容主要是针对电机调速,而我的电机灵敏度不好,加一个电容起缓冲作用,而l298芯片的电路典型法中没有。
我最近做了个循迹小车结题报告如下。。。
其实是否用光电隔离取决于你驱动的电机的电流大小如果电流不到1安不用光电耦合也行。。。光耦驱动好像不行,不太稳定
测速用码盘的话最好做的越密越好,否则实际运行中轮子会晃动等等很多原因使结果误差很大,因为一般光电开关都会有聚光器,很小的晃动都能感觉到
循迹小车
制作人:李静
摘要:通过制作小车可以加深对单片机控制的熟练程度,同时初步学习项目开发的过程。
小车按照给定的路线行走,有定时,显示运行时间,计时,粗测行走距离等功能。
一、 设计任务:
1、设计要求
(1)自动寻迹小车开始处于设置模式下,通过按键设置运行时间,完成设置时间后,按下开始键小车启动,同时显示当前运行的时间。
(2)小车按指定路线运行,自动区分直线轨道和弯路轨道,在指定弯路处拐弯,实现灵活前进、转弯等功能。
(3)小车行走在预设的时间后,自动停止,数码管显示行走的时间,3秒后显示行走距离。
(4)中途可以按右键强制停止,提前结束,显示行走时间,距离。
2、小车循迹的原理
这里的循迹是指小车在白色地板上循黑线行走,通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。红外探测器探测距离有限,一般最大不应超过3cm。
二、 方案论证:
根据设计要求,本系统主要由控制器模块、电源模块、寻迹传感器模块、直流电机及其驱动模块、电压比较模块等模块构成。
为较好的实现各模块的功能,我们分别设计了几种方案并分别进行了论证。
31车体设计
方案1:购买玩具电动车。购买的玩具电动车具有组装完整的车架车轮、电机及其驱动电路。但是一般的说来,玩具电动车具有如下缺点:首先,这种玩具电动车由于装配紧凑,使得各种所需传感器的安装十分不方便。其次,这种电动车一般都是前轮转向后轮驱动,不能适应该题目的方格地图,不能方便迅速的实现原地保持坐标转90度甚至180度的弯角。再次,玩具电动车的电机多为玩具直流电机,力矩小,空载转速快,负载性能差,不易调速。而且这种电动车一般都价格不菲。因此我们放弃了此方案。
方案2:自己制作电动车。经过反复考虑论证,我们制定了左右两轮分别驱动,前万向轮转向的方案。即左右轮分别用两个转速和力矩基本相同的直流电机进行驱动,车体首部装一个万向轮。由此可以轻松的实现小车坐标不变的90度转弯。
在安装时我们保证两个驱动电机同轴。当小车前进时,左右两驱动轮与前万向轮形成了三点结构。这种结构使得小车在前进时比较平稳,可以避免出现后轮过低而使左右两驱动轮驱动力不够的情况。为了防止小车重心的偏移,前万向轮起支撑作用。
对于车架材料的选择,我们经过比较选择了铝合金。用有铝合金做的车架比塑料车架更加牢固,比铁制小车更轻便,美观。
32控制器模块
方案1:采用stc宏晶公司的stc89c52单片机作为主控制器。stc89c5是一个低功耗,高可靠性,超低价,无法解密,高性能的8位单片机,片内含32k空间的可反复擦写100,000次的Flash只读存储器, 32个IO口,且stc系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。
从方便使用的角度考虑,我们选择了此方案。
33电源模块
方案1:采用12V蓄电池为直流电机供电,将12V电压降压、稳压后给单片机系统和其他芯片供电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。虽然蓄电池的体积过于庞大,在小型电动车上使用极为不方便,但由于我们的车体设计时留出了足够的空间,并且蓄电池的价格比较低。因此我们选择了此方案。
综上考虑,我们选择了此方案。
34稳压模块
方案1:用一个7805直接降压,用大散热片。虽然结构,原理简单,但电流过大,使电路不稳定,容易烧坏稳压块我们放弃了此方案。
方案2:直接用两7805把电压直接稳压到5V,理论上由于降压过大容易烧稳压块,用两个7805并联。但两个稳压块出现馈赠问题,后用修改电路解决此问题,我们最后选择了此方案
35寻迹传感器模块
方案1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。
但是这种方案受光照影响很大,不能够稳定的工作。因此我们考虑其他更加稳定的方案。
方案2:用RPR220型光电对管。RPR220是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二极管,而接收器是一个高灵敏度,硅平面光电三极管。
RPR220采用DIP4封装,其具有如下特点:
塑料透镜可以提高灵敏度。
内置可见光过滤器能减小离散光的影响。
体积小,结构紧凑。
当发光二极管发出的光反射回来时,经过lm339电压比较芯片,通过对门限电压进行比较,输出高低电平,通过调整门限电压可以调整传感器单元的灵敏度。此光电对管调理电路简单,工作性能稳定。
因此我们选择了方案2。
36电机模块
本系统为智能电动车,对于电动车来说,其驱动轮的驱动电机的选择就显得十分重要。由于本实验要实现对路径的准确定位和精确测量,我们综合考虑了一下两种方案。
方案1:采用直流减速电机。直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。
因我们用软件对电机调速,实际值要比这小一些
注意:在实际计算时用的是理论值。
能够较好的满足系统的要求,因此我们选择了此方案。
37电机驱动模块
方案1:采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动, *** 作方便,稳定性好,性能优良。
方案2:对于直流电机用分立元件构成驱动电路。由分立元件构成电机驱动电路,结构简单,价格低廉,在实际应用中应用广泛。但是这种电路工作性能不够稳定。
因此我们选用了方案1。
三、 分析与计算:
1、传感器模块的设计
因此我们考虑用比较器的方案。
在图中,可调电阻RV1可以调节比较器的门限电压,而且经试验验证给此电路供电的电池的压降较小。因此我们选择此电路作为我们的传感器检测与调理电路。
2、寻迹光电对管的安装
考虑到设计要求,本次设计仅用4对光电传感器就能完成设计要求,采用直线型排列,中间2对传感器用来校正小车的寻迹路线,保证小车运行的直线性。两侧的传感器用来检测小车过线,可以实现小车的转弯。
4、电机驱动电路的设计
我们采用电机驱动芯片L298N作为电机驱动,驱动电路的设计如图7所示:
L298N的5、7、10、12四个引脚接到单片机上,通过对单片机的编程就可以实现两个直流电机的PWM调速以及正反转等功能。这里的二极管作用是释放电机线圈的自感电能
电容c3起缓冲作用,经过试验在调速时下方的电机接收的是一个高脉冲的电流,由于直流电机灵敏性不是很好,我们也考虑用周期长的脉冲,但由于扫描数码管就会慢,数码管就会出现颤动。综合考虑,我们选择接电容起缓冲作用。
4、测量距离设计
我们采用用一个光电对管感应轮子黑白条来算出轮子转动的角度间接测出行走的距离。
在实际中会出现轮子打滑现象,黑白纸带表面不光滑,不平整,轮子轴不牢固,内外摇晃,由于rpr220有聚光器即使非常小的变化都会有反应。通过实际测试传感器发出的信号要比理论大的多,在电池电量过低时,这种现象会更加不准,无规律可循(有时候大,有时候小)。即使在电量足的情况下也有很大误差,超过一定距离,结果已经没有意义,所以我们限定最大估测距离在6米左右,因此此设计为粗测距离。
四、 总电路图及元器件清单
经过反复论证,我们最终确定了如下方案:
(1)车体用铝合金车架手工制作。
(2)采用stc89c52单片机作为主控制器。
(3)用12V蓄电池为直流电机供电,将12V电压经两个7805(带大散热片)并联降压、稳压后为单片机系统和其他芯片供电。
(4)用RPR220型光电对管进行寻迹。
(5)L298N作为直流电机的驱动芯片。
五、 软件实现
31主程序流程图
我们所设计的软件的主程序流程图如图所示:
六、 测试:
七、 创新点
本作品改进了lm339电压比较器接控制门限电压的电阻的方式,没有采用接4个变阻器,用的是统一接一个变阻器,这样方便调整灵敏度。在光电对管传感器电路上也有改变,直接把发射极和集电极接在5V电源上,这样可以使电流更大,试验证明当接通时电流不足以烧坏三极管。
直流并联了电容,电容c3起缓冲作用,经过试验在调速时下方的电机接收的是一个高脉冲的电流,由于直流电机灵敏性不是很好,我们也考虑用周期长的脉冲,但由于扫描数码管也会慢,数码管就会出现颤动,我们同时考虑用时钟中断扫描刷新数码管,但那样使中断频繁发生(大约50ms)而且数码管刷新一次用时也会很长(大约24ms),造成中断过长,那样会大大加大整个循环周期,基本看不到数码管显示连续的数。综合考虑,我们选择接电容起缓冲作用。
八、 心得体会
P0 要想用做io口时必须加上拉电阻,即使用上拉电阻驱动能力也不怎么好。本作品用共阴数码管,驱动电路设计比较复杂,数字不够亮,最好用共阳数码管,加上三极管驱动可能效果会好一些。
由于单片机高频的对数码管进行扫描,在程序设计的时候就要求主程序的周期不能过长,这对于我们小车执行寻迹,调速,定时,计时,测距,转弯等功能的程序要求是非常高的,经过我综合考虑后决定主函数只有刷新数码管和探测黑线的功能剩下的所有功能都用中断处理,同时要求产生的中断时间不能过长。这些就造就了我的程序到目前为止已经有350行的长度。
我们最初设计精确测量距离,但误差不可避免,由于硬件的局限性,尊重事实,我们降低了标准。以后可以在此改进,扩展。
在整个测试阶段我们充分考虑程序功能的连续性和兼容性,由于89c52单片机速度的局限,同时程序需要实时对数码管高速的刷新频率我们不能设计车太高的速度。经过反复测试综合考虑我们采用目前的方案
九、 结束语
我们的寻迹小车在完成设计要求的前提下,充分考虑到了外观、成本等问题,在性能和价格之间作了比较好的平衡。由于设计要求并不复杂,我们没有在电路中增加冗余的功能。
由于作者水平的有限,部分观点存在错误,希望指正,指教,对此表示感谢。
特别感谢:
张洪军老师和实验室老师的指导,及接伟权,张新涛,黄绍军等学长的建议和指教,还有陈振宇,吴旷和全组成员,没有你们就没有我们今天。
2010年5 月
李静
程序片段
/
数码管刷新函数
/
void display(uchar qw,uchar bw,uchar sw,uchar gw)//显示函数
{
P2=0xe0;
P1=tabledu[qw];
delay(6);
P2=0xd0;
P1=tabledu[bw];
delay(6);
P2=0xb0;
P1=tabledu[sw];
delay(6);
P2=0x70;
P1=tabledu[gw];
delay(6);
P2=0x0f;//
}
/
任务初始化函数
/
void init0()任务1初始化函数
{
EA=1;
EX0=1;
EX1=1;
IT1=IT0=1;
P0=0x00;
flag=1;
jishu=0;//
}
void init()//任务2初始化函数
{
EA=1;
TH0=(65536-50000)/256;//初始化加1计数器
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
TH1=(65536-50000)/256;//初始化加1计数器
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
TMOD=0x11;
dsh=(qw10+bw)60;//
jishu=1;//
}
void jiesu()
{
if(flag2==0)
{
flag1=1;
flag2=1;
cnt1=0;
}
ET0=0;
P0=0;
display(qw,bw,sw,gw);
}
只能用带PSD位置感应器的光电开关,为什么呢,因为它不受到被检测物体颜色材质影响,只是根据物体的距离不同而检测,当然你必须要测量之前先进行距离的设定。现在基本的传感器厂商都有这样的开关,选日本的比较好
乐高教程:
n 触动传感器
n 光电传感器
n 角度传感器
n 温度传感器
n 传感器的使用方法与技巧
n 其他传感器
41简介
马达通过齿轮和滑轮传动,可以让你搭建的机器人动起来,他们就如同是移动机器人腿和手臂的肌肉。同时,你还可以使用传感器来装备你的机器人,它们就如同是机器人的眼睛、耳朵和手指。
机器人套装中包含两种传感器:触动传感器(两种)和光电传感器。在本章中,我们主要是描述它们的特性,对于其它的传感器你可以单独购买,如:角度传感器和温度传感器。每一个设备都有其特定的作用,你将会因为它们的功能强大和所能涉及的范围之广而感到惊讶。当然也包括这种情况,可以用一种传感器仿效另一种传感器,以用来代替不能使用的传感器。利用RCX上的红外光电,使用一些小技巧,你可以把把你的光电传感器变成一个雷达。
在阅读本章的过程中,我们希望你能把机器人套装放在身边,这样你可以跟随我们的例子亲自动手去做。为了保持其完整性,我们还会讲一些机器人套装的扩展套装和技术套装的内容。若你现在还没有这些也不要担心,这不会影响到你搭建体积较大的机器人。
42触动传感器
触动传感器(图41)是乐高传感器大家庭中最简单、最直观的一种。它的工作方式非常像是你家门铃上的按钮:当它被按下时,电路接通,电流就会通过,RCX就能够检测到这个数据流,你的程序就会读取触动传感器的当前状态:开或者关。
图41 触动传感器
如果你已经开始使用机器人套装,阅读了Constructopedia,并搭建了一些模型,你可能对传感器的一般用途比较熟悉,如缓冲器。缓冲器是与周围环境相互作用的一种简单方式,当你的机器人遇到障碍物时,可以用它们来进行检测,并由此而改变运动状态。
典型的缓冲器是一个重量较轻的可移动装置,事实上,当它碰到障碍物时会把冲击力传递给触动传感器并使之关闭。你也可以发明出很多种缓冲器,但它们的外形应该能够反映机器人的外形,而且还能反映出环境中障碍物的外形。如图42中所示一个非常简单的缓冲器,可以很容易发现墙壁,假如房间里有像椅子一样等复杂障碍物,它的效果就不好了。在这种情况下,我们建议你通过实验来进行。为机器人设计一个缓冲器,在房间的周围离地板适当高度的地方移动它,检查它是否能够发现所有可能的碰撞点。如果你的缓冲结构较大,当它用最佳部位撞击到障碍物并按下触动传感器时,不要以为这就是正确的。图例42是一个不太好的缓冲器,因为当碰撞发生时,它几乎不能用横轴的边缘来关闭触动传感器,说它是一个不好的缓冲器是因为它把整个碰撞产生的力直线传输给了传感器,也就是说,在机器人身上安装一个非常稳固的支架对传感器的安装是非常有必要的。
图42简单的缓冲器
根据经验,应该尝试不同的碰撞来看看缓冲器在各个位置是否能很好的工作。你可以编写一个无限循环的小程序,当传感器被按下时,发出一声蜂鸣声用来测试你的缓冲器。
谈起缓冲器,人们往往会想到当遇到障碍物时开关会被按下。这样说似乎有点绝对,在发生碰撞的时候同样可以松开开关。看一下图43,橡胶皮筋可以使积木轻压着传感器,当缓冲器的前面部分接触到物体时,开关就会被释放。
图43 平常压下的缓冲器
实际上,向你推荐这种缓冲器有这样几个重要的原因:
l 冲击力不可能直接传递给传感器,传感器与标准的乐高积木相比更容易受损坏,因此应避免不必要的撞击。
l 橡皮圈可以吸收撞击力,这对你的传感器和机器人来说都会起到保护作用,当你的机器人速度非常快,或者重量大,或者反应比较慢,或者具备其中的一个因素时,这种保护作用显得尤其重要。
缓冲器是一个非常重要的装置,而且触动传感器的应用也非常广泛。当你想告之RCX一个事件发生时,你可以使用按钮一样人为的把它按下去。你能想象出类似的情况吗?事实上,有很多。比方说,你可以按下铵钮告诉RCX”现在读取光电传感器的值”,从而进行读取校准(我们将在以后的部分进行讨论)。
另一个常用的作用就是把触动传感器作为一个位置控制器来用。如图44,机器人向前看时(图44b)就关闭了头部(图44a)的触动传感器。通过编程可以在水平面上实时的控制头部的旋转(向左或向右),当传感器被按下时,机器人的头部就能转回到正确的位置,值的注意的是,我们在这个例子中用到的凸齿轮在与触动传感器相配合时是非常的有用,你可以让轴通过三个十字孔个中的一个来选择合适的距离去关闭触动传感器。
图44 用触动传感器定位
在本书的第三部分我们还会介绍位置控制的其它一些应用。事实上,在搭建你的机器人之前需要你去研究一些不同的方法。
我们再举几个事例来说明传感器的应用。假如你想搭建一个电梯。你希望电梯可以在任何一层都能停下。首先你会想到在每一层安放一个触动传感器,当按下其中一个时,电梯室会在那一层停下。这是一个好方法,但这里有一个小问题;你仅有两个触动传感器,对你来说,一个电梯仅有二层不是非常实际,你可以再买一个触动传感器,但这只能再加高一层,并没有解决实质性的问题。此时,RCX的三个输入端口已经全部被占用。突然,你会想到一个办法:为什么不把传感器放在电梯厢上而不是外面呢?在电梯厢上固定一个传感器,这样只需一个传感器就可以加高更多的楼层了。从最初的方案到现在更好的方案,两个系统是完全相同的吗?答案是否定的。首先,你需要决定厢的绝对位置,当它在第二层时,你仅是可以知道它的相对位置。那么,你需要一个初始点,从起始点开始计算就可以推断出厢的位置或者程序运行时,需要厢体在一个特定的位置,或者用第二个传感器来探测一个特定的楼层。例如,在最底层放置一个传感器,因此程序一开始就降下电梯到最底层。那样就可以计算出厢体的绝对位置了。
现在,电梯就能够准确的升降了。但你还有最后一个问题需要解决:如何告诉你的电梯它应该去哪一层呢?在每一楼层放置一个传感器去提示电梯是不切合实际的。在RCX上只剩下一个输入端口了。你要用这一个触动传感器来做什么呢?你还可以采用以前的方法吗?可以,你可以计算一个触动传感器被按下的次数。比如说,被按下三次表示是三楼,依次类推。现在你就可以去搭建你的电梯了。
方法与技巧
计算按下次数
下面这个例子是用伪代码来编写的,一个代码并不与实际编写语言相对应,而是界于程序语言和机器语言之间。使用伪代码编程在专业程序员中是一种非常普遍的做法。
计算触动传感器被按下多少次需要一些小窃门。假如你写了一些简单的代码,如下:
Counter =0
repeat
if Sensor1 is on then
Counter = Counter +1
end if
end repeat
当你保持触动传感器被按下很短的间隔内,你的程序代码就会在你的RCX上飞快的执行。然而,在记录下一个新的按下之前,需要松开触动传感器:
Counter = 0
repeat
if Sensor1 is on then
Counter =Counter+1
wait until Sensor1 is off
end if
end repeat
现在,你编写的代码正确地记录了从断开到闭合的变化。在你的代码中,有一个重要的特点需要介绍一下:当它在一段时间内接收不到触动信息时,你希望你的计数程序停止。为了实现这一点,你需要使用一个计时器用来测量上一次按下时间与最后一次时间的间隔:
Counter=0
interval = <a proper valve>
reset Timer
repeat
if Sensor1 is on then
Counter = Counter + 1
wait until Sensor1 is off
or until Timer if greater then Interval
reset Timer
end if
until Timer is greater then Interval
假如你的时间间隔是两秒。当计数程序开始时,计时器和计数器首先复位为0,然后开始检测传感器的状态。如果两秒内没有按下触动传感器,它仍将保持复位状态,如果有触动传感器被按下,此动作将被记下并等待使用者释放按钮,计时器复位为零, 在程序停止运行之前,使用者可以在两秒内第二次按下触动传感器。
43光电传感器
用”看”来形容光电传感器的功能有点夸大其辞。实际上它只是用来检测光并测量其强度。尽管受到限制,但其应用范围仍比较广。
图45 光电传感器
光电传感器和触动传感器的最大区别是,后者返回的是一些数值而不是单纯的开/关状态。你所读到的数值由光电传感器在那个时候所检测到的光强所决定。这些数值以0至100的百分数的形式返回,光值越大,百分数就越大。你可以用光电传感器来做什么呢?你可以用它搭建一个由光电传感器所驱动的机器人,我们称之为光的追随者,它可以检测周围的环境,找到一个强光源(或者是最亮的)并朝着它前进。在一间足够暗的房间里进行,以免产生干扰,你也可以用手电筒来控制你的机器人。
检测外部光源的功能是非常有趣的,但是或许你不能用它来做最令人惊奇的事情。我们介绍一下光电传感器的另一个用途:它不但可以用来检测光强,而且还可以自身发光。提供稳定光源的是一个红色的发光二极管,因此你可以用来测量反射光并传给传感器。
当你用来测量反射光时,你必须去避免一些来自其它光源的干扰。需要注意的是光电传感器对IR所发出的光也非常敏感,像典型的远距离控制器发出的红外光,如摄像机;或者是乐高红外发射器。
设计与计划
读取周围的光值
乐高光电传感器并不适合于测量外部光源来说,因为其灵敏度比较弱。红色发光二极管所所发出的光太靠近检光器以致于过多的影响了光值的读取。如果你想测外部光源,你应该考虑尽可能的去减少红色发光二极管的影响。一个简单的办法就是在光电传感器的前部放一个1×2的单孔积木块,更多的行之有效的办法需要你对光电传感器有些细微的改动。在Ralph Hempel的网站中,他提到了如何对光电传感器作修改,既不是永久的改变也不会损害你的光电传感器。(见附录A)
光在表面的反射率取决于许多因素,主要是表面的颜色,质地和它距光源的远近。黑色物体的反射能力要弱于白色物体;黑色光滑表面的反射能力要强于黑色不光滑表面。另外,距离光电传感器越远,光电传感器所检测到的反射光就会越少。
这些因素都是相互依赖的,通过光感读取的值,并不能说明是由哪个因素引起的。但你可以保持其它因素不便,而让一个变化,这样就可以通过读取的数值来推断出环境的一些变化。例如,如果你的光电传感器经常对着同一个物体,或者相同质地和颜色的物体,你能够用它去测出它的相对距离。另一方面,你可以把不同的物体放置在光电传感器的前面,在恒定的距离内分辨出它们的颜色。
431测量反射光值
为了举例说明测量反射光的原理,我们来做一个实验。拿一个RCX并打开其电源,在任意一个输入端口连接一个光电传感器,在你的程序中正确的设置其端口(红色发光二极管应该发光)。准备一间光线较暗的房间,RCX有个控制模式,可以实时查看光感读取的值。按RCX上的VIEW键,当小箭头正确显示在传感器所接的输入端口位置。在显示屏上会显示出读取的光线值。接下去你把光感放到桌上,在桌上以一定间隔(05cm,1cm,15cm)并排放置不同颜色的积木块,保证积木之间的间距相等。查看数据,得到的是不同颜色的积木反射的光值是不同的。
再进行第二个实验:将白色的积木快慢慢的移向光感,然后再慢慢的移开,观察显示屏上的数据,可以发现当光感与积木间的距离加大时数值将减小。我们的目的就是为了证明光感是不能同时判断出距离和颜色的。我们重点强调在你使用光感时尽量避免外界光线的干扰。
方法与技巧
理解原始值的概念
了解原始值是很关键的,对于熟练的使用机器人套装并不是必须的。但从另一个方面讲,它可以帮助你理解传感器是如何工作的。
RCX把来自传感器(不管是什么类型)的电信号全部转变成范围在0至1023之间的数字信号,我们称之为原始数值。在程序中,你在一个端口上设置了一个特定的传感器,RCX会自动设定该传感器的原始数值范围,例如,从触动传感器读取的数值范围是1或者0,代表开或者关,当从温度传感器读取时就会转变成摄氏温度或华氏温度。同样地,光电传感器读取时就会通过下面的方程式转换成一个百分数:
百分数=146-原始数值/7
为什么我们需要知道这种转换呢?对于大多数应用程序来说,通过RCX返回的光感值的百分数形式更加有效,但也有这种情况,你需要所有光感变化值而百分数形式却不能体现出光感值的一些变化。我们用一个例子来做一下说明。假设会有两种不同的情形,光电传感器读取707和713两个不同的数值。把这两个数值转换成百分数,因为RCX只使用整数,需要将除的结果进行圆整。
146-(707/7)=146-101=45
146-(713/7)=146-101=45
在第二个方程式中数值101实际上是101857…,去掉小数部分为101就看部不出两个值是不同的。我们知道在大多情况下数值的小数部分是不重要的。但也会有其它情况需要用到这样一个微小的变化的数据
如果你用LEGO图形化的编程环境为RCX编写程序,你必须接受它的刻度值,否则无法处理原始数值。如果你选择其它的编程语言,则可以直接处理没有处理过的原始数值,在必须的时候,利用其优势,可能会有更好的解决方案。
识别不同的颜色是光电传感器一个非常普通的应用。我们曾说过,光电传感器实际上并不是用来识别颜色的,而是用来读取反射光值。因此,它很难把黑色和蓝色的积木块区别开。但目前来说,我们仍说它能识别颜色,在读完之后您会明白真正的意思是什么。
432沿线走
目前,光电传感器最普遍的使用方法就是用它搭建一个沿线走的机器人。
这个项目的设置是很简单的,这也是之所以流行的一个原因。尽管其外观简单,这项工作仍需要引起足够的重视,并需要你仔细设计和认真编程。我们将在第二部分详细的讨论这个主题的细节内容。当光电传感器在轻质地面上读取一条黑线时,你要注意有什么事情发生。
当把光电传感器放在地板上时,假设说读取的数值为百分之七十,黑线为百分之三十。如果你想让机器人缓慢的从地板移动到黑线或者是有污点的地方你会注意到,数值不是从一个值突然跳到另一个值,而是会出现一系列的中间值。原因是光电传感器不是读取一个点,而是光电传感器前部的一个小区域。所以当光电传感器穿过线的边缘时,它所读取的是地板和黑线的边界值并返回一个中间值。
这个功能有用吗?当然,有时有用,有时没有用。尤其当我们涉及到沿线走时,它是有用的。实际上,你可以(或者说应该)编写一段程序让你的机器人沿着边界走而不是实际的黑线。这样当机器人需要改变它的行进路线时,它知道往哪个方向转身:如果所读取的值太”暗”,它应该向亮的区域前进,或有污点的区域。
技巧与提示
校准读取值
有时,你并不能预先知道光电传感器实际上所读取的数值是多少。假如你要参加一个沿线走的比赛:你并不能确定你的传感器所返回的地板和黑线的数值。在这种情况下,一般的习惯是,在你的程序中不写入预期的常数值是比较好的。但可以让你的机器人通过一个简单的测量程序来读取这些数值。继续我们沿线走的例子,你可以专设一个空的输入端口用来接入一个触动传感器,当你把机器人放在地板上时手动按下触动传感器,然后再放在黑线上,因此它就可以保存下读取到的最大值和最小值。或者你可以编写一个小的检测程序,以取消那些限制。
当你需要控制一个更复杂的区域时,举例来说,区域包括三种不同的颜色, 想象一个台面被划为白色,黑色和灰色三个不同颜色的区域。在白色和黑色之间的边界上你如何能区别出灰色区域 这时你不能只做一个简单的读取,你必须深入考虑其它的因素, 像预先读取,或者你可以使你的机器人在一个地方收集更多的数据并推断它所在的位置。要处理这样的情况,对软件的要求就会变得更加复杂。
光电传感器如同一个万能器,它有很多种使用方法。你可以在光电传感器的前部放置一个彩色的可以移动的乐高梁来搭建一个对称形状的装置图46就是一个这样的例子。当你推或者拉梁的上部时,光电传感器就会读取不同的光值。
图46 用光电传感器作一个模拟控制
光电传感器与灯相结合(不包括在头脑风暴套装中)可做成一个光电管(图47);当有物体挡在光电传感器和灯之间时,机器人就会察觉。值得注意的是,我们在光电传感器的前面放置了一个1×2的单孔梁,以减少来自周围光线的干扰。
图47 光电管
433接近探测
你可以用光电传感器做成一个雷达探测器用于检测即将碰到的障碍物。这被称之为接近探测。这项技术所基于的特性我们已经讨论并探究过了,就是光电传感器可以根据反射光线来测定相对距离。假如你的机器人要直线前进,用一个光电传感器为它在前面引路。假如你的机器人要在一个暗室里移动,除了光电传感器上的红色发光二极管之外没有任何的光源。在向前移动的过程中,机器人连续不断的读取传感器所检测到的光值。如果读取值趋向于迅速增大,就可以推断出机器人正向着一个物体前进。但不能推断出障碍物的种类及与障碍物之间的距离,如果房间内没有物体在移动,你确信机器人正在接近障碍物。现在我们有了一套系统可以躲避障碍物而不是局限于碰撞以后再检测它们。
注意:
RCX内部的IR LED发射的是不可见光,光电传感器的红色二极管发射的是可见光。
遗憾地是,当房间内有光源时,这项技术工作就有问题了,原因是你的程序不能区别自身反射回的红色光还外界环境光线。你需要在机器人身上有一个更明显的独立光源提供更高的参考。
令人欣慰的是,正好有一个!RCX内部有一个IR LED可以发射信息给红外发射仪或是另一个RCX。用RCX内部的IR LED以比特的编码形式发送信息可以被红外发射器所接收到。关于信息的内容我们并不关心;我们需要的仅仅是光。尽管红外光对于肉眼来说是不可见的,却与可见光具有相同的性质,LEGO光电传感器对此却非常敏感。
所以,现在你的程序有了使用接近探测的所有条件。发送一个IR信息并立即读取光电传感器的值你最好把读取的数值进行一下平均处理,这样可以把外部光源所导致的影响降至最低(我们将会第12节讨论这个窍门)。如果你注意到在随后的二组值中有显著的增加,举例来说,百分之十,说明你的机器人很有可能正朝着障碍物前进。
44角度传感器
我们将要研究的第三个乐高传感器是角度传感器(图48)。遗可是机器人套装中没有包含该部件,它的多功能性仅次于光电传感器。在3801 Ultimate Accessory套装里面包含一个角度传感器,还有一个触动传感器,一个灯,遥控器 和少量的其它附件。
图48 角度传感器
方法与技巧
角度传感器是如何工作的呢?
因为角度传感器有四种不同的状态,所以会返回四种不同的值。我们称之为A,B,C和D。对于每一次完整的旋转,它经过了四种状态各四次—这也就是我们为什么要用十六来计数的原因。如果角度传感器是顺时针旋转,它会读序列ABCD…,如果是逆时针旋转,读取的结果会是ADCBA…,RCX会时刻检测传感器,当RCX检测到状态发生变化时,它不但可以推断出角度传感器已经转动,而且还可以知道所旋转的方向。举例来说,从A转变到B,或从D转变到A,计数器将增加一个单位,然而,从D到C,或者是从A到D,计数器将减少一个单位。
角度传感器,顾名思义,是用来检测角度的。它的身体中有一个孔,可以配合乐高的轴。当连结到RCX上时,轴每转过1/16圈,角度传感器就会计数一次。往一个方向转动时,计数增加,转动方向改变时,计数减少。计数与角度传感器的初始位置有关。当初始化角度传感器时,它的计数值被设置为0,如果需要,你可以用编程把它重新复位。
通过计算旋转的角度,你可以很容易的测出位置和速度。当在机器人身上连接上轮子(或通过齿轮传动来移动机器人)时,可以依据旋转的角度和轮子圆周数来推断机器人移动的距离。然后就可以把距离转换成速度,你也可以用它除以所用时间。实际上,计算距离的基本方程式为:
距离=速度×时间
由此可以得到:
速度=距离/时间
如果把角度传感器连接到马达和轮子之间的任何一根传动轴上,必须将正确的传动比算入所读的数据。举一个有关计算的例子。在你的机器人身上,马达以3:1的传动比与主轮连接。角度传感器直接连接在马达上。所以它与主动轮的传动比也是3:1。也就是说,角度传感器转三周,主动轮转一周。角度传感器每旋转一周计16个单位,所以163=48个增量相当于主动轮旋转一周。现在,我们需要知道齿轮的圆周来计算行进距离。幸运地是,每一个LEGO齿轮的轮胎上面都会标有自身的直径。我们选择了体积最大的有轴的轮子,直径是816CM(乐高使用的是公制单位),因此它的周长是816×π=816×314≈25622CM。现在已知量都有了:齿轮的运行距离由48除角度所记录的增量然后再乘以256。我们总结一下。称R为角度传感器的分辨率(每旋转一周计数值),G是角度传感器和齿轮之间的传动比率。我们定义I为轮子旋转一周角度传感器的增量。即:
I=G×R
在例子中,G为3,对于乐高角度传感器来说,R一直为16因此,我们可以得到:
I=3×16=48
每旋转一次,齿轮所经过的距离正是它的周长C,应用这个方程式,利用其直径,你可以得出这个结论。
C=D×π
在我们的例子中:
C=816×314=25622
最后一步是将传感器所记录的数据-S转换成轮子运动的距离-T,使用下面等式:
T=S×C/I
如果光电传感器读取的数值为296,你可以计算出相应的距离:
T=296×25622/48=1580 距离(T)的单位与轮子直径单位是相同的
实际上,在程序不仅仅会用到乘法和除法的数学运算,还有更多的需要多留心(有关内容我们将在第12章进行进一步的讨论)。
使用角度传感器来控制你的轮子可以间接的发现障碍物。原理非常简单:如果马达运转,而齿轮不转,说明你的机器已经被障碍物给挡住了。此技术使用起来非常简单,而且非常有效;唯一要求就是运动的轮子不能在地板上打滑(或者说打滑次数太多),否则你将无法检测到障碍物。如果是一个空转的齿轮连接到马达上就可以避免这个问题,这个轮子不是由马达驱动而是通过装置的运动带动它:在驱动轮旋转的过程中,如果惰轮停止了,说明你碰到障碍物了。
在许多情况下角度传感器是非常有用的:控制手臂,头部和其它可移动部位的位置。值的注意的是,当运行速度太慢或太快时,RCX在精确的检测和计数方面会受到影响。事实上,问题并不是出在RCX身上,而是它的 *** 作系统,如果速度超出了其指定范围,RCX就会丢失一些数据。Steve Baker用实验证明过,转速在每分钟50到300转之间是一个比较合适的范围,在此之内不会有数据丢失的问题。然而,在低于12rpm或超过1400rm的范围内,就会有部分数据出现丢失的问题。而在12rpm至50rpm或者300rpm至1400rpm的范围内时,RCX也偶会出现数据丢失的问题。
这仅仅是一个小小的问题,你可以上下调整传感器来使其处在合适的范围内。
在PLC控制程序设计过程中,经常要对脉冲输入信号或者是点动按钮输入信号进行保持,这时常采用自锁电路。自锁电路的基本形式如图6-16所示。将输入触点(X1)与输出线圈的动合触点(Y1)并联,这样一旦有输入信号(超过一个扫描周期),就能保持(Y1)有输出。要注意的是,自锁电路必须有解锁设计,一般在并联之后采用某一动断触点作为解锁条件。如图6-16中的
以上就是关于如何把光电传感器输出的模拟电信号存入计算机全部的内容,包括:如何把光电传感器输出的模拟电信号存入计算机、tcrt5000红外光电传感器的工作原理是什么,怎样用它来循迹和避障、由光电传感器感应的单片机控制电动机系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)