[hermit auto=”1″ loop=”1″ unexpand=”1″ fullheight=”1″]netease_album#:3308720[/hermit]这两天都在搞红外循迹,因为当初车身上就开好孔了.放4个反射式红外循迹.孔是按照TCRT5000这个型号的红外对管来开的.

TCRT5000其实就是一个红外发光二极管和一个光敏三极管,当红外发光二极管发出的红外线被传感器前方的白色物体反射回光敏三极管以后红外光敏三极管CE间的电流增大.光红外敏三极管接收到的红外线强度越强电流越大.

红外发光二极管的话和普通LED差不多,首先先有个导通电压,达到导通电压以后开始流过电流,电流越大亮度越亮,至于调试的时候如何查看红外发光二极管的亮度.我个人喜欢用手机的摄像头去看,因为手机摄像头的COMS图像传感器不仅仅可以感应可见光.而且还可以感应一部分的近红外.当然.前提是摄像头没有红外滤镜.现在有的手机的摄像头加了红外滤镜.比如比较新的苹果手机.具体从哪一代开始加我也忘了.加了红外滤镜以后红外线会被过滤掉,不会进入图像传感器.这样虽然能提升拍摄效果.但是这么说呢,有好有坏吧,至少不能拿来测试红外发光二极管了.除了这种循迹用的红外.我还喜欢用手机摄像头去看电视遥控板发射的红外线.

 

然后是整体的设计思路,因为红外循迹这个东西,容易受到环境光影响.特别是阳光.有时候甚至对于阳光见光死.因为阳光中也有红外线.而且在不同场地.地面白色黑色部分的反光系数之类的都有影响.或者传感器距离地面的高低也有显著影响.所以说直接设置一个阀值.超过多少算白色.或者低于多少算白色.适应性都不太高.所以打算不用淘宝上常见红外循迹的做法—–数字量输出0和1.而是用模拟量.在红外光敏三极管上面串个电阻.把红外光敏三极管的电流变化转换成电压变化.然后把电压数据交由arduino nano板的ADC转换成数值后做阀值.或者后期有能力搞自动校准或者动态阀值啥的.总比直接数字量输出0和1的可玩性高.

另外还打算让红外发光二极管发出的红外线强度可控.这个的话打算使用一个模拟电位器芯片mcp41010来实现.这个芯片可以通过SPI接口来动态改变引脚间的电阻值.就跟常用的普通可变电阻一样.只不过普通的可变电阻是靠人去旋转旋钮或者移动滑块来改变抽头的位置.这个是用SPI信号控制而已.(不过这芯片真TM贵.我找到的一片4块钱,够买一大把普通的可变电阻了).我买的这个是0-10KΩ的.而且是255级.也就是说能从0Ω到10KΩ分为255份.应该来说是够用的.

mcp41010引脚

但是去查了下这个MCP41010芯片的资料.简直卧槽.抽头电流最大正负1mA.如果直接去驱动那4个红外发光二极管的话简直要炸.这必须吐槽,普通的可调电阻估计安培级的都能带动.但是这玩意…1mA….算了,毕竟是做到芯片里的.(其实这是我在电路全部焊完才发现的.然后赶紧改电路…..).因为电流不够.一开始打算搞个三极管来做电流放大,后来又考虑到三极管那简直了的计算.静态工作点啊.好多电阻值的计算啊什么的.而且我这边还有几片以前学校比赛做项目剩下的LM258运放.就打算直接用这个运放搭一个电压跟随器来做电流放大用.因为LM258是双运放.所以这次只用了其中一个.就是接成这样:

目前电路的原理图:

电路焊完以后直接装到小车上进行测试,连接arduino nano板,就是之前用于控制步进电机,然后用IIC总线和主控板通讯的那个板子上.目前还没写那个模拟电位器的驱动程序,而且查了下,模拟电位器上电以后是半量程,所以测试的时候应该能将就用用,测试的时候程序里写了一个读取引脚电压然后发送到串口.将4个红外循迹传感器的电压排成一排的效果是这样的:

这个是当所有传感器都在白色区域的电压ADC值,可以看出来,传感器的性能还是有偏差,不过也许也可能是外围的原因,毕竟5%精度的电阻,然后接下来是全黑的情况下传感器的电压ADC值:

电压明显升高,看来还是有点效果的,但是综合起来看,电压ADC值也就是在800到1000左右波动,这没有充分利用ADC的精度.因为ADC是0到1024的,现在才800-1000,范围小多了.看数值应该是电压都比较高,根据电路来看,应该是上拉电阻阻值太小,导致上拉过强引起的. 在考虑是否需要更换上拉电阻,但是因为这个洞洞板的质量简直渣.拆焊一次可能会导致焊盘脱落,万一严重起来.可能整个板子都得重新焊.所以暂时不动他,在考虑接下来调通模拟电位器以后提高发光二极管的亮度,使得红外光敏三极管CE间通过的电流更大来增加下拉,看看能不能把电压拉的更低.

 

距上次更新本文已经过去了将近一个月!!~

之前搞的一直都半死不活的,前期用于直线循迹还算是勉勉强强,但是到后面十字路口检测还有其他之类的就开始不尽人意了.而且还有就是适应性太差,环境光一变,就瘫了.于是乎~我又改了,之前好像是用的那个啥破运放搞得那啥没用的跟随器来着?搞可调来着?现在懒得搞那些杂七杂八的,那个红外发光二极管,直接5V电源串了个120Ω的电阻,然后直接接地,接收部分也是直接串了个10KΩ的电阻,按常规接法.但是~!稍微在机械结构上改了下,之前传感器离地面的距离比较远,这次改近了,果然距离是一大因素,现在效果好多了,轻装上阵比之前整过的任何方式都要好,分辨率都要高,用arduino的ADC读出来的差值更大,这些都是数据,最关键的是跑起来稳定,不需要每次跑之前对传感器的黑白数值基准进行校准,这省了很大功夫,而且在十字路口识别上也没出过问题,还算是很可靠的.

以下是这次修改的和原先的对比,传感器伸出来比原来长多了,所以离地面也近.

顺便还用纸在传感器周围贴了一圈防止干扰(虽然我不知道有没有效果,没对比试验过)