以上就是寻线和红外避障功能的一个简单的流程图,他告诉了我们这个程序是怎样运作的。 4.2.2 超声波传感程序设计 超声波传感器测距是通过先发射超声波然后检测传回的超声波所耗费的时间从而计算距离的一个方式,下面是流程图。 各种参数定义及初始化 发出超声波 接收超声波 进行计算 输出
图10超声波测距的图 以上就是超声波的一个简单的流程图。 4.2.3 DS18B20温度传感程序设计 在这里我使用了总线的库以及温度的库,所以可以非常方便的得出结果。得出以下控制图。 各种参数初始化及定义 读取传感器内部ROM 将结果输出
图11温度传感图 这里重要的是读取出DS18B20内部的ROM并且输出到电脑监视窗口中。
25
4.2.4 红外遥控程序设计 我所使用的红外模块,因为配备了一个遥控器,所以我先读取出每个遥控中按钮的值,然后将每个按钮的值记录下来,所以就将每个值作为一个操作命令,当遥控器中的那个按钮按下时,就会发射出那个对应的值,然后当红外接收头接收到信号时,处理器就会读取到那个值并按照程序做出相应的反应,以下就是红外控制的图。 各种参数定义以及初始化 红外遥控发射信号 处理器接收信号并做出相关处理 控制电机
图12红外遥控图 4.3 程序逻辑与思路 程序的设计我尽量以模块化的方式来进行设计,这样的好处是可以从总体上来进行大局的规划,也可以非常方便的进行更改和改进,而且一旦出了问题可以非常明确的找出出问题的地方且不用牵涉到大局就可以完成修改,这种方法简单且实用,特别是遇到的系统越是特别复杂庞大时就越能体现出这种设计方法的优势,比如在这里我先设计出要控制电机的子函数,然后到后面就可以方便调用,而且在设计程序时尽量用标准规范的格式,尽量在程序后面写上标注,这样也便于理解。
26
4.4 总结
在系统设计中程序是扮演着非常重要的角色的,程序的好坏直接决定着运行的结果,如果程序出错当然系统就不能正常运转,但是除了出错这种情况外,顶尖的程序员和普通程序员所写出的程序也是有很大的差距的,就好比我在这里所设计的智能小车中的寻线程序,到底小车怎样进行寻线是一个非常重要的问题,把这个根源上的方法上的问题解决好了就会取得非常好的效果的,显然如果是方法没选好那么效率就会变得非常低下,效果也不理想了,所以应该在这里多下工夫的。
27
5. 系统整体调试与总结
5.1 软件的调试与运行
软件的调试与运行也是非常重要的一个环节,他是用来检测系统的工作状态以找出系统可能出现的问题的。在这里我分别对小车的每个功能进行了调试。
首先是小车的寻线功能,最开始我是画了一根很细的线,可是由于传感器精度不高,所以无法检测出来,所以并没有成功,最后我用绝缘胶带贴在地上便组成了一个小圈这样传感器就能检测出来了,而且我还反复调试程序,调整PWM输出,提高速度,让小车可以非常顺利的沿着黑线走并且不出边界。
红外避障功能中因为避障用的红外传感器检测距离有限,所以只有面前的东西他才能检测到并做出相应的动作,而且障碍物必须面积比较大,关键还是要传感器要能够检测得到,因为传感器就是小车的“眼睛”。
超声波测距功能,这个可以连上电脑用电脑的监视窗口查看返回的结果,我也调整了刷新时间,便于观测。其中超声波测距的距离也是有限制的,当然不可能无限远的距离也测量。
DS18B20温度传感器,温度传感器要能够读取传感器内部的寄存器,也就是存储温度的存储器,然后对这个值进行一定的转换,最后在通过总线接口输出到处理器中并由处理器输出到监视窗口由我们观测到。
红外遥控,这个就是要先得到遥控器中的数值,然后把这个数值带到程序中进行操作。
5.2 设计存在的不足
在设计中我只使用了三个寻线传感器,如果传感器更多一些,我就可以写一些更复杂的算法,这样小车也就能够跑的更加的流畅,速度也可以更快一些,避障传感器也是一样,有了更多的避障传感器也能够感知到更多的环境变化。而且其实我在寻线传感器中的算法还是过于简陋,我是这样想的,因为黑线只有一条,所以肯定一个传感器在检测到黑线的时候另外的传感器是检测不到黑线的,所以我写的程序就是当其中一条传感器检测到黑线时让小车做出怎样的动作,其实也有很过更好的算法,比如,因为有三个寻线传感器,中间一个两边各一个,所以我们可以让黑线一直都保持在让中间的传感器检测得到的一个状态,这样的话小
28
车同样能够沿着黑线走了,我们在程序时就要写一个循环函数用来循环检测中间传感器的状态,这样,小车就不断的调整自身的姿态,走起来也会顺畅的多。其次我还想到如果只有两个传感器的话程序要怎么写,如果只有一个传感器的话程序要什么写,两个传感器的话用我的思路稍做改进就行的,如果只有一个传感器的话该怎么办呢,这个问题我还真想了一会儿,后来想到其实不也能够用扫描的办法吗,我就先让小车左右摆,这样前面的那一个传感器就能够扫描到黑线,当扫描到黑线的一瞬间就往前走,这样也能够实现寻线的功能,不过效率肯定就低一些了。至于其他的一些程序,比如什么超声波或是温度之类的,如果能够用到库函数的就尽量用库函数,这样既能够减少开发成本,也能够很方便的完成开发,这也是Arduino系统的一大优势。 5.3设计可能的改进与完善
设计中其实电力还是不够充足,导致电机工作的不是很快,其实也可以换成那种已经做好的电源模块,那样的话驱动力就会好的多了。设计过程中也遇到过很多问题,有很多是程序的问题,在设计的过程中得到教训:不要一口气把程序写完,应该是边写边调试,这样能够尽早发现问题,也能够在发现问题的时候便于调试和修改,一下子把程序写完了也不好找到问题的所在。其实我最想做的还是给小车装上ZIGBEE,那样就可以与电脑连接,可以在电脑上无线控制小车的运行并且可以把小车当作一个平台来实时采集数据。
29