1、智能小车(红外版)项目报告目录一、 引言-1二、 总体方案-1三、 电路与程序设计-4四、 小车调试方案和调试结果-8五、 遇到的问题和解决方案-9 六、 工程管理方案-10七、 总结和体会-10一、 引言智能,即可以按照预先设定的模式在一个环境中运行,不需要人为的管理。智能小车就是其中一个体现。本文的智能小车设有自动避障和自动循迹的功能。其中避障的实现需要注意当小车与障碍物之间距离小于某一数值时,车通过电动机转向;寻迹的实现则需要通过车底部的光电传感器检测行驶方向是否偏离黑线,再通过电动机调整运行方向。小车系统以 STC89C52 单片机为系统控制处理器;采用红外传感获取轨道及障碍物的信息,
2、来对小车的方向和速度进行控制。此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。二、总体方案本小组设计的智能小车的控制机制是:以 STC89C52 单片机为控制核心的智能循迹避障小车。采用红外探测法实现信号检测,通过红外发射管和接受管来感知给定黑色轨迹和障碍物,将感知的信号返回给单片机,然后单片机对不同信号进行区分,结合软件编程控制小车前进、后退、左转、右转,从而实现循迹避障功能,即在有轨迹的地方小车能沿轨迹行驶,当遇到障碍时小车能够自动避开。1.实现功能(1)寻迹功能该智能小车在画有黑线的白纸 “路面”上行驶,由于黑线和白纸对光线的反射系
3、数不同,可根据接收到的反射光的强弱来判断 “道路”一黑线。本车用了比较普遍的检测方法红外探测法。红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。(2)避障功能该智能小车利用红外对管获取障碍物的信息,小车在前进时位于小车前方的红外管不断发射红外光,当前方有障碍物时,红外管被反射,并被接收管接收。2.框图图一3.原理图(图二)Stc89c52循迹红外对管时钟电路复位电路报警电路电机驱动避障红外对管4.流程图YN Y
4、N Y智能小车寻迹流程图(图三)开始系统初始化中间传感器有信号?左侧传感器有信号?右侧传感器有信号?小车完全脱离轨道结束小车直走小车右转小车左转延时一段时间NYNYNY智能小车避障流程图(图四)三、电路与程序设计(1)电路设计(各单元模块功能):1、控制器模块采用 STC89C52 单片机,直接通过 USB 线为小车烧录程序做开发,不用购买转换器。作用:智能小车的控制核心,通过对单片机烧录控制程序,控制小车前进、后退、左转、右转,从而实现循迹避障功能,即在有轨迹的地方小车能沿轨迹行驶,当遇到障碍时小车能够自动避开。开始系统初始化正前方传感器有信号?左边传感器有信号?右边传感器有信号?后退左转小
5、车直走左转右转2. 电机驱动模块运用两块 LG9110 驱动芯片来分别控制左前轮和右前轮。该芯片简单易管理,充分主程序有时间去处理其他更多功能。作用:用驱动芯片做单片机与马达的桥梁,当芯片接收到来自单片机的命令信号时,芯片会做出相应的命令来使马达运作,从而实现控制左转与右转的功能。3、寻迹模块智能小车设计要能实现在黑白轨迹线路上寻迹行驶,小车就要能区分路面上的黑白颜色,采用的是红外光线对黑白颜色反光程度不同的原理。同时也可以根据这种方法来实现避悬崖及其他更多的高级功能。4、避障模块智能小车的避障方法采用红外光线反射原理,可以很好的检测到前方能够反光的白色物体,从而实现能够绕障碍物与防撞的功能。
6、5. 电源模块采用 4 节 1.5V 干电池供电,电压达到 6V,给单片机、电机和其他芯片供电。作用:给小车提供能源。6. 发光二极管和蜂鸣器采用普通发光二极管和蜂鸣器分别发出光声进行提示。作用:两个发光二极管一直亮着表示小车处于前进状态;发光二极管闪烁和蜂鸣器鸣叫表示小车后退;左边的发光二极管亮而右边的发光二极管灭表示小车左转;右边的发光二极管亮而左边的发光二极管灭表示小车右转。7.8 位 LED 指示灯充分发挥程序状态指示灯、跑马灯、流水灯、花样灯等更多变幻多样的功能。(2)程序设计:程序设计原理:探测障碍物的红外对管和寻迹的两个红外对管引起的电平变化,并将其变化传递给 STC89C51
7、单片机,经过一定计算处理,并配合两个直流发电机通过前进、后退 、左转、右转等动作完成寻迹和避障功能。1、主程序模块#include#include#define GPIO2 P1#define GPIO3 P2#define uchar unsigned charvoid delayms(uchar x); /延时子程序void display(); /数码管显示程序void bizhang(); /避障程序void qian(); /前进void hou(); /后退void zuo(); /向左void you(); /向右void stop(); /停止void xunji(); /寻迹
8、子程序void voicecontrol();sbit IB1=P00;sbit IA1=P01;sbit IB2=P02;sbit IA2=P03;sbit D1=P20; /左前方 LEDsbit D2=P07; /右前方 LEDsbit BE=P06; /蜂鸣器控制位sbit BT=P04; /声音检测位sbit h1=P37; /前方避障红外检测sbit h2=P35; /寻迹左红外检测sbit h3=P36; /寻迹右红外检测sbit s2=P34;uchar runflag=0,flag1,flag2; /标志位uchar num1=0,num2=0,t,k;uchar code
9、DPIO10=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;/数码管段码2、延时子程序void delayms(uchar x)uchar a,b,c;for(a=0;ax;a+)for(b=0;b100;b+)for(c=0;c100;c+);3、数码管显示子程序void display()uchar i,j;t=D1;i=num2/10; /秒的十位j=num2%10; /秒的个位switch(i)case 0:GPIO2=0x00;break;case 1:GPIO2=0x01;break;case 2:GPIO2=0x02;brea
10、k;case 3:GPIO2=0x04;break;case 4:GPIO2=0x08;break;case 5:GPIO2=0x10;break;case 6:GPIO2=0x20;break;case 7:GPIO2=0x40;break;case 8:GPIO2=0x80;break;default:break;GPIO3=DPIOj;D1=t;4、寻迹子程序void xunji()if(h2=1if(h2=0delayms(5);you();if(h2=1if(h2=0 void voicecontrol()if(BT=0) /声音检测while(BT=0); /直到没有声音if(ru
11、nflag=0) /判断运动标志位runflag=1;stop();delayms(100);while(BT);else runflag=0;qian();5、避障子程序void bizhang()if(h1=0) /前方遇到障碍物delayms(1);if(h1=0)hou(); /先后退,右转,前进,左转,前进,左转,前进,右转/前进,实delayms(30);/现躲避障碍物并沿原方向前进you();delayms(15);qian();delayms(40);zuo();delayms(15);qian();delayms(80);zuo();delayms(15);qian();de
12、layms(40);you();delayms(15);qian();四小车的调试方案和调试结果(1)各模块调试方案和结果:1、控制器模块:打开小车开关,观察小车在初始程序下是否工作正常。通过测试,控制器模块工作正常。2、电机驱动模块:烧录电机控制程序,观察两个电机正反转是否正常。通过测试,电机驱动模块工作正常。3、电源模块:安装电池,打开小车开关,观察小车电源灯是否亮。电源灯亮,电源模块工作正常。4、发光二极管、蜂鸣器和静态数码管:打开小车开关,观察发光二极管和蜂鸣器在初始程序下是否工作正常。通过测试,控制器模块工作正常。(2)系统功能调试方案和结果:在 keil 软件上编写程序之后,生成.
13、hex 文件,并将它烧录到单片机内,打开开关,使小车在白底黑色跑道上行驶,若小车放在白色区域任意位置,能自动找到黑色跑道,并按照跑道行进。小车在椭圆型、S 型、六边形等轨道都可以实现寻迹。向前运行的机器人能发现前方白色障碍,先倒车再转弯绕过障碍物。如不能则再次修改程序、检查电路,直至发现错误或测试成功。五遇到的问题和解决方案(1)硬件制作:1、在最初焊接元器件的时候,没注意到各电阻的阻值有差异,之后用万用表将各阻值电阻测量好并按照图纸焊;2、组装完小车之后进行初步测试时,我们发现打开开关后,灯未亮,发动机未工作,初步认为是芯片出了问题,第一次更换的芯片也存在问题,由于没及时排除这个因素,出现了
14、后面一系列的差错,甚至将电动机的线接反,经最终老师们的指导,重新换了一块芯片,小车能正常运转。(2)程序编写:由于该程序的编写编译需要用到 kiel 软件,而我们小组所有成员之前都没有接触过这个软件,所以最大的问题就是我们完全不会使用这个软件,还好之前我们学过 C 语言。我们小组查找各种资料视频,从头开始学习 keil 软件,一起讨论,也咨询懂的同学,加上有一点 C 语言编程基础,慢慢的写出了程序。(3)功能调试:1、功能调试的时候发现我们的小车不会转弯,遇到障碍物后会倒退,就是不转弯,继续往前走,遇到障碍物又往后退,周而复始。通过测试发现,是因为我们下面的发光二极管损坏了,不能接收信号,之后
15、更换二极管后能够接收信号。2、更换二极管后虽然能够接收信号,但是发现转弯的时候小车转动的方向与理想情况相反,经过思考,发现是因为发动机的 M1 和 M2 口接反了,调换之后小车能够正常寻迹。六、工程管理方案 (1)人力资源配置:组长 A:主要负责小车芯片部分电路焊接与调整,调试,负责编程以实现小车各项功能,小车 MV 拍摄,制作视频并进行后期加工。组员 B:主要负责机械组装小车,查找相关资料,轨道的制作,调试,撰写终期检查报告,负责编程以实现小车各项功能,以及协助小车 MV 拍摄。组员 C:主要负责传感器部分电路焊接与调整,调试,撰写终期检查报告,轨道的制作,负责编程以实现小车各项功能,以及协
16、助小车 MV 拍摄。 (2)项目进度计划:小组成员首先完成了主板和各部件的焊接以及机械组装,之后通过网络以及各种书籍去学习了解 keil 软件、电动机、LED 灯、蜂鸣器等部分的工作原理,学习完之后开始进行编写程序,然后借助烧录软件把程序烧录到小车,最后进行小车的调试及错误更改。七、总结与体会 本学期我们小组的任务是实现智能小车寻迹避障的功能。这个过程非常有趣,在动手操作的同时也学到了单片机以及 keil 软件的相关知识。通过此次的设计制作,使我们深刻认识到了动手能力和理论知识的重要性,而理论与实践的结合更是重中之重。当然,我们也深刻地认识到我们的不足,由于自身理论知识的欠缺和动手能力的不佳在
17、工作中频频受阻,走了好多弯路,虽然在制作过程中不可避免地遇到很多问题,但是最后还是在老师以及同学的帮助下圆满解决了这些问题,实现了整个系统设计与最后调试,相关指标达到预期的要求,圆满地完成了本次设计任务。在今后的学习生活中,还是要不断充实自己的知识金库,只有坚实的理论基础才能在进行实践时有条不紊。通过这次设计,小组成员了解并掌握了传感器的基本理论知识,更深入的掌握单片机的开发应用和编程控制。为以后从事单片机软硬件产品的设计开发、打下了良好的基础,树立独立从事产品研发的信心,并在这种能力上得到了比较充分的锻炼。且我深刻的认识到团队的协作真的很重要,只有我们分工明确,互相监督,共同讨论,才有可能圆满的完成这项设计。当然周围人的帮助也很重要,感谢一直帮助我们答疑解惑的老师和同学,有了你们,才有了我们这次实验的成功。