智能循迹避障小车报告书.docx
《智能循迹避障小车报告书.docx》由会员分享,可在线阅读,更多相关《智能循迹避障小车报告书.docx(16页珍藏版)》请在冰豆网上搜索。
![智能循迹避障小车报告书.docx](https://file1.bdocx.com/fileroot1/2023-1/8/db5c9c0e-a18c-4037-b3bb-e72be36ce970/db5c9c0e-a18c-4037-b3bb-e72be36ce9701.gif)
智能循迹避障小车报告书
电子科协竞赛项目报告书
参赛作品:
基于51单片机的智能寻迹避障小车
小组成员:
盛博
专业班级:
电信1205班
报告提交日期:
2013年4月12日
目录
1设计要求与功能3
1.1设计基本要求.......................................................................................................3
2硬件设计.....................................................................3
2.1主控系统及所需主要元件...................................................................................3
2.2机械系统...............................................................................................................4
2.3电机驱动模块......................................................................................................5
2.4循迹模块6
2.5避障模块6
2.6电源模块7
2.7报警模块..............................................................................................................7
2.8远程操控模块......................................................................................................8
3软件设计8
3.1主程序及框图......................................................................................................8
3.2电机驱动程序......................................................................................................9
3.3循迹程序..............................................................................................................9
3.4避障程序............................................................................................................10
3.5报警及远程操控程序........................................................................................10
4调试过程.......................................................................................................................11
5总结...............................................................................................................................11
附录总C程序11
一设计要求与功能
设计并制作一个能自动循迹壁障的智能小车。
可沿不规则黑色轨迹行驶,遇到障碍可自动绕行,遇到黑色停止线自动停止,轨迹、通道、障碍现场如图。
1.基本要求
(1)小车启动沿着轨迹行驶,遇到终点线停车;
(2)小车遇到行驶轨迹范围内的障碍物应自动绕行,脱离轨迹后能自动寻找轨迹并形式到终点。
2.发挥部分
(1)增加声、光报警功能,增加无线遥控启动、停止功能;
(2)利用Protel或者AlitumDesigner等软件进行PCB设计。
二硬件设计
2.1主控系统及所需主要元件
主控系统由STC89C52单片机负责,通过接收并分析信号模块传输过来的信号对各模块下达指令,使各模块能持续并稳定地共同工作,形成有机的整体,从而实现小车的各种功能。
所需主要元件:
STC89C52单片机,减速电机,红外对管等。
各口功能:
P0.0-P0.2是红外传感器信号输入口;
P0.3-P0.6是四路红外对管信号输入口;
P1.0-P1.1是无线信号输入口;
P2.0-P2.7是四路减速电机控制信号输出口。
智能寻迹避障小车用单片机来设计制作完成,由于其功能的实现主要是通过软件编程来完成的,所以采用单片机STC89C52,它是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和512bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的STC89C52单片机可以提供许多较复杂系统控制应用场合。
下图为其I/O口引脚图:
STC89C52管脚图
2.2机械系统
机械系统由专门的双层小车底盘及四路减速电机构成。
小车底盘由亚克力材料制作,易改造且较轻便。
电机是小车专用的减速电机,操作简单灵活。
小车和电机是一套的,组装十分方便。
小车底盘图片
2.3电机驱动模块
采用功率三极管作为功率放大器的输出控制直流电机。
线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路(如图1)。
用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。
这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的PWM调速技术。
现市面上有很多此种芯片,因时间和个人能力有限,我直接选用了带有L298N芯片的驱动模块(如图2)。
图1
图2
图中置于散热片内部的就是L298N芯片。
此种驱动板还带有5V稳压输出,可以为其他模块供电。
2.4循迹模块
采用四路红外对管对轨道黑线进行检测。
中间两路紧靠其宽度基本等于黑线宽度起主要循迹作用,旁边两路较分散当小车有较大偏离时起到回到轨道的作用。
当遇到停车线时四路同时输入信号控制小车刹停。
单个红外对管如图一所示,由于时间和个人能力有限我直接选用了设计好的四路红外检测模块(图二),其能实现较好的循迹功能。
图一
图二
2.5避障模块
采用三支红外传感器(如图)以60度的张角置于小车前部,可以对小车前方较大范围进行探测。
该红外传感器简单易操作,灵敏度高,探测距离远,可以给小车在遇到障碍物时调整提供充足时间。
单支红外传感器
2.6电源模块
由于小车较重且采用四轮驱动,所以需要较大的驱动电压,理论上驱动端子的供电范围是+5V~+35V,因此我采用将三节18650锂电池串联的方式给驱动电路供电,其最大电压可达12.6V。
循迹避障及远程操控模块也分别从两个L298N驱动板上的5V稳压输出取电。
为了防止驱动板电流的频繁转换对单片机造成影响以及考虑到方便的问题,单片机由一个移动电源单独供电。
2.7报警模块
采用单片机上附带的无缘蜂鸣器作为报警模块,当探测到前方有障碍物时小车会停止运行并发出五声警报,之后小车进行相应调整。
蜂鸣器图形如图所示。
2.8远程操控模块
采用315M/433M无线接收模块(带解码)(图一)和无线发射遥控器(图二)实现远程操控小车启动、停止的功能,其操作简单也较稳定。
图一图二
三软件设计
3.1主程序及框图
N
Y
Y
N
Y
N
N
Y
主程序部分:
voidmain()
{
loop:
if(wstart!
=0)//远程启动开关
{while
(1)
{
while
(1)
{
if(wstop!
=0){gotoloop;}//远程停止开关
if(!
(I1==1&&I2==1&&I3==1))break;
xunji();
}
bizhang();
}
}
else
stop();
}
3.2电机驱动程序
voidgo()//前进
{P2=0x99;}
voidback()//后退
{P2=0x66;}
voidleft()//左转
{P2=0x55;}
voidright()//右转
{P2=0xaa;}
voidstop()//停车
{P2=0x0;}
voidqstop()//刹车
{P2=0xff;}
3.3循迹程序
voidxunji()
{
if(I4==1&&I5==1&&I6==1&&I7==1)
{qstop();delay(100);while
(1){qstop();}}
elseif(I5==1&&I6==0)
{left();delay(30);stop();}
elseif(I5==0&&I6==1)
{right();delay(30);stop();}
else
{go();delay(100);stop();delay(80);}
}
3.4避障程序
voidbizhang()
{
qstop();baojing();
right();delay(300);stop();delay(300);障碍物
go();delay(600);stop();delay(300);
left();delay(300);stop();delay(300);
go();delay(300);stop();delay(300);
left();delay(200);qstop();delay(300);
}
3.5报警程序
voidbaojing()
{uinti;
for(i=5;i>0;i--)
{spk=0;
delay(300);
delay(100);
spk=1;
delay(300);
delay(100);
}
spk=1;
}
4.调试过程
小车的调试过程还比较顺利,第一次由于车速过快多次冲出跑道,在经过几次修改测试后解决了这个问题,小车较好地实现了预期的循迹避障功能,只是速度降低了。
我发现这个问题其实还有一个原因。
因为我所做的小车是四轮驱动的,而且载重又比较重,虽然动力好,但在遇到角度较大的轨道时灵活性不够转弯较吃力。
如果是一个万向轮和两个驱动轮组成的小车系统在转弯时会有更好的表现,但四轮也有其优势,如果软件优化到位的话应该效果会更好。
在调试的过程中也发现了一些小问题,例如单片机电路板因没有和小车固定好经常滑落,电池也因接触不良偶尔断电,好在最终都能解决,不影响小车的整体性能。
5.总结
经过近一个月的努力,我最终完成了小车的设计与制作,小车也基本达到了预期的要求与功能。
说实话,对于我这样一个开始时几乎没有接触任何专业知识的人来说独立制作出这种小车是很困难的。
在确定了制作目标后,我便不断地在网上和图书馆搜集各种相关的资料,拼命吸取其中的知识。
有些零件模块起初不知道怎么用问别人还被人取笑是菜鸟......一切都是从无到有积累起来的。
通过这次竞赛,我学到了很多书本上没有的知识,也锻炼了自己独立思考和动手的能力,也培养了我绝不向困难屈服的精神,总之受益匪浅。
这次竞赛还有一些小小的遗憾,例如还没有来得及学习有关protel制图和proteus仿真软件的知识,因此几个重要模块的电路板不是我亲自设计制作的。
单片机的软件也没有来得及优化到位,元件布局也略显粗糙......
总之,由于个人水平有限,作品中可能会存在诸多问题及可提高的地方,在此诚挚地欢迎老师和同学们的批评和指正。
附录总C程序
#include
#defineuintunsignedint
sbitI1=P0^0;sbitI2=P0^1;sbitI3=P0^2;sbitI4=P0^3;sbitI5=P0^4;
sbitI6=P0^5;sbitI7=P0^6;sbitwstart=P1^0;sbitwstop=P1^1;sbitspk=P1^5;
voiddelay(uintz)//延时函数
{uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidgo()
{P2=0x99;}
voidback()
{P2=0x66;}
voidleft()
{P2=0x55;}
voidright()
{P2=0xaa;}
voidstop()
{P2=0x0;}
voidqstop()
{P2=0xff;}
voidxunji()
{
if(I4==1&&I5==1&&I6==1&&I7==1)
{qstop();delay(100);while
(1){qstop();}}
elseif(I5==1&&I6==0)
{left();delay(30);stop();}
elseif(I5==0&&I6==1)
{right();delay(30);stop();}
else
{go();delay(100);stop();delay(80);}
}
voidbaojing()
{uinti;
for(i=5;i>0;i--)
{spk=0;
delay(300);
delay(100);
spk=1;
delay(300);
delay(100);
}
spk=1;
}
voidbizhang()
{
qstop();baojing();
right();delay(300);stop();delay(300);
go();delay(600);stop();delay(300);
left();delay(300);stop();delay(300);
go();delay(300);stop();delay(300);
left();delay(200);qstop();delay(300);
}
voidmain()
{
loop:
if(wstart!
=0)//远程启动开关
{while
(1)
{
while
(1)
{
if(wstop!
=0){gotoloop;}//远程停止开关
if(!
(I1==1&&I2==1&&I3==1))break;
xunji();
}
bizhang();
}
}
else
stop();
}