基于单片机的智能小车设计
2022-12-21张江亚董彦华
王 静,张江亚,董彦华
(河北科技学院 河北 保定 071100)
0 引言
随着科学技术的发展,信息化、智能化已经离不开人们的生活。智能小车的发展是当前研究的重点领域之一,反映了人们对安全和方便的需求,也是评估各国智能化发展进程的一个非常有效的指标。目前,智能车的应用正逐步深入到工业和生活的各个层面,提升了人们的生活品质[1]。董靖川等[2]基于STM32对智能避障小车进行了设计,通过在多个方向安装超声波传感器,以实现不同方位障碍物的距离检测,实验表明该方法运行效果正常,鲁棒性好。但在该设计方案中,由于使用的传感器数目较多,会导致各传感器之间易产生干扰。该系统与红外线避障系统模块而言,对光不敏感,抗干扰性良好,而且反应速度较快,其不足之处在于只能实现报警功能,无法实现自动避障。为此文本基于单片机设计一款具有循迹、自动避障和手机蓝牙控制功能的智能小车模型,通过总体方案设计、硬件电路设计、软件编程设计,以确保实现智能小车的正常运转。
1 智能小车总体设计
本文设计所用的系统,主要由主控制器模块、红外循迹模块、红外避障模块、电源模块、电机驱动模块,以及蓝牙遥控模块组成。采用STC89C52单片机[3]作为核心器件,以实现对小车的控制、循迹、自动避障和手机蓝牙控制等功能;采用型号为TCRT5000的红外反射传感器进行路线的探测和循迹;采用E18-D80NK红外传感器避障;采用MX1508RX2电机驱动芯片为车轮驱动;采用JDY-31蓝牙串口模块实现手机蓝牙控制。
2 智能小车硬件设计
2.1 主控制器模块
采用STC89C52RC型号单片机作为主控制器,其具有灵活方便、安全可靠、方便排查故障和维修等优良的特性。同时,具备较高的可扩展性,可通过扩展I/O接口让其实现更多功能。在充分研究和分析过本文智能小车的功能后,设计出主控制器模块电路图。
2.2 红外循迹模块
循迹功能是让智能小车能够沿着中间的黑粗线条行驶。当红外循迹传感器接收到不同信息后,所对应的操作也会不同,如:智能小车两边的传感器均能接收到白色信号,智能小车就会直行;智能小车左边传感器接收到黑色信号,右边传感器接收到白色信号,那么代表左边传感器接收不到信号,智能小车就会左转,实现循迹的效果。
采用型号为TCRT5000[4]的红外反射传感器进行路线的探测和循迹,此款传感器常被用于制作红外循迹模块,并且可以针对其灵敏度进行调节,同时也极大地提升了设计后期在小车循迹测试时调试的效率。当TCRT5000发出的红外线被黑线吸收无法返回时,模块中相应位置的LED灯不会发光。在没有探测到黑线的正常情况下,或者小车未进入循迹状态时,该模块上的2个LED灯均保持发光状态。循迹模块电路图如图1所示。
图1 循迹模块电路图
2.3 红外避障模块
选用E18-D80NK红外传感器[5]进行避障,设置工作电压为5 V,工作电流为10~15 mA,有效检测距离为3~80 cm;传感器直径为18 mm,长度为45 mm。红外传感器根据接收到反射光的强弱来判断距离障碍物的远近。该装置的消耗较高,因此本设计选用3.7 V的锂电池作为供电电源以保证红外光电传感器的正常运转。该红外传感器的红外发射和接收电路如图2所示。
图2 红外发射和接收电路图
2.4 电源模块
由于本文设计中用到了功率较大的红外光电传感器,因此需要用2节3.7 V可充电式的锂电池作为电源。将2节电池串联后得到1个7.4 V电压的电源,但该电压相对于包括单片机在内的其他元器件的正常工作电压又较大,因此需要将该电源接到电源调压模块中,调压为5 V后,才可以作为供电电源对单片机及其他各模块进行供电。
2.5 电机驱动模块
采用MX1508RX2电机驱动芯片为电机,该芯片是专门为遥控玩具类小车而设计的,其将具有解码功能的芯片和驱动马达运转的驱动芯片合并成了一整块芯片。该芯片有着工作电压范围为2~8 V的优点,由于本文设计中需要较高的供电电压,其工作电压范围恰好符合本文智能小车设计中的2节锂电池串联的供电电压,因此优先考虑了该芯片。除此以外该芯片还具有待机电流低、功率开关管导通内阻低、集成度高等优点。同时,其相较于L298N、MX1508RX2的体积更小,调试安装过程也会相对方便。
2.6 蓝牙遥控模块
为了方便用户使用手机和智能小车通信,加装了以JDY-31为蓝牙的串口模块。该串口模块是基于蓝牙3.0 SPP设计出来的,能够支持多种平台的数据透传。其应用的范围较广,性能良好,发射功率最高可达到约8 dB,且经过测试,信号的发射距离也能达到20 m以上。因此该模块可完全满足本文设计的使用需求,并且还具备一些相当人性化的设计,使用起来十分灵活、便利,如:可以让用户自愿通过AT命令对连接的蓝牙设备名称进行修改;可以对设备的波特率进行设置。
3 智能小车软件设计
主程序主要起到一个想到和决策的功能,决定什么时候小车该做什么。小车各种功能的实现通过调用具体的子程序予以实现[6]。
3.1 智能循迹避障子程序
采用差动转向作为智能小车的转向方式,后轮是一个万向轮,作为小车的支撑及基本运动的辅助。前轮为2个驱动轮,并且每个驱动轮均由其连接的驱动电机单独控制,彼此之间不会互相影响。循迹模式程序函数流程图如图3所示。可以看出,智能小车的避障模块选择的是2个红外传感器,假如左右两侧的传感器中,有一侧检测到了障碍物体的存在,那么智能小车的车头将自动朝向远离障碍物的一侧进行角度调整。如果3个传感器同时检测到有障碍物存在于安全距离内,小车会立即停止运动。避障设计的部分程序如下。
图3 循迹模式程序函数流程图
if(flag_time == 1) //计时开始
{
timer0_count ++;
if(timer0_count >= 1000) //定时1.0秒
{
timer0_count = 0;
flag_ok = 1;
flag_time = 0;
}
}
switch(flag_direction)
{
case 1: //小车停止
MOTOR_IN1 = 0; MOTOR_IN2 = 0; MOTOR_IN0 = 0; MOTOR_IN3 = 0;
break;
case 2: //小车左转
if(motor_count < motor_speed)
{
MOTOR_IN0 = 1; MOTOR_IN1 = 0;MOTOR_IN2 = 1;MOTOR_IN3 = 0;
}
else
{
MOTOR_IN0 = 0;MOTOR_IN1 = 0;MOTOR_IN2 = 0; MOTOR_IN3 = 0;
}
break;
case 3: //小车右转
if(motor_count < motor_speed)
{
MOTOR_IN0 = 0; MOTOR_IN2 = 0;MOTOR_IN3 = 1; MOTOR_IN1 = 1;
}
else
{
MOTOR_IN1 = 0;MOTOR_IN2 = 0;MOTOR_IN3 = 0; MOTOR_IN0 = 0;
}
break;
case 4: //小车直行
if(motor_count < motor_speed)
{
MOTOR_IN1 = 0;MOTOR_IN2 = 0;MOTOR_IN3 = 1; MOTOR_IN0 = 1;
}
else
{
MOTOR_IN0 = 0;MOTOR_IN1 = 0;MOTOR_IN2 = 0;MOTOR_IN3 = 0;
}
break;
case 5: //小车后退
if(motor_count < motor_speed)
{
MOTOR_IN0 = 0;MOTOR_IN1 = 1;MOTOR_IN2 = 1;MOTOR_IN3 = 0;
}
else
{
MOTOR_IN0 = 0;MOTOR_IN1 = 0;MOTOR_IN2 = 0;MOTOR_IN3 = 0;
}
break;
}
}
3.2 蓝牙模式子程序
在智能小车进入蓝牙模式的正常状态下,若车身左侧的红外光电传感器检测到了前方存在障碍物体时,程序会控制小车向右转,以此来避免碰撞。反之,若右侧检测到障碍物,则车头向左偏转以躲避障碍;两边侧均有障碍物,即前方无路可走时,智能小车停止前进,原地待命;如果收到前进指令,且前方有障碍物,智能小车会在程序自行判断后选择原地待命,直到前方障碍物消失后,才会受到遥控的指令控制,从而开始向前运动。同理,在蓝牙模式下,向左转和向右转的指令也会受到障碍物的影响,但由于智能小车后方未装有传感器,因此后退指令不会受影响,在收到后退的蓝牙遥控指令后,则直接后退。
4 系统调试与测试
4.1 系统仿真过程及结果
智能小车控制系统的仿真过程,基本可以概括以下几步:首先,将智能小车控制系统的原理图绘制好;然后,在keil c51兼容单片机C语言软件开发系统中,按照程序流程图进行完整的编译;最后,再将原理图与单片机程序置入仿真软件中进行仿真。系统仿真图如图4所示。
图4 系统仿真图
仿真实验过程中,在原理图中的各模块连接为整体后,使用开关来进行等效替代软件中无法仿真的部分器件,如,红外光电传感器等。将.hex文件载入其中,并点击运行按钮,观察仿真结果。仿真结果显示,本文设计的控制系统,能够实现小车预期的自动循迹及自动避障功能。
4.2 小车实物测试
在通过软件对系统进行仿真之后,为进一步确认本文设计的实际可行性,对智能小车控制系统的实物进行制作、组装与测试,实物和测试结果如图5所示。
图5 实物和测试结果
1)对智能小车的蓝牙遥控功能和基本运动功能进行测试。按下智能小车主板的电源开关后,进入蓝牙连接模式,打开手机中的蓝牙调试程序进行蓝牙连接,在正常连接后,依次测试智能小车前、后、左、右的遥控指令和停止指令。经测试,智能小车蓝牙遥控功能和基本运动功能运行正常。
2)对智能小车的循迹功能进行测试。使用多张A4纸打印并拼接出循迹所需的黑色引导线条,经过多次测试,智能小车均可以准确识别出黑色引导线,并按此路径行驶,即智能小车的自动循迹功能可以实现。
3)对智能小车的进行自动避障功能测试。在智能小车前进状态下,用手依次遮挡前方的3个红外光电传感器,观察其运动状态如何变化。经测试,智能小车前3个红外传感器均可检测到有效距离内的障碍物,并且可以依据传感器探测的结果进行转向或停止运动,从而有效避免了碰撞障碍物。
实际测试表明,智能小车传感器工作状态下均可正常运转,可以实现所预期的自动循迹和自动避障功能,同时蓝牙遥控模块也运行正常,可通过手机端的蓝牙调试软件对其运动进行控制。
5 结论
本文设计的智能小车模型以STC89C52单片机作为主控核心,对外设的驱动电机、蓝牙及传感器等模块进行控制,经过多次调试和测试验证后,成功实现了自主循迹避障、手机软件控制等功能。后期加以完善,即可投入市场,应用于勘探、消防、无人驾驶及环境探测等领域。