大一下学期的时候做的一个智能小车寻迹的项目,还是很成功的。当时我负责的是部分的焊接、硬件组装以及全部的代码改写工作,的确付出了很多心血。最后测评的时候老师给了优。总之还是很不错的,记录一下。
一、基本功能描述:
1、基本循迹功能(红外)
2、基本避障功能(红外)
3、改良横跨黑线的功能(用于十字路口或横向黑线干扰)
4、改良转直角弯的功能(通过前后轮的差速顺畅通过直角弯)
5、遥控转换模式功能
6、循迹同时避障(自动)
7、两种循迹速度(循迹过程中可以通过遥控器进行转换)
二、硬件结构:
整个电路系统分为检测、控制、驱动,电源模块和其它外围电路组成。首先利用红外对管对路面信号进行检测,经过比较器处理后,送给软件处理模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车转动。具体如下:
检测模块部分
由于黑线与白线在不同的物理表面具有不同的反射性质,在小车行驶过程中红外发射管不断向地面发射红外光,当红外光遇到白色地面时发生反射,反射光被红外接收管接受。如果遇到黑线则红外光被吸收,则红外接收管接收不到信号。判断有无黑线。通过一个反射模块和一个接受模块,通过发射红外信号,看接收信号变化来判断检测物体状态的变化。
我们用了一块比较器LM393。LM393 是双电压比较器集成电路。输出负载电阻能衔接在可允许电源电压范围内的任何电源电压上,不受 Vcc端电压值的限制.此输出能作为一个简单的对地SPS开路(当不用负载电阻没被运用),输出部分的陷电流被可能得到的驱动和器件的β值所限制.当达到极限电流(16mA)时,输出晶体管将退出而且输出电压将很快上升,能够提高红外对管的灵敏度,从而提高避障时的探测距离,防止小车撞到障碍物。
主控模块STC89C52
该模块是整个设计的大脑。STC89C52芯片的引脚VCC接+5V电源,引脚GND接地。引脚XTAL1和引脚XTAL2接在频率为11.0592MHZ的晶振上,并接了20PF的电容,起到接收外部时钟信号的作用。引脚RST外接复位电路,为单片机提供上电复位。引脚P3.5、P3.6、P3.7分别和三对红外传感器的输出端SEN1,SEN2,SEN3相连,其中SEN1,SEN2为左右两个红外对管,以完成电信号的输入。引脚P0.0、引脚P0.1、引脚P0.2、引脚P0.3、引脚P1.0、引脚P1.1分别和L293D芯片的IN1,IN2,IN3,IN4,ENA,ENB引脚相连,以完成将经过单片机处理过的信号输入给电机驱动电路。
电机驱动模块
本模块选用L293D芯片进行控制。该芯片驱动方式比较简单,直接驱动两个直流电机。控制每一路电机,都有三个信号,
分别为ENA,IN1,IN2和ENB,IN3,IN4。这里芯片的工作电压为+5V。本设计中,采用两个输出控制一个电机的方式。即OUT1和OUT2控制电机M1转动方向,OUT3和OUT4控制电机M2转动方向。
启用ENA驱动器和ENB驱动器。当使能输入为高电平时,相关联的驱动器被启用和他们的输出处于活动状态,并在其输入端的同相。当使能输入为低,这些驱动器被禁用其输出关闭,在高阻抗状态。用适当的数据输入端,每对驱动程序的形式一个完整的 H 桥可逆驱动器适用于电磁阀或电机应用。
因为从单片机输出的信号功率很弱,即使在没有其它外在负载时也无法带动电机,所以在实际电路中我们加入了电机驱动芯片,这样就能利用单片机输出的低电压操控由电源提供的高电压,并且能防止电机运动状态发生急剧变化时反向电流烧坏单片机,从而能够根据需要控制电机转动。所以采用了L293D。
L293D 提供双向驱动电流高达 2A,电压是从 4.5 V 至 36 V 的。是专为驱动等感性负载继电器,电磁阀,直流双极步进和马达,也可以给其他高电流/高电压提供电源负载。
共阳数码管
数码管内部有8个发光二极管,每个发光二极管有2个脚,如果每个发光二脚极管的2个脚都引出的话,需要16个脚。但是,为了减少引脚的数量,就可以把8个二极管正极连在一起引出1个脚,叫共阳极。如果把负极连在一起引出1个脚,就叫共阴极。
由此我们可以使用单片机控制数码管显示的数字,用于显示小车当前的状态。
排阻
其起到的作用是上拉电阻,将单片机的P0端口通过排阻钳位在高电平,以确保能接受到咪头和光敏电阻不稳定的电信号。
除了电路系统还有小车的机械系统,机械系统是由装载电路板的底盘,电机和后轮三个部分组成。
底盘
底盘是由树脂版做成的,在轮子支架和底盘之间有镀铜,可以用焊锡进行焊接。
电机
电机用了两个直流减速电机,直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速齿轮组,可以产生较大扭力。但缺点是它并不是采用轮子偏转的方法转向,所以实际上会拖着后轮转动。
后轮
后轮本来是学院发的两个同轴的轮子
三、软件算法:
略
四、测试调试过程:
1.基于焊接的硬件故障排查。
小组内参考了《万能表使用说明书》,利用万能表对元器件进行检查。经过认真排查,未发现故障,后面的代码调试也证明硬件设施运行良好
2.将出厂源代码进行烧录,烧录完毕,粗略检查小车电池、轮子等状态是否正常,确认正常后,将小车放到测试轨道上进行第一次的模拟测试。
3.对测试结果进行分析。
初次测试使用原装出厂代码,测试结果并不理想。宏观表现为:
1、行进速度过快导致经常性冲出轨道
2、无法正常通过直角弯
3、无法通过横线干扰和十字路口
4.通过测试结果对源代码经行修改优化。
分析原因:
1、行进速度过快原因可能为:电池电量充足(不予考虑)或代码无法做到控制车速;解决方案:通过对前进延迟代码参数进行修改,并在每次前进延迟结束后加一后退延迟函数以达到通过修改函数参数控制车速的结果。
2、无法正常通过直角弯可能原因:车速过快导致无法正常检测直角弯、转弯角度过小致使无法转过足够的角度、每次函数进行只转一次导致无法正常通过;解决方案:通过延迟函数控制小车车速,并将转弯函数修改为递归函数已达到多次转弯直到通过的目的,并对转弯函数参数进行修改。
3、无法通过横线干扰和十字路口可能原因:代码中未包括两边同时监测到黑线的情况使小车无法做出回应而停止运行;解决方案:增加一switch case分支使小车在同时检测到黑色的情况下继续向前运行。
5.将修改后的代码烧录进小车中,继续进行多次模拟测试,直到小车可以正常通过测试轨道,完成目标任务
6.在完成目标任务的情况下对小车功能进行进一步优化:
1、改良遥控方式,使实现通过遥控器进行模式转换(远程遥控与循迹两模式转换):在主函数中将循迹与遥控模式修改为可以通过外界进行干扰,并将红外遥控模块函数增加一按钮设定,使可以通过该按钮从红外遥控模式转换为循迹模式(3-1),并将原按钮前进增加功能以实现从循迹模式转换为红外遥控模式(1-3)
2、改良循迹函数,是在循迹的同时可以进行避障:将循迹函数修改为可以被外界进行干扰,并在循迹函数中加入可以由模式3或4转换为2的代码,以实现在循迹过程中若前方检测到障碍物可以自动进行避障
3、改变循迹函数相关参数以实现小车的变速运行:通过修改函数参数实现小车可在快速与慢速循迹两种模式中进行转换
7.基本实现所有必须和优化功能后,尝试对小车外观进行优化,尝试通过3D打印一小车外壳,后因质量太大影响小车配重比失败。
转载:https://blog.csdn.net/qq_40851744/article/details/105467390