高婉婷,曳永芳
(山西师范大学 物理与信息工程学院,山西 太原 030000)
物联网技术飞速发展,涌现出了大规模新兴产业,其中,机器人制造产业是该领域发展的典型代表。扫地机器人、导航机器人、送餐机器人等将机械制造与物联网相结合产品的出现,给人们的生活带来了极大便利,同时也在工业生产中起着非常重要的作用[1-2]。智能小车又被称为移动机器人,它的设计涵盖了软件编程、硬件设计、单片机原理等多个学科,作为一门新兴的科学技术,可适用于复杂多变的工作环境[3]。本文设计的基于STM32智能小车的避障系统,可实现简单巡线避障和斜面防倾倒运动等功能。
本次设计选用STM32F103RCT6芯片作为核心,系统结构如图1所示,其主要由控制器模块、避障模块、红外巡线模块、电机驱动模块、电源模块及OLED显示模块组成。避障模块为本设计的核心模块,由超声波避障模块、角度检测模块和舵机组成。
图1 系统结构
电机驱动模块采用2个L298N模块分别驱动前端和后端的直流电机,进行PWM软件调速(通过调节占空比完成)。L298N模块内部为双H桥电路,包含4通道逻辑驱动电路[4],可使用1个模块就非常方便的驱动2个电机。1个H桥电路主要由4个MOS管组成,MOS管的导通状态决定了电机的转动方向。电机驱动模块的控制端引脚与单片机的PC0~PC3、PC6~PC12、PD2端口相连,1个电机由2个引脚来控制其转动方向,单片机通过控制I/O口的输入,改变其控制端的电平状态使MOS管的导通状态发生改变,从而使电流方向发生改变。电流方向控制电机的转动方向,使小车前进、后退或停车。采用PWM软件调速,调节小车左右轮的速度大小与转动方向,实现对小车行驶方向的控制。前部电机驱动模块如图2所示。
图2 电机驱动模块原理
由于各模块所需电压不同,供电电压分别为5 V和3.3 V,需采用多种电源供电。串联两节锂电池为电源模块提供7.4 V的初始电压作为输入,首先选用MP1584芯片进行降压转换,可实现5 V稳定的直流电压输出,其具有稳定性高和转换效率快等特点,为控制器模块、超声波模块、舵机模块和红外巡线模块供电。之后采用CJT1117B-3.3芯片将MP1584芯片输出的5 V电压转为稳定的3.3 V直流输出,为MPU6050模块供电。同时,由于电机驱动模块所需输入电压较大,本设计带Vout=Vin功能,即模块接口输出的电源电压等于输入电源的电压,以此来驱动电机模块。
小车的红外巡线模块主要由4个TCRT5000红外反射传感器与单片机组成。模块内部采用LM393比较器,其工作时,红外发射管一直处于导通状态,不断发射红外光,通过利用黑白颜色对红外光线反射强度的不同来影响红外接收管的通断状态,使得比较器同相输入端的电压发生变化,且输出不同[4]。小车在贴有黑线的白色路面行驶,4个红外传感器位于小车前方,独立工作,互不干扰,实时检测道路信息传递给单片机,其输出分别接于单片机的PA4、PA5、PA6、PA7引脚,通过检测4个红外传感器的输出电平状态来判断小车目前距离设定路线的偏离程度,及时调整车轮转速来控制小车的行驶方向,使小车回到设定路线。红外传感器检测反射距离范围为1~25 mm,工作电压为3.3~5 V,其原理如图3所示。
图3 红外传感器原理
图4所示为超声波模块原理。超声波模块采用HCSR04,其Trig管脚与Echo管脚分别与STM32单片机的PB4和PB3引脚相连。通过控制单片机I/O口的输入,使超声波模块从Trig端接收一个不少于10 μs的高电平,模块内部会向某个方向发射8个40 kHz的超声波。从发射时刻开始,打开程序中的定时器计时,由于超声波遇到障碍物会反射回来,使超声波接收器接收到超声波,此时Echo管脚会输出一个高电平,因此通过检测Echo端的电平状态来判断有无信号返回。接收到回响信号后,关闭定时器,定时器所计的时间为高电平持续时间,即超声波往返的时间[5-7]。超声波在空气中的传播速度为340 m/s。
图4 超声波模块原理
利用式(1)可计算出障碍物距离此刻小车的距离d,其中t为超声波往返的时间。超声波测距范围为2~600 cm。
舵机模块的信号端口接单片机的PA8引脚,从PA8端口产生一个周期为20 ms的脉宽调制信号作为舵机的控制信号[8],通过控制单片机I/O口的输入,调整其控制信号的脉冲宽度,使舵机转动到一定角度。脉冲宽度对应舵机偏转角度的变化,使其可以完成180°范围内的转动,宽度时间一般为0.5~2.5 ms。根据脉冲宽度,舵机会转到对应偏角,之后不再变化,直到单片机发送下一个脉冲信号。舵机模块与超声波模块相连,通过舵机带领超声波模块转动,可测得左方和右方的障碍物距离。
小车采用MPU6050六轴传感器进行角度检测。MPU6050模块内部包含三轴陀螺仪和三轴加速度传感器[9],还自带数字运动处理器DMP(Digital Motion Processor,DMP)。DMP内置卡尔曼滤波算法,经其处理可将获取的陀螺仪和加速度数据直接转为四元数输出,降低了外围微处理器的工作压力,可以方便实现小车运动姿态的解算。
MPU6050模块通过单片机进行初始化配置,采用模拟I2C通信方式,将单片机的PB10、PB11引脚分别配置为SCL和SDA引脚与MPU6050模块通信。当小车运动时,主机通过读取从机存储在寄存器中的六轴数据来获取角度检测的原始数据,将此数据经数字运动处理器处理后得到四元数,从而计算小车运动过程中的角度。
计算公式如下:
俯仰角:
横滚角:
航向角:
式中,q30=230,quat[0]~quat[3]为DMP解算后的四元数,为q30格式,即浮点数放大了230倍,所以先将其格式转化为浮点数格式,即除以q30,得到q0~q3,再进行欧拉角的计算。
本设计将STM32单片机配置为SCL和SDA的PB10,PB11引脚另引出一组,用于与OLED模块进行模拟I2C通信,实时显示小车运动参数。
系统软件采用C语言编程实现,配合编译软件Keil μ Vision5 编译。首先对各模块进行初始化处理,清除之前所存储的数据,之后传感器将所获得的信息发送至单片机引脚,单片机对此进行判断处理后实现小车的自主控制。
本次设计中,避障程序是巡线避障以及斜面避障的基础。图5所示为避障程序流程。小车行驶时,单片机首先通过分析超声波传感器发送的信号来判断前方是否存在障碍物,再接着执行程序中设定的操作。本设计设定的障碍物距离为20 cm,即当超声波传感器测得前方物体与小车的间距不大于20 cm时,则会认为前方存在障碍物,进行相应避障操作。避障操作如下:若前方存在障碍物,小车停下,通过舵机的带领测其左右方是否有障碍物并记录,右方无障碍物时,小车将执行右转避障,直至检测到无障碍后,停止右转,执行后续操作;右方有障碍物,左方无障碍物时,小车将执行左转避障,直至检测到无障碍后,停止左转,执行后续操作;当前方、左方和右方都有障碍物时,小车先后退,右转至一定角度,然后沿此方向行驶,继续进行距离检测、避障。若前方无障碍物,则将与巡线或斜面行驶相结合,完成对应操作。
图5 避障程序流程
巡线避障程序流程如图6所示。小车安装的4个红外传感器从右至左分别为O1~O4,当它在白底黑线的路面行驶时,单片机首先接收超声波传感器发送的信号,根据检测出的距离分析有无障碍物。若无障碍物,则通过分析接收到的4个红外传感器的信号,发送小车运动命令给电机模块,使小车做出相应操作,进行巡线;若有障碍物,小车先执行避障操作,同时记录避障方向,直到检测出无障碍物时,向相反方向运动,使小车重新回到线上,继续做巡线运动。
图6 巡线避障程序流程
斜面避障程序流程如图7所示。在普通路面行驶时,单片机首先通过分析角度传感器发送的信息,得出小车目前的运动倾角,若倾角未超过预设倾角,则通过超声波传感器发送的信号检测出前方障碍物距离,无障碍物时,继续向前行驶,有障碍物则进行避障操作;若倾角超过设定角度,则先进行前方障碍物距离分析,无障碍物时,根据不同角度所对应的操作进行低倾角方向下坡避障,同时减速,有障碍物时,进行避障操作行驶至无障碍物时再执行对应角度的避障操作,完成下坡避障。
图7 斜面避障程序流程
在设计小车的过程中,经过多次室内实验和程序的反复调试,小车最终可达到预期目标,基本实现在白底黑线路面巡线过程中完成距障碍物20 cm外的避障运动,而后重新返回标线上继续做巡线运动;从普通平面向斜面运动时,当小车俯仰角超过30°或横滚角的绝对值超过20°时选择低倾角方向下坡避障。整个运动过程中,小车的运动性能较为稳定。系统测试结果如图8所示,其中,图8(a)为小车在巡线过程中面对障碍物时所进行的避障返回操作;图8(b)为小车在斜面运动过程中运动角度超过其预设倾角时的避障操作。
图8 系统测试结果
本文设计的基于STM32智能小车的避障系统,利用物联网技术将高性能、低功耗的STM32芯片与多种传感器通过软件编程进行融合,实时检测道路信息,使小车完成简单巡线避障与斜面避障运动;同时,小车整体采用螺丝将各模块固定在车身上,结构简单,易于安装,操作简便,具有较强的现实意义[9-10]。