基于Arduino 的智能避障小车设计*
2021-03-24曾颖琳
曾颖琳,董 欣,倪 鹏,郭 斌
(新疆农业大学计算机与信息工程学院,新疆 乌鲁木齐830052)
1 引言
目前,人工智能和自动化技术的快速发展引领了许多产业的飞速进步,越来越多的智能控制产品走进了人们的生活。自动驾驶车应用了智能控制、模式识别、计算机、传感器等多种技术[1]。自动驾驶车的应用不但可以有效地缓解交通问题,而且可以把人从驾驶过程中解放出来,避免由疲劳驾驶、酒驾、操作失误等引起的突发意外,从而为人们的生活提供便利,因此,它越来越受到人们的密切关注。智能避障小车是自动驾驶车的雏形,也是必备的基础之一,其主要是解决车在行驶过程中的自动避开障碍物的问题,这一问题的解决也是辅助车自动驾驶的必要条件之一,所以对其进行研究和探讨具有一定的意义。目前,各院校都有过对智能避障小车研究的报道,且获得了一定的应用。作为自动驾驶的重要基础,利用所学的知识实现智能避障小车不但为以后的开发积累必要的经验,也是进一步研究的必经之路。本文是以Arduino 开发板作为核心控制器,结合超声波传感器、电机、舵机等硬件设计和程序调用,实现避障功能以达到小车的自动行驶。
2 系统设计
本设计选用Arduino 微处理器作为主控芯片。它是目前被使用较为广泛的电子芯片,其开发语言为C 语言,具有使用简单的优点[2]。Arduino 的主要特点是其参数的函数化设置,它在很大程度上降低了开发的门槛,因此用户不用从底层了解它的结构。此外,它还可以简单地与各种传感器和电子元器件进行连接,便于开发和功能扩展。在本设计中,智能小车搭载超声波传感器、舵机作为避障模块的核心器件,它在Arduino 的控制下对小车行驶的路况进行相应的信息采集,并将检测到的信息反馈给Arduino 进行处理,Arduino通过调用程序可控制小车作出相应动作,从而实现避障功能。
系统框图1 如示。
图1 系统框图
智能小车的设计共包括电源、电机驱动、舵机、避障4个主要功能模块,各模块间相互配合,共同实现智能小车的行驶、避障检测和避障功能,其总体原理如图2 所示。
图2 设计原理图
2.1 电源模块
电源是整个硬件电路的重要组成部分[3]。它可以为系统电路提供稳定的工作电压,使其正常工作。锂电池具有电压稳定、价格低等特点,此外,它还可以进行充电,进行循环使用[4]。本设计供电电压范围为6.5~9 V,基于锂电池的上述特点,选用两节3.7 V 的锂电池和电池盒进行组合,为系统工作提供7.4 V 的稳定电压。
2.2 电机驱动模块
步进电机的位移由脉冲得来的。当有脉冲信号时,电机会在该信号的驱使下按照预设的方向朝固定的角度进行旋转。为了使定位变得准确而有效,可以通过改变步进电机的脉冲个数,从而使它的角位移量发生相应的变化。此外,更改脉冲的频率可以实现调整转动速度的目的。
电机作为智能小车的驱动装置,其选择合适与否会对系统电路的正常运行起重要的作用[5]。本设计选用的两个电机的型号都是L293D,它不仅具有价格便宜、易于控制的特点,而且还具有高速变化的四倍高电流H 桥驱动程序,可以提供高达600 mA 的双向驱动电流,宽电压供电范围可以达到4.5~36 V,故其满足智能小车的设计条件。L239D 内部等效图如图3 所示。
图3 L239D 内部等效图
2.3 舵机模块
目前,在智能控制系统中舵机的使用越来越普遍。在智能小车设计过程中,它可以带动超声波探头、摄像头等旋转,保持或改变方向,对智能小车进行转弯控制或信息采集。舵机中起控制作用的信号为PWM 信号(脉宽调制信号),控制的信号基准周期为20 ms,脉冲宽度介于0.5~2.5 ms 之间,可调整的旋转角度为﹣90°~90°[6]。舵机能够控制旋转角度的变化,是利用PWM 信号脉冲宽度的占空比来调节位置的改变,根据脉冲宽度,舵机会旋转一定的角度到达相应的位置。
本设计采用舵机型号为SG90,在不带负载的情况下,它的反应转速可以达0.12 s/60°(4.8 V),转角的最大角度为180°,正常的工作电压介于3.5~6 V。舵机脉冲宽度与转角关系如表1 所示。
表1 舵机脉冲宽度与转角关系
2.4 避障模块
如今,科学技术不断发展,智能小车能应用的传感器种类越来越多[7]。在众多传感器当中,超声波传感器已然成为智能小车实现自动避障应用的首选器件。超声波是一种机械波,其指向性相对较强,频率较高,绕射现象小,很适合用来测距。
在本设计中使用的避障模块选用的是HC-SR04,它有4个接口端,即为VCC、GND、接收端Echo、控制端Trig,实物如图4 所示。它采用ⅠO 触发的方式进行测距,通过利用超声波信号从控制端到接收端的高电平持续时间和声波在空气中的传播原理,实现计算障碍物的距离,从而完成避障的功能,其工作时序如图5 所示。此外,HC-SR04 的正常工作电压在5 V 左右,测量角度小于等于15°,当距离物体越远时探测的角度越大。
在本设计当中,利用HC-SR04 与SG90 舵机相结合来采集障碍物的位置信息。当智能小车碰到障碍物时,信号可以反射到超声波传感器上,在进行对障碍物位置信息的分析和处理后反馈给Arduino 处理芯片,使其调用相应的程序作出应对措施,根据超声波的反射效应并且配合舵机0°~180°的旋转,从而实现躲避障碍物的目的[8]。
图4 HC-SR04 实物图
图5 超声波时序图
3 系统实现
3.1 避障的工作原理
本设计用于避障的传感器是HC-SR04,其采用基于ⅠO触发实现测距功能,测距时,首先Trig 端会发送10 μs 以上脉冲触发信号,模块将会循环发出8 个方波脉冲信号,每个脉冲信号频率均为40 kHz,并且通过自动检测有无回波来判断传感器前方是否有物体。如果检测到有回波时,Echo 端中的输出信号为高电平,由其持续的时间可知超声波从发送到被接收的用时。计算公式为:
式(1)中:T为测试距离;Rh为高电平时间;Vi为声速(340 m/s)。
HC-SR04 的应用原理是应先由控制口发送出高电平,它持续的时间为10 μs 以上,然后,在接收口检测高电平的输出。一旦检测到输出信号定时器开始计时,持续一段时间后,如果接收口中的信号由高电平变为低电平时,即可读取定时器的值,此时,定时器记录的数值即为测距时间,由时间、声速和距离的关系,便可以算出测量距离。
智能小车在行驶的过程中,通过安装在车底盘前的超声波和舵机来检测周围环境。在舵机的带动下,超声波传感器可以不断地检测左、前、右3 个方向是否存在障碍物。如遇障碍物时,智能小车会根据这3 个方向对障碍物的距离进行比较,从而作出行驶判断,自动避开障碍物。小车行驶时可能会在不同方向遇到障碍物,一般是左、右、前3 个方向。要想小车对避障物采取有效的应对措施,需要开发这3 个方向的避障算法以准确地判断障碍物的位置信息,小车的避障流程如图6 所示。
避障算法的主要判断小车与不同方向物体的距离,即小车在行驶时,超声波传感器首先检测正前方物体的距离,若小车前方25 cm 以上都没有物体时,小车则继续向前行驶,如果检测到前方25 cm 以内存在物体时,小车会减速,待小车停止后舵机云台会继续带着HC-SR04 传感器检测左、右障碍物的距离,如果左边障碍物的距离大于右边,小车会向左转然后前进,如果右边障碍物的距离大于左边,小车会向右转然后前进,如果小车前方还会有障碍物,小车会重复上述过程,调整角度避开所有障碍物。
3.2 实验验证
为了验证小车的避障性能,在设置实验环境时,通过利用一些简单的物体作为障碍物来规定小车行驶的特定的路线,由此来验证小车的避障效果。
图6 小车避障流程图
智能小车前进时通过舵机和超声波不断检测前方,当遇到障碍物时,超声波判断出障碍物的位置后返回一个信号,Arduino 根据反馈信号调用程序比较小车与障碍物的距离,从而控制小车靠前、靠左或靠右行驶,有效地规避障碍物,实验效果如图7 所示。
图7 小车避障实验图
4 结语
本设计利用Arduino 处理芯片,并结合电源、电机驱动、舵机、超声波等模块开发了自动避障小车,并验证了小车的自动避障的可行性。通过设计小车沿规定避障路线行驶实验,经测试后证明了小车的避障性能良好。虽然小车可以很好地完成行进过程中的避障作业,但是,智能小车还存在一些不足之处,例如,只采用一组超声波和舵机结合,舵机的旋转角度有限,小车不能全方位进行避障,如果搭配多组超声波和舵机或采用性能更好的传感器,它的自动避障效果可能会更好。