软件设计需要把程序流程确定好,要明确先运行哪一步再到哪一步,然后根据相关流程把程序敲写出来。由于本课题对红外遥控器与蓝牙遥控器都使用了,并且二者的使用思想和代码编程大同小异,但值得注意的是:使用红外遥控器不能通过PWM调节电机速度,因为调节PWM值会影响红外的信号接收,至此本设计主要以蓝牙遥控器为主。红外遥控器以及蓝牙遥控器如图(a)和图(b)。
图5(a)红外遥控器编码????????
?
???????????
?图5(b)蓝牙遥控器按键编码
该模式下可通过遥控器控制小车各项运动,通过控制小车左右二个进步电机的正转和反转来控制小车的前后左右运动。对此,先要确定电机驱动的真值表才能对小车的运动精准控制,小车电机驱动真值表如图5.1.1所示,(1)根据其真值表,可以对小车的运动进行编写代码,当引脚9和10为高电平,引脚8和9为低电平时,小车进行前进,其他运动方式设定雷同。(2)把这些运动方式封装和并进行蓝牙遥控实验,当按下字符’108’调用前进模式,其他运动雷同。
5.1.1电机驱动真值表
Left_go = 8 | Left_back = 9 | Right_go=10 | Right_back=11 | |
前进 | 0 | 1 | 1 | 0 |
后退 | 1 | 0 | 0 | 1 |
停车 | 0 | 0 | 0 | 0 |
左转 | 0 | 0 | 1 | 0 |
左旋转 | 1 | 0 | 1 | 0 |
右转 | 0 | 1 | 0 | 0 |
右旋转 | 0 | 1 | 0 | 1 |
在该模式中,还有个难点在于对机械臂的控制,机械臂的控制主要难度有二点,一是该机械臂构架材料用的时亚克力板,该板干脆易断,使用螺丝扭进机械臂里,螺丝扭太紧往往会让机械臂转动困难,螺丝扭太松又会时机械臂容易滑动,夹物体用不上力;二是对舵机的控制,控制舵机首先要明白舵机的PWM控制范围。根据舵机的250份划分原理可知道舵机的转动可分为250份,并得到控制舵机转动的PWM响应范围0.5MS---2.5Ms,则可得出舵机PWM的宽度为2MS = 2000uS;
因此,可通过舵机转动的PWM响应频宽和转动的划分计算出控制转动一份舵机最少需要频宽为: ??????????????????2000uS÷250=8uS;
所以,舵机的PWM的控制精度为8us;
所以,可以以8uS的递增控制舵机转动与定位;
又因为,舵机可转动角度为185度,那么可算出舵机转动一份所占用的角度:
185度÷250=0.74度;
所以,舵机角度的控制精度为0.74度;
综上所述,可得:时基寄存器内的数值为250,舵机转动角度共185度,分为250份,把每份记作1DIV,得到1 DIV = 8uS , 250DIV=2mS;
则:185÷250 = 0.74度 / DIV;
至此,可初步得到可通过PWM控制舵机函数: 0.5MS + N×DIV;
0.5MS ≤ 0.5Ms+N×DIV ≤ 2.5MS。
据上可得,舵机转动角度为0度到180度对应的PWM为0.5MS到2.5MS,因而可以自行设计一个方波。
先设一个常量为X,先可以通过舵机转动0度到180度的总脉宽2MS、总角度180度以及初始脉宽5MS算出常量X:2000uS=(180*X)+500uS;
得到X=11uS。
再根据常量算出对应的角度所对应的脉宽,设脉冲宽度函数为A,舵机角度函数为B,可得到计算脉冲宽度的公式A=(B*11uS)+500uS。
当舵机转动到90度时对应的PWM宽度为1490uS,也就是1.5MS,至此可以设计软件复位。当值得注意的是由于调节了小车驱动的PWM以及多个负载以及考虑到信号串扰问题存在,使得本课题所设计的PWM脉冲宽度与实际使用的PWM发生一些偏差。不过,经过多次测试,舵机运行正常。除此之外,也可以使用Servo函数库直接控制,此方法比较简单,做一下简单描述。首先使用Servo函数库时,舵机处于连续转动,机械臂卡板时,舵机一定会抖动,因而容易损坏舵机。因为串口通信和servo函数库都使用了定时器的原因,毕竟,库函数时别人写的,核心内容并不容易弄懂,往往会出现一些莫名的问题。但使用自行设计PWM时,舵机连续转动抖动时,可以使用舵机非连续转动的方法,本课题便使用了连续转动加非连续转动的方法。自由运动模式程序流程图如5.1.2所示。
图5.1.2 自由运动模式程序流程图
寻迹模式主要时通过车底的两路寻迹传感器完成,当两路红外光线经白色路面反射回来时,两路红外传感器输出高电平,小车调用停止模式;当两路红外光线经黑色路面吸收后,无反射的红外光线,两路红外传感器输出高电平,小车调用停止模式;当左边的红外光线经白色路面反射回来红外光线,右边经黑色路面,无反射红外光线,则左边寻迹传感器输出低电平,右边寻迹传感器输出高电平,小车左转;反之,小车右转。寻迹程序流程图如图5.2.1 所示、小车智能寻迹实物如图5.2.2所示。
图5.2.1 寻迹程序流程图
图5.2.2 小车智能寻迹实物图
小车常遇到的障碍物类型如图5.3.1所示,(a)整个环境中均没有障碍物;(b)小车只有前方才有障碍物;(c1)小车的左边和前方有障碍物;(c2)小车前方和右方有障碍物;(d)小车处在U型通道里。
图5.3.1 障碍物4种避障类型
针对以上五种常见模式做出了如图5.3.2避障程序流程图,当输入寻迹模式时,开始测量前方距离,如果前方距离小于15cm,刹车,后退减速,左右测距,如果左边距离小于15cm并且右边距离也小于15cm,旋转调头,否则判断左边是否比右边大,如果是左转,刹车稳定方向,否则右转,刹车稳定方向,而其他条件下一直直行。
如图5.3.2 避障程序流程图
跟随常见的方法有:(1)使用左右二边各一个红外传感器,中间一个红外测距传感器组合的方法实现;(2)使用二个红外传感器装在小车头左右二边,在其传感器中间加上一个超声波测距传感器便可完成;(3)三个超声波传感器成排装在小车头部部分。第(1)种红外测距传感器成本较高,而且容易受光线影响大。经过对比第(2)种整体性能适中,性价比高;第(3)种虽然精准度高,但成本高,占用小车面积多,且笨重。本课题采用了第(2)种方法,当左右传感器输出低电平时,小车超声波传感器测量前方距离大于9cm并且小于等于30cm,小车直行;当左边红外传感器输出高电平时,左边的红外传感器输出低电平,小车左转,反之,当右边红外传感器输出高电平时,左边红外传感器输出低电平,小车右转,其他情况小车直行;当小车测量前方距离大于4cm并且小于等于9cm并且左右传感器输出低电平时,小车停车;当小车测量前方距离大于0cm并且小于等于4cm并且左右传感器输出低电平时,小车后退,其他情况下,小车停车。跟随程序流程图如5.4.1所示。
5.4.1 跟随程序流程图
本课题避障以及跟随都使用了测量距量,而测量距量主要是根据声波在空气中的传播速度为340m/s,以及测量时间得到的。下面来分析一下测距距离如何计算。
首先,设测量时间为X秒,测量距离为Y米。
因为,测量时间为超声波反射进障碍物反射回来接收到的时间,测量距离为超声波传感器到障碍物的距离;
所以,测量距离=(测量时间×声波速度)/2;
所以,Y米=(X秒×340)/2;
所以,X秒=(2Y米)/(340);
得到, X秒=0.0058*Y米;
整理得到,厘米=微秒/58;
由此,测量距离(厘米)=测量时间(微秒)/58。
测量时间可以先给超声波反射端2μs低电平,再给10μs高电平,然后持续给低电平,最后接收端所读取高电平时间便是测量时间。编程好了测量距离便可以直接通过串口发送到蓝牙遥控器。测距程序显示流程图如图5.5.1所示。
5.5.1测距程序显示流程图
经过测试,本课题可以在同一波特率下使用红外遥控与蓝牙遥控,在使用红外遥控器中发现红外遥控的误码率明显比蓝牙的高,查从多资料发现有可能是使用PWM调速时影响到红外遥控的接收了,也有可能是本身的抗干扰能力比较弱的问题,但其传输速度快,价格便宜;蓝牙遥控传输则会有一点点延迟,不过相对稳定而360度传输,传播距离更长,所以本课题以蓝牙遥控为主。关于蓝牙遥控的总流程如图5.6.1所示。
5.6.1智能小车总流程图
本章主要讲述软件设计,通过一个个模式的程序设计思想深层解析;分析舵机控制角度的计算以及超声波传感器测量距离的计算;最终根据一个个模式设计了智能小车软件总流程,还通过实验对比说明了红外遥控器与蓝牙遥控器的优缺点。