目录1、引言1.1智能小车的设计意义和作用 (3)2、系统总体设计 (4)3、硬件设计3.1循线模块 (5)4、软件设计4.1软件调试平台 (7)4.2系统软件流程 (8)4.3系统软件程序 (9)5、调试及性能分析 (12)6、设计总结 (13)7、作品实物图 (14)8、参考文献 (15)1、引言1.1智能小车的设计意义和作用智能小车是移动式机器人的重要组成部分,介绍一种基于AT89S52单片机的智能小车。
通过不断检测各个模块传感器的输入信号,根据内置的程序分别控制小车左右两个直流电机运转,实现小车自动识别路线,寻找光源,判断并避开障碍物,检测道路上的铁片、发出声光信息并计数显示,智能停车等功能。
作为20世纪自动化领域的重大成就,机器人已经和人类社会的生产、生活密不可分。
因此为了使智能小车工作在最佳状态,进一步研究及完善其速度和方向的控制是非常有必要的。
智能小车要实现自动寻迹功能和避障功能就必须要感知导引线和障碍物,感知导引线相当给机器人一个视觉功能。
避障控制系统是基于自动导引小车(avg—auto-guide vehicle)系统,基于它的智能小车实现自动识别路线,判断并自动避开障碍,选择正确的行进路线。
使用传感器感知路线和障碍并作出判断和相应的执行动作。
该智能小车可以作为机器人的典型代表.它可以分为三大组成部分:传感器检测部分,,执行部分,cpu。
机器人要实现自动避障功能,还可以扩展循迹等功能,感知导引线和障碍物。
可以实现小车自动识别路线,选择正确的行进路线,并检测到障碍物自动躲避。
考虑使用价廉物美的红外反射式传感器来充当。
智能小车的执行部分,是由直流电机来充当的,主要控制小车的行进方向和速度。
2、系统总体设计AT89S52单片机作为总的控制核心,利用传感器,在循线信号、寻光信号、检测障碍物信号等的输入作用下,控制电机采取相应的动作,从而调整小车做合适的选择。
同时,如果有检测到金属片的信号,则将该信号以声光的形式表现出来并令数码管计数显示。
主要有循线、寻光、避障、金属检测、数码显示、电机驱动、电源、单片机控制等8大模块,如2-1图所示。
图2-1 功能模块图3、硬件设计3.1循线模块循线模块,循迹是指小车在白纸地板上循黑线行走通常采取的方法是红外探测法,红外探测法即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,可以根据黑带和白纸对光线的发射系数不同,可以利用车底接收到的发射光的强弱来判断“道路”黑带。
采用四个红外光电管分别置于移动智能小车前板底座的两侧,确保沿着黑线行驶。
红外光电管由一个发射管和一个接收管组成,安装在同一面上。
红外光电管的工作原理是由发射管发射出的红外线,经检测面反射后被接收管吸收,由于检测面颜色的不同,对红外线的吸收程度也不同,从而反映在接收管的阻值变化上。
这种阻值变化通过外接通路就能转换成单片机能够识别的信号。
由于红外光电管发出的是红外线,日光对小车的检测不会产生影响,因而其抗干扰性能好,从而实现小车的循迹功能。
但红外探测器探测距离有限,一般最大不应超过3cm。
循迹功能如3-1,3-2图所示。
图3-1 循迹功能图图3-2循迹功能图本设计需要检测小车的运动状态,沿着路面黑线运动。
采用发射取样式,单光束红外传感器接收信号,电路在5V电压下工作,根据该型号传感器红外发射管所需的工作降压(红外发射管的正向降压在1-1.3V)和工作电流(红外发射管的电流为2-10mA),选取负载电阻R=15千欧,红外发射管负载电阻R=220欧。
4、软件设计4.1 软件调试平台Keil for C51是美国Keil Software公司出品的C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,Keil C51软件还提供了丰富的库函数和功能强大的集成开发调试工具,生成的目标代码效率非常高,且容易理解。
C51开发中除了必要的硬件外,同样离不开软件,我们写的源程序要变为C51可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,但现在已极少使用手工汇编。
Keil提供了包括C编译器、宏汇编、连接线、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision2)将这些部分组合在一起。
如图4-1所示。
图4-1 Keil for C51开发平台4.2系统软件流程系统软件流程图如图4-2所示图4-2系统流程图4.3系统软件程序#include<reg52.h>#define LED P1 //定义数据显示端口sbit D1=P2^0; //定义前方左侧指示灯端口sbit D2=P0^7; //定义前方侧右指示灯端口sbit ZIR=P3^5; //定义前方左侧红外探头端口sbit YIR=P3^6; //定义前方右侧红外探头端口sbit QIR=P3^7; //定义前方正前方红外探头端口sbit M1A=P0^0; //定义左侧电机驱动A端sbit M1B=P0^1; //定义左侧电机驱动B端sbit M2A=P0^2; //定义右侧电机驱动A端sbit M2B=P0^3; //定义右侧电机驱动B端sbit SB1=P0^4; //定义语音识别传感器端口sbit MIC=P0^6; //定义蜂鸣器端口void delay(unsigned int z){while(z--);SB1=!SB1;return;}void car (unsigned char a){M1A=0;M2A=0;M1B=0;M2B=0;switch(a){case 1:{M1A=1;M2A=1;break;};case 2:{M1B=1;M2B=1;D1=0;D2=0;break;};case 3:{M1B=1;M2A=1;D2=0;break;};case 4:{M1A=1;M2B=1;D1=0;break;};}}void main(){car(1);while(1);{D1=1;D2=1;LED=0x00;if(QIR==0){car(2);delay(15000);car(1);}if(YIR==0&&ZIR==1) {car(3);delay(15000);if(YIR==0&&ZIR==1){car(1);}}if(ZIR==0){car(4);delay(15000);if(YIR==0&&ZIR==1){car(1);}}if(YIR==0&&ZIR==0) {car(2);delay(30000);}}}5、调试及性能分析整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。
首先写入电机控制小程序,控制其正反转,停机均正常。
加入避障子程序,小车运转正常,调整灵敏度达最佳效果。
加入显示时间子程序,显示正常。
铁片检测依靠接近开关,对检测信号进行处理并实时显示和发出声光信息,无异常状况。
路程显示部分是对霍尔管脉冲进行计数,为了尽量达到精确,车轮加装小磁片。
接着对黑带检测模块调试,发现有时小车会跑出黑带,经判断是因为红外线收发对管灵敏度不高,调整灵敏度后仍然达不到满意效果,疑是受环境光影响,利用塑料套包围红外线收发后问题解决。
趋光电路主要由三个光敏电阻构成,调整三个光敏电阻的角度同时测试软件,以最佳效果完成趋光功能。
整机综合调试,上电后对系统进行初始化,接着控制电机使小车向前行驶,突然发现系统即刻进入外部中断1,重复多次测试,结果都是自动进入该中断。
推断是由刚上电时电机起动所引起,为了避免上电瞬间的影响,在启动小车后延时几毫秒,再开外部中断,结果问题解决。
允许的话应采用双电源供电,即电机和电路应分开供电,L293D与单片机之间采用隔离信号控制。
这样就不会出现小车启动时程序出错和数码管显示闪动的问题。
在计程精度上,可用红外线原理获得较高精度。
6、设计总结通过本次实训设计,不仅是对我们课本所学知识的考查,更是对我们的自学能力和收集资料能力及动手能力的考验,本次实训使我们对一个项目整体设计有了初步认识。
再有对电路板的制作有了一定的了解。
并学会了使用keil软件设计。
本次实训使我们意识到实验的更重要性,在硬件制作和软件调试过程中,出现了很多问题,最终都是通过实验的方法来解决的。
还有以前对程序只是一个模糊的概念。
通过这次实训极大的锻炼了我们的思考和分析问题能力。
并对单片机有利益更深的认识。
总之,实训过程中,无论是对学习方法还是理论知识,我们都有了新的认识。
受益匪浅。
这将激励我们今后再接再励,不断完善自己的理论知识提高实践运作能力。
8、作品实物图9、参考文献1)、《单片机应用技术》2)、《周立功单片机》3)、《单片机原理与应用》4)、《8051单片机程序设计与实例》5)、《MCS-51单片机实验指导》。