1、1、概述红外探测传感器由于发出的是红外光,常见光对它的干扰极小,且由于价格便宜,而被广泛应用于智能小车的循线、避障以及其它机器人中物料检测、灰度检测等系统中,图 1 是利用红外光电管做传感器模块。图 1 红外传感器市面上的红外传感器一般有两种,一种是集发射和接收于一体的红外对管,一种是发射管和接收管分立的的红外管,分别如下图 2 和图 3 所示。图 2 发射接收一体的红外对管 图 3 分离的红外传感器2、红外光电管的工作原理上图中,红外光电管有两种,一种是无色透明的 LED,此为发射管,它通电后能够产生人眼不可见红外光,另一部分为黑色的接收部分,它内部的电阻会随着接收到红外光的多少而变化。无论
2、是一体式还是分离式,其检测原理都相同,由于黑色吸光,当红外发射管照射在黑色物体上时反射回来的光就较少,接收管接收到的红外光就较少,表现为电阻大,通过外接电路就可以读出检测的状态;同理,当照射在白色表面时发射的红外线就比较多,表现为接收管的电阻较小,此时通过外接电路就可以读出另外一种状态,如用电平的高低来描述上面两种现象就会出现高低电平之分,也就是会出现所谓的 0 和 1 两种状态,此时再将此送到单片机的 I/O 口,单片机就可以判断是黑白路面,进而完成相应的功能,如循迹、避障等。3、检测电路设计上面介绍了红外光电管检测黑线的基本原理,但光只有红外发射和接收管不行,必须加外部电路才能实现功能,这
3、里我们用到了 LM339。LM339 为内部集成了四路比较器的集成电路。因为内部的四个比较电路完全相同,这里仅以一路比较电路进行举例。如图 4 所示为单路比较器组成的红外检测电路图,比较器有两个输入端和一个输出端,两个输入端一个称为同输入端,用“+”号表示,另一个称为反相输入端,用“”表示。用作比较两个电路时,任意一个输入端加一个固定电压作参考电压(也叫门限电压),另一端则直接接需要比较的信号电压。当“+”端电压高于“”端电压时,输出正电源电压,当“”端电压高于“+”端电压时,输出负电源电压(注意,此处所说的正电源电压和负电源电压是指接比较正负极的电压)。图 4 红外对管循迹电路图下面分 4
4、点说明下该原理图的原理1)、比较器的输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到电源端需要接一只电阻(称为上拉电阻,选 315K)。选用不同阻值的上拉电阻会影响输出端高电位的值,因为当输出晶体管三极管截止时,它的集电极电压基本上取决于上拉电阻的值,一般选 10K 左右比较合适。2)、图中 R1、R2 为限流电阻,不同大小的限流电阻决定了红外发射管的发射功率,R1 越小,红发发射管的功率就越大,多个并联后小车的能耗也大幅增加,但同时增加了光电管的探测距离,此处值的大小应根据需要通过实验得到。R2 的选择和采用红外接收管的内阻有关,具体的选择只需按照分压的原理进行一下简单的计算就可
5、以。一般在设计时可以加一个发光二极管,照射不同路面时,通过观察发光二极管的亮亮灭来看是否达到想要的效果。3)、图中 R3 为分压电阻,为比较器提供参考电压,具体参考电压的设定应根据 R2 上端的电压来决定,此时一般通过调节此电阻来适应不同的检测路面与高度。4)在设计时,4、5 两端的信号输入位置可以交换,如可以把传感器的信号从比较器的正端送入。只需注意的是两种不同的接法,表现在输出端的电平会出现两种相反的结果,这个根据需要进行设计即可。5)、最后一点需要注意的是,由于 51 单片机没有内置 AD,所以采用比较器的方式(其实比较器也相当于一个一位 AD),对于有的单片机带有 AD 模块的,我们则
6、可以通过单片机的 AD 口直接读取电压信号的变化值,不仅可以简化外部电路,同时还能保留红外接收管连续变化电压信号信息,通过软件算法进行位置优化,不仅可以得到更精确的位置信息,还可以消除环境光线的影响,缺点就是加重了软件设计的难度。4、LM339 模块及红外对管模块介绍图 5 和实验室设计的红外循迹模块,主要分为两大部分,LM339 比较器模块和红外对管模块,由于上面已经分析的其工作原理,下面给出两部分的原理图,如图 6、图 7 所示,具体的原理及接口定义请大家参考此原理图和 LM339 的资料进行分析。图 5 LM339 模块及红外光电管模块图 6 LM339 模块原理图图 7 红外循迹原理图
7、5、红外循迹程序下面给出一个简单的程序用以实现小车的循迹,为了便于对程序的理解,此处用非 PWM 的方法写出,即电源电压直接加了电机两端,以固定速度实现循迹。#include#define uint unsigned int#define uchar unsigned charsbit PWM1=P20;/接 IN1 控制正转sbit PWM2=P21;/接 IN2 控制反转sbit PWM3=P22;/接 IN1 控制正转sbit PWM4=P23;/接 IN2 控制反转sbit PWM5=P24;/接 IN1 控制正转sbit PWM6=P25;/接 IN2 控制反转sbit PWM7=P26;/接 IN1 控制正转sbit PWM8=P27;/接 IN2 控制反转sbit ss1=P10; /左二级sbit ss2=P11; /左一级void main()while(1)if(ss1=0PWM2=0; PWM3=1;PWM4=0; PWM5=1;PWM6=0; PWM7=1;PWM8=0; if(ss1=1PWM2=0; PWM3=0;PWM4=0; PWM5=1;PWM6=0; PWM7=1;PWM8=0; if(ss1=0PWM2=0; PWM3=1;PWM4=0; PWM5=0;PWM6=0; PWM7=0;PWM8=0;