智能小车.docx
- 文档编号:29530448
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:19
- 大小:426.68KB
智能小车.docx
《智能小车.docx》由会员分享,可在线阅读,更多相关《智能小车.docx(19页珍藏版)》请在冰豆网上搜索。
智能小车
摘要………………………………………………………………………………2
第一章绪论………………………………………………………………………2
1.1智能小车的意义和作用………………………………………………………3
1.2智能小车的现状………………………………………………………3
第二章方案设计与论证……………………………………………………4
2.1主控系统………………………………………………………4
2.2电机驱动模块………………………………………………………4
2.3循迹模块……………………………………………………6
2.4避障模块………………………………………………………7
2.5机械系统………………………………………………………7
2.6电源模块…………………………………………………………8
第三章硬件设计……………………………………………………………8
3.1总体设计…………………………………………………………8
3.2驱动电路………………………………………………………9
3.3信号检测模块……………………………………………………………10
3.4主控电路………………………………………………………………11
第四章软件设计…………………………………………………12
4.1主程序模块…………………………………………………………………12
4.2电机驱动程序……………………………………………………………12
4.3循迹模块………………………………………………………………13
4.4避障模块………………………………………………………………15
第五章制作安装与调试…………………………………………………………18
结束语……………………………………………………………………18
致谢………………………………………………………………………19
参考文献…………………………………………………………………………19
智能循迹避障小车
三明学院-物理与机电工程学院-电子信息工程一班方龙华
摘 要:
利用红外对管检测黑线、超声波模块躲避障碍物与红外人体感应控制无人时车开,有人时车停,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。
其中小车驱动由L298N驱动电路完成。
关键词:
L298N;超声波测距模块;红外对管
第一章绪论
1.1智能小车的意义和作用
自第一台工业机器人诞生以来,机器人的发展已经遍及机械、电子、冶金、交通、宇航、国防等领域。
近年来机器人的智能水平不断提高,并且迅速地改变着人们的生活方式。
人们在不断探讨、改造、认识自然的过程中,制造能替代人劳动的机器一直是人类的梦想。
1.2智能小车的现状
现智能小车发展很快,从智能玩具到其它各行业都有实质成果。
其基本可实现循迹、避障、检测贴片、寻光入库、避崖等基本功能,这几节的电子设计大赛智能小车又在向声控系统发展。
比较出名的飞思卡尔智能小车更是走在前列。
我此次的设计主要实现循迹避障这两个功能。
第二章方案设计
2.1主控系统
在综合考虑了传感器、两部电机的驱动等诸多因素后,决定采用STC89C52为主控芯片。
2.2电机驱动模块
原本打算采用H桥式电路,但由于焊接起来不方便,最后采用集成芯片L298N。
2.3循迹模块
采用两只红外对管分别置于小车车身前轨道的两侧,根据两只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好两只光电开关的位置就可以很好的实现循迹的功能。
2.4超声波避障模块
采用超声波测距模块置于车前方,判断与障碍物的距离并通过单片机控制小车前进方向。
2.5人体红外感应模块
采用HC-SR501红外感应模块,控制小车的启停。
2.6机械系统
小车的机械系统要求稳定、灵活、简单,我这边是将玩具小车改装而来,具有省时省力、稳定性强等功能。
2.6电源模块
电源模块我采用双电源模式,12V电源给L298N供电,5V电源给整个系统供电。
第三章硬件设计
3.1总体设计
智能小车采用前轮控制方向,后轮前进或后退,将循迹光电对管分别装在车体下的左右。
当车身下左边的传感器检测到黑线时,主控芯片控制前轮电机左转,车向左修正,当车身下右边传感器检测到黑线时,主控芯片控制右轮电机右转,车向右修正。
避障的原理是判断小车与不同方向障碍物的距离,从而选择往远的方向开。
3.1.1主板设计框图如图3.1
图3.1主板设计框图
3.2驱动电路
电机驱动一般采用H桥式驱动电路,L298N内部集成了H桥式驱动电路,从而可以采用L298N电路来驱动电机。
通过单片机给予L298N电路PWM信号来控制小车的速度,起停。
其引脚图如3.2,驱动原理图如图3.3。
图3.2L298N引脚图
图3.3驱动原理图
3.3信号检测模块
小车循迹原理是小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。
笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。
红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。
在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,从而实现信号的检测。
电路图如图3.4。
市面上有很多红外传感器,在这里我选用TCRT5000型光电对管。
采用以下电路图:
第四章程序设计
4.1循迹避障模块
循迹避障框图:
#include
#defineucharunsignedchar
#defineuintunsignedint
inttime;
intsucceed_flag;
uchartimeL;
uchartimeH;
sbitTrig=P3^4;
sbitEcho=P3^2;
sbitKEY1=P3^3;
sbitP3_5=P3^5;
sbitP3_6=P3^6;
sbitP3_7=P3^7;
sbitP2_6=P2^6;
sbitP2_4=P2^4;
sbitP2_3=P2^3;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodetable1[]={0,1,2,3};
voidOutside_Init(void)
{
EX0=1;//开外部中断0
IT0=1;//负边沿触发
EX1=1;//开外部中断1
IT1=1;//负边沿触发
EA=1;//开总中断
}
ucharCount;
sbitSpeak=P2^5;
unsignedcharcodeSONG[]={
0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,
//前奏
0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
//竹林的灯火到过的沙漠
0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,
//七色的国度不断飘逸风中
0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,
//有一种神秘灰色的旋涡
0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,
//将我卷入了迷雾中
0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,
//看不清的双手
0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,
//一朵花传来谁经过的温柔
0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,
//穿越千年的伤痛
0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
//只为求一个结果
0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
//你留下的轮廓指引我
0x42,0x63,0x83,0x83,0x91,0x91,
//黑夜中不寂寞
0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,
//穿越千年的哀愁
0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,
//是你在尽头等我
0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,
//最美丽的感动会值得
0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff//结束标志
//用一生守候
};
ucharcodejmszl[]={//寂寞沙洲冷
0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,
//自你走后心憔悴
0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14,
//白色油桐风中纷飞
0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,
//落花似人有情这个季节
0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,
//河畔的风放肆拼命地吹
0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,
//不断拨弄离人的眼泪
0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,
//那样浓烈的爱再也无法给
0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,
//伤感一夜一夜
0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,
//当记忆的线缠绕过往支离破碎
0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,
//是慌乱占据了心扉
0x31,0x81,0x81,0x81,0x61,0x91,0x82,
//有花儿伴着蝴蝶
0x51,0x51,0x51,0x51,0x31,0x61,0x53,
//孤雁可以双飞
0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,
//夜深人静独徘徊
0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,
//当幸福恋人寄来红色分享喜悦
0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,
//闭上双眼难过头也不敢回
0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,
//仍然捡尽寒枝不肯安歇微带着后悔
0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,
//寂寞沙洲我该思念谁
0xff
};
voidTime0_Init()
{
TMOD=0x01;
IE=0x82;
TH0=0xDC;
TL0=0x00;
}
voidTime0_Int()interrupt1
{
TH0=0xDC;
TL0=0x00;
Count++;
}
voidDelay_xMs(uintx)
{
uinti,j;
for(i=0;i { for(j=0;j<3;j++); } } voidPlay_Song(uchari) { ucharTemp1,Temp2; uintAddr; Count=0; Addr=i*217; while (1) { Temp1=SONG[Addr++]; if(Temp1==0xFF) { TR0=0; Delay_xMs(100); } elseif(Temp1==0x00) { return; } else { Temp2=SONG[Addr++]; TR0=1; while (1) { Speak=~Speak; Delay_xMs(Temp1); if(Temp2==Count) { Count=0; break; } } } } } // voiddelay(uintz) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } // voiddelay_20us() { uchara; for(a=0;a<100;a++); } voiddisplay(uinttemp) { ucharge,shi,bai; bai=(temp)/100; shi=((temp)%100)/10; ge=(temp)%10; P2=table1[2]; P0=table[ge]; delay (1); P2=table1[1]; P0=table[shi]; delay (1); P2=table1[0]; P0=table[bai]; delay (1); if(temp>30&&P3_7==1&&P3_6==1) P1=0xa8; if(temp>30&&P3_7==0&&P3_6==0) P1=0x00; if(temp>30&&P3_7==1&&P3_6==0) P1=0xad; if(temp>30&&P3_7==0&&P3_6==1) P1=0x6b; if(temp<30&&temp>1) P1=0x30; } voidOutside_Int1(void)interrupt0using1 { while (1) { if(KEY1! =1) { P1=0x00; P2_6=0; Play_Song(0); } } } voidmain() { uintdistance; Trig=0; EA=1; TMOD=0x10; while (1) { EA=0; Trig=1; delay_20us(); Trig=0; while(Echo==0); succeed_flag=0; EA=1; EX0=1; TH1=0; TL1=0; TF1=0; TR1=1; delay(20); TR1=0; EX0=0; if(succeed_flag==1) { time=timeH*256+timeL; distance=time*0.0172; } if(succeed_flag==0) { distance=0; //test=! test; } display(distance); } } voidexter()interrupt0 { EX0=0; timeH=TH1; timeL=TL1; succeed_flag=1; } voidtimer1()interrupt3 { TH1=0; TL1=0; } 第五章制作安装与调试 采用万用板焊接,从做板的情况来看基本达到制作得要求,但由于时间较赶,还有一些功能未实现,如测速、红外遥控。 调试结果良好。 结束语 整个系统的设计以单片机为核心,利用了多种传感器,将软件和硬件相结合。 本系统能实现如下功能: (1)自动沿预设轨道行驶小车在行驶过程中,能够自动检测预先设好的轨道,实现直道和弧形轨道的前进。 若有偏离,能够自动纠正,返回到预设轨道上来。 (2)当小车探测到前进前方的障碍物时,可以自动报警调整,躲避障碍物,从无障碍区通过。 小车通过障碍区后,能够自动循迹 (3)自动检测停车线并自动停车。 从运行情况来看循迹的效果比较好,避障的效果不是很好,我认为是由于电源不能稳定而是的小车的速度不好控制,这也是我这次设计最大的误区,没有选取稳定的电源。 我相信如果实验条件和时间的允许下我肯定能解决这一问题。 通过本次设计我掌握了很多以前不熟练的东西,认识了很多以前不熟悉得东西,使我在人生上又进了一步。 也认识到很多的不足。 参考文献 [1]郭惠,吴迅.单片机C语言程序设计完全自学手册[M].电子工业出版社,2008.10: 1-200. [2]王东锋,王会良,董冠强.单片机C语言应用100例[M].电子工业出版社,2009.3: 145-300. [3]韩毅,杨天.基于HCS12单片机的智能寻迹模型车的设计与实现[J].学术期刊,2008,29(18): 1535-1955. [4]王晓明.电动机的单片机控制[J].学术期刊,2002,13(15): 1322-1755. [5]YamatoI,etal1NewconversionsystemforUPSusinghighfre2 quencylink[J]1IEEEPESC,1988: 210-320. [6]YamatoI,etal1HighfrequencylinkDC/ACconverterforUPS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车
![提示](https://static.bdocx.com/images/bang_tan.gif)