喻语嫣 肖明杰
(武汉文理学院信息与计算机学院 湖北武汉 430345)
近年来,随着科学技术的飞速发展,智能移动机器人技术也在不断发展,传统的机械运输方式有被取代的趋势。对可移动目标能够自动跟随的智能小车,在搬运行李、运输材料以及人们日常生活中有着广泛的应用前景[1-2]。目前,市场上已经存在一些具有自主巡线功能的移动小车类产品,但是需要提前规划好路经,设置好程序才能进行无人车运行,在小车目标跟随方面考虑得比较少,跟随效果比较差[3-5]。还有一部分智能小车利用摄像头来获得跟随目标的运动状态,然后利用云端计算机结合目标检测算法对小车采集到的视频流进行实时分析计算,这种方法跟随效果较好,抗干扰能力强,但实现过程比较复杂,对技术有很高的要求[6-10]。本文设计了一款基于红外技术和超声波测距的智能跟随小车,可实现小车对人的自动跟随,并与人保持0.5 m的安全距离,防止碰撞,具有工作稳定、成本低、便于推广的特点。
该系统主要是由硬件和软件两部分组成。系统结构图如图1所示。
图1 系统结构图
它包含稳压电路的设计、人体红外感应模块、超声波模块、L298N 驱动模块。该车以AT89C52 单片机为核心,通过3 个人体红外模块识别人体特有的红外线信息,同时通过超声波传感器测量人与小车的距离,将两种信号同时传给AT89C52 芯片进行处理,将处理后的信号传给电机驱动器来实现小车的转弯,直行和后退。当左边传感器或者左边和中间传感器检均测到信号时小车左转;当右边传感器或者右边和中间传感器均检测到信号时小车右转;只有中间传感器检测到信号时直行;左右传感器同时检测到信号为误判,小车还是直行;3 个传感器均未检测到信号时,小车停止;当人与小车的距离小于0.5 m时,小车报警并后退。
该系统中智能车使用电源控制芯片有MIC29302和SPX2940。如果给车供电的电池电压过大,可能击坏小车的核心控制芯片或者模块。所以,选择MIC29302和SPX2940这两个稳压芯片来控制输入电压的大小,从而降低损耗。
MIC29302芯片在本设计中的作用是将输入电压降到6 V之后给驱动模块供电,防止输入电压过大。电机驱动芯片的电压要求是6~12 V,该设计使用了两个电机,当它接入的电压值过大时,电机的转速过快,导致难以控制,会给后期调试带来一定的难度,所以用MIC29302芯片将输入电压降到6 V。此芯片所能承受的输入点电压范围为2.25~26 V,输出电压为1.24~25 V;可承受最大的电流为3 A;6 V 降压模块原理图详如图2所示。
图2 6 V降压模块原理图
SPX2940-5.0 芯片在本设计中的作用是将6 V 的输入电压降到5 V,从而给AT89C52核心芯片以及其他模块供电。此芯片输入电压最大值为26 V,输出点电压为5 V;最大承受电流为1 A;5 V降压模块原理图详见图3。
图3 5 V降压模块原理图
图3 中1N5819 二极管作用还是用来判断电源是否接反了;电容的主要作用是滤波;LED灯是用来检查焊接的电路是否正常工作。
此模块是HC-SR501 模块,人体红外感应模块原理图如图4所示。
图4 人体红外感应模块原理图
Trig 是输入触发信号(可以触发测距),Echo 是传出信号反响(可以传回时间差)。超声波HC-SR04 采用IO口TRIG触发测距,给一个最低为10 μs的高电平信号,当其在正常频率工作时会随机发射出8 个频率在40 kHz 以下的方波,并且它具有自动地检测有无信号返回的功能[11-13]。接收返回的信号时,ECHO口会立即自动地输出一个高电平,超声波信号来回的总的路程与所用的持续时间,等于超声波输出一个高电平需要持续的总时间长度。此模块测得的最远距离为4 m,测得的最近距离为2 cm,将此超声波避障测距模块固定在车头前方,作用是测试前方的人与小车之间的距离。在测试过程中发现,当小车与人的距离过近时,人后退而小车后退速度太慢,就很容易踩到小车。经过多次实验,小车与人的距离大于0.5 m 时,人后退就很难踩到小车。基于以上的原因,本设计添加了当小车与人的距离小于0.5 m时报警并后退的功能,保证人与小车之间的安全距离,防止发生碰撞。
此模块的作用是用来显示红外模块和超声波模块传送回来的信号值。它的工作电压为4.5~5.5 V,工作电流为2 mA。5 kΩ 滑动变阻器是用来调节LCD1602的显示亮度的,RS在此模块中充当的是命令和数据区分的作用,当RS处于低电平状态时,则它的工作是命令,否则工作状态为数据;RW是读和写(数据或命令)的选择引脚,当RW处于高电平的状态时,则是从LCD1602读取命令或者数据,否则是向LCD1602写入数据或者命令;WR为模块的使能端。D0-D7对应的是LCD1602的数据输入和输出引脚。此模块的最佳工作电压为5 V,在5 V时显示的数据最为清楚。
该主控模块主要的功能是由控制芯片L298N来同时控制左右两个步进电机的偏正方向或正向反转,以及可自动地改变正负两个同步电机转子间电机的同步与转速。L298N驱动模块原理图详见图5。
图5 L298N驱动模块原理图
L298N 芯片是一种具有高压、大输出电流输入的双全桥式驱动器。其SENSEA、SENSEB芯片分别也都是带有两个H桥式的高压输出大输入电流输出反馈输出插脚,在不用时也可进行连接。VCC、VS 接口两端基本都是串接一个工作电源引脚,电流范围上一般会分别设置约为直流的4.5~7 V、2.5~46 V,在单片机实际电路设计中使用情况中一般是VCC 输入输出端会单独和单片机电源端在一起用来共享一个5 V左右的工作电源,而VS接口输出电源端口则通常只可以单独地用来接受另一个6~12 V 供电。ENA、ENB 输入端是一个使能的输出端口,在低的电流平时它是一个阻拦电流输出。IN1、IN2、IN3、IN4 分别设为数据输出的输入端口引脚,是用来控制OUT1、OUT2、OUT3、OUT4 上面的电平的。OUT1、OUT2、OUT3、OUT4分别均设置为数据输出的输出引脚控制的是外接的电机转动。D1~D8都是保护放电二极管(SS34)的二极管,用途是保护或释放掉蓄电池在启动电机后突然停车或放电结束时放电产生发射出来电流的回响反映尖峰电势,如果不释放它则会击坏L298。
该车首先通过51单片机作为总控芯片,然后通过红外模块进行人体检测,将所采集的信号以0或1的数据返回给单片机;之后使用超声波模块,对前进时的障碍物进行距离检测,当前方固定范围内没有障碍物存在时进行正常的形式,当前方范围存在障碍物时进行后退报警;最后将红外模块和超声波模块所采集到的数据在显示屏上展示出来,智能跟随小车实物如图6所示。
图6 智能跟随小车实物图
上电之后先进行系统初始化,包括定时器、人体红外、超声波、lcd1602等模块初始化。本系统中定时器是用于人体红外模块检测,超声波检测和PWM信号的产生。因为红外和超声波可以放在一个定时器中所以只需要两个定时器并对其进行相关定时设置,在lcd1602初始化完毕之后就进入到while(1)循环当中,当3个方位的红外检测信号返回主芯片,然后主芯片对它进行编码使它检测到人为1,反之则为0,如果信号为1 则给PWM传输高电平,实现车直行、左转、右转等功能。若返回值为0,则小车停止,等待红外重新检测。在车行驶的过程中超声波将以10 μs的间隔检测一次。当超声波返回值大于0.5 m且小于4 m时,车将正常行驶。若当车与人之间的距离小于0.5 m时,车载蜂鸣器将报警且车开始后退。主程序流程图如图7所示。
图7 主程序流程图
此模块对于检测到的物体的返回值只存在两个值,当检测到人体时返回给单片机的信号为1,反之则为0。由于存在着返回值覆盖的问题,所以将它放在了一个10 μs的定时器中断里,这样就有效地解决了覆盖问题。中断是由超声波控制的,所以只要超声波没有接入,那么红外模块也不会检测。红外模块流程图见图8,实现代码如下:
图8 红外模块流程图
超声波模块的工作原理就是Trig先发出一个高电平信号,延时一段时间让Trig变为低电平,Echo端口初始为0,当Trig 发出的信号遇到障碍物返回来时Echo变为高电平,通过这之间的时间差来计算车和物体之间的距离。既然出现了返回值的问题,那么就要避免第一个数据还没有处理完,第二个数据就要处理的问题,所以它也被放在了10 μs 的中断中,且它的代码里面是控制定时器中断开始和关闭的。由于HC-SR04超声波模块是通过接受反馈信号来进行距离检测,并且需要根据AT89C52 单片机的晶振周期来进行设定,所以在11.059 2的晶振下,超声波模块流程图如图9所示,实现代码如下:
图9 超声波模块流程图
LCD1602主要用来显示小车运行过程中传感器所接收的信号,都是通过二进制来实现操作的,对LCD1602液晶模块的读/写操作、显示屏和光标的操作都是通过编程来实现的。可以将超声波和红外模块传输回来的信号显示的显示器上面,当然它既然是一个内部的信号处理代码,那么外部传输的代码也是得存在的。值得注意的是,对于LCD1602模块而言,尽量保证每次在使用前都进行一次初始化操作。根据数据手册中的时序图可知,此模块反应的时间几乎都是纳秒级别的,所以它不同于其他显示模块可能会需要给延时函数来进行延时,从而达到避免信号值覆盖或者是乱码的情况,但是由于保险起见,其中需要延时的地方可以给予1 ms的延时,这个延时对于人的感受而言可以忽略不计,同时还可以让模块有足够的时间进行程序的运行。实现代码如图10所示。
图10 数字显示代码图
此次小车的驱动模块主要是靠超声波模块和红外模块的传回来的信号值来判断是否前进、左转、右转、后退等驱动。上面介绍红外模块时已经提到,检测到人的信号为1。同时用超声波来判断距离远近,来选择如何驱动。例如:当正前方有人,那么中间的红外信号为1,其他红外模块都为0,同时和超声波模块一起,当距离大于0.5 m 时是前进,小于0.5 m 则代表前面人再后退,这时车上面带的蜂鸣器就会开始报警,提示人们距离过近的同时车也会随着人的后退而后退。实现代码如图11所示。
图11 驱动模块代码图
样车使用的是AT89C52 芯片,所以车所涵盖的功能有限,后期可以换成tc264、MK60、STM32 等和社会接轨的主芯片,这些芯片的性能和可带动模块都比AT89C52芯片的多,不仅可以自主完善小车的性能,同时也可以给车增加新的功能。例如:增加摄像头作为辅助判断,使对前方是否有人的判断更为精确;增加陀螺仪来检测车的自生状态是否处于上坡状态或者下坡状态来进行减速或者加速处理等。本文利用单片机控制器,结合人体红外传感器和超声波传感器设计的智能跟随小车,实现了小车对人体的自动跟随,当跟随距离小于0.5 m 时报警并后退,保持安全距离。响应迅速,跟随精度较高,性价比高,可应用于商场购物、超市搬运以及家居使用等生活常见场所。