智能迷宫寻迹小车报告.docx

上传人:scccc 文档编号:14556640 上传时间:2022-02-09 格式:DOCX 页数:29 大小:398.17KB
返回 下载 相关 举报
智能迷宫寻迹小车报告.docx_第1页
第1页 / 共29页
智能迷宫寻迹小车报告.docx_第2页
第2页 / 共29页
智能迷宫寻迹小车报告.docx_第3页
第3页 / 共29页
智能迷宫寻迹小车报告.docx_第4页
第4页 / 共29页
智能迷宫寻迹小车报告.docx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《智能迷宫寻迹小车报告.docx》由会员分享,可在线阅读,更多相关《智能迷宫寻迹小车报告.docx(29页珍藏版)》请在三一文库上搜索。

1、题目名称:迷宫寻迹机器人(E题)参赛队员:*摘要:本寻迹小车选用8位89C52单片机为控制器,通过6个红外光电传感器TCRT5000对信号进行采集,采集到的信号经比较器LM393处理后传给89C52单片机,经单片机处理后,发出控制命令给L298N,驱动2台直流电动机进行相应的动作。该小车能够识别出黑色轨迹并能沿着黑色轨迹前进直到终点,并能显示出运行时间。1方案论证与比较1.1 传感器的选择与比较方案一采用摄像头,然后用CCD处理技术,对采集的信号进行分析。方案二使用光敏传感器,能够采集回来黑与白两种信号,然后进行处理与分析。由于采用摄像头进行CCD处理所用的硬件搭接较为繁琐,并且处理起来还比较

2、麻烦,而光敏传感器TCRT5000可以虽然智能识别黑与白两种颜色由于现场条件,并不能对其造成干扰,而且其反应速度快,响应时间短,故此,我们选用光敏传感器TCRT5000o1.2 车体的选择与比较方案一采用4轮小车,前轮由舵机控制转弯,后轮由动力电机控制前进与后退。方案二采用三轮小车,前面两轮由两个电机分别控制,用其速度差来实现转弯与调整,后前轮为万向轮,用来维持小车的平衡由于采用4轮车,小车在转弯时会产生转弯半径,会偏离轨迹,不能按照黑色轨迹前进,而转弯半径无法缩小到满意的程度,由于三轮小车用两个电机来控制两个轮子,故很容易来实现转弯与调整,是理想的车体模型。1.3 前进路径与返回路径的最优选

3、择由于小车需要按照黑色轨迹寻到终点,并且按最优路径返回,故小车应能识别迷宫的路况,普通寻迹小车智能按照黑色轨迹走,但不能识别路况,这样小车寻到终点的效率很低,乂不能按照最优路径返回。考虑到以上情况,我们给小车加上了识别路口程序,并且让小车按照右手原则前进,在每个路口处让小车记录出所走过的路况,并且记忆,以便于在返航时调用记录信息,使小车顺利返回。1.4 传感器个数的比较与选择方案一总共5个传感器,两个传感器用来检测小车是否偏离轨迹,另外三个传感器用来检测小车是否遇到路口(前方.左方及右方各一个),由前方传感器来检测终点。(如图1.1)方案二总共6个传感器,其中两个传感器用来检测小车是否偏离轨迹

4、,另外三个传感器用来检测小车是否遇到路口(前方.左方及右方各一个),还有一个传感器配合前方的传感器来检测终点。(如图1.2)图1.1五个传感器示意图图1.2六个传感器示意图图L3八个传感器示意图方案三总共8个传感器,两个传感器用来检测小车是否偏离轨迹,另外五个传感器用来检测小车是否遇到路口(前方一个,左方及右方各两个),还有一个传感器配合前方的传感器来检测终点。检测路口左右方向时用2个传感器,是以使能减少误判,让小车更好的寻迹。(如图1.3)方案一比方案二多一个传感器,是为了更好的检测终点,方案一检测终点的方法是前当方传感器检测到死胡同时在让其延时继续前进如图14当再检测到黑色信号时即使终点,

5、但是实际运作时发现由于2cm对于运动的小车来说过小,而且即便检测到终点在返回时,会再次遇到黑色信号,和死胡同标志容易产生混淆,不易于小车更好的判别路口,而当有第6个传感器辅助前方传感器检测到终点时,则能避免以上问题,当检测到死胡同标志时,只要再继续往前走,辅助检测传感器便会检测到白色信号小车就会认为到达终点如图1.5,避免了小车混淆死胡同与终点标志,同时让终点标志更好的被识别。而方案三,将检测左右路口的传感器增加至每侧2个,以防出现如图L6所示的误判,而图1.7的方案三只要两个传感器不全进入黑线就不会认为有路口,能大大的避免误判的几率。但是后来在软件编写和实际测试的时候,发现了用软件可以进行防

6、误判,而由于这种防误判方法的引入,是传感器的个数从8个减少到了6个,其具体如何防误判将在后面说明。图1.4 一个传感器检测终点示意图图1.5两个传感器检测终点示意图图L6 路II误判示意图图L7路口防误判示意图1.5 传感器位置摆放的比较与选择L为了让小车在检测到路口时就进行转弯,在转完后其中线仍与轨迹中线重合,避免了其每次转弯后都进行调整,我们经测量发现小车轮距为10cm,而轨迹宽度为2cm,故检测路口的传感器与轮子轴承间的距离D=(10-2)/2=4cm,如图L8所示。2.为了让小车刚刚检测偏离轨迹就做出调整,同时乂给小车在走直线时留有余量,经过不断实践测试,认为检测偏离轨迹的两个传感器间

7、距以2.1cm为最佳。如图1.9所示二3图1.8检测转弯路I 1传感器位置的计算图1.9检测偏离轨迹的传感器示意图3.为了两检测终点的传感器能够准确快速的检测并识别出终点,设定两传感器间距离为2.1cm。图1.10两检测终点传感器间距4.总体摆放如下图1.1LA=Llcm,B=3.2cm图L11总体摆放图2硬件系统设计2.1 总体设计有光敏传感器进行信号采集,经电压比较器LM393处理后直接传给AT89c52,单片机对信号按照预定的程序进行处理,将处理的结果通过10口传给74LS08,通过与PWM波合成后给L298N(直流电机驱动芯片)信号,通过L298N进行控制小车两轮子,以实现左右微调,左

8、右转弯,前进与原地旋转等动作。小车每到路口都进行相关的记忆处理,以便最优返回。图2.1总体设计框架图2.2 单元电路设计2.2.1 传感器单元电路的设计图2.2传感器单元电路当传感器进入黑色轨迹中时,由发射管发射的不可见光被吸收,不能被接收器接收到,故接收一侧电路不导通,LM393的同向输入为高,输入比较器输出为高,其输出高电压为5V,低电压为0V,故可以直接传给单片机。而电压比较器的输出端所接的LED能够实时的显示传感器的工作状况。本题目要求小车能够不偏离中心轨迹,由于轨迹交窄小车相对运动速度快,故要求传感器单元必须较为灵敏,相应时间短,反应速度快。我们采用的LM393电压比较器,其工作电源

9、电压围宽,单电源、双电源均可工作,消耗电流小,输入失调电压小,共模输入电压围宽,反应时间快,其部结构图如图2.3所示。2.2.2 电机驱动单元电路的设计VCCI 3 N86ZQ UNDS 12ndrIr2r3r4nENININININVDDOUT1OUT:OUTSOUT4图2.4电机驱动电路图由于要对电机实行加速减速刹车的控制,故采用由L298N和74LS08构成的驱动电路,由1.0和1.1口负责控制1号电机的前进与后退,而与他们一起走与门74LS08的1.4口负责输出PWM波,由PWM波负责控制小车的减速与加速以及制动的控制。同时与门也起到了扩大单片机输出电流的作用,由于L298N需要的输入

10、电流AT89c52无法驱动,与门在此起到一定的上拉作用。因为要用单片机对电动机进行四象限的控制,由于控制象限的复杂以及驱动电机功率的问题,这里我们需要采用电动机驱动芯片来实现,我们采用的是L298N这款电机驱动芯片,该芯片具备控制简单,反应快,输出功率大,支持外接电机工作电源等一系列优点。其结构图如图2.5所示。图2.5L298N部结构图2.2.3 电源模块单元电图2.6电源模块单元电路图由于整个控制板都需要5V电压,考虑到电池随着使用时间的增强,电压会有所下降,故我们选用直流稳压电源9V进行供电,由于多方同时分流,有可能造成电量不足,为了保持电压能够稳定在5V,故选用L7805进行稳压。在其

11、输出输入端口各并联一个电容,以起到保护芯片的作用。其部结构图如2.7所示。图2.7L7805部结构图224液晶显示单元电路设计PL0O2) PL1J2EW ?12 ?13 ?14Pl 5CMI1O) PlP3JOTL) PSIZSP35J1) P3.4JC0eat?a TTA11 XTAL2JtS7如画1 再斑或UIWKlO (ADL 的 1 CMM2 (AD3/3 CSP04 (AD5)0 5 (AD5)P0 5 (AD7(A1JPZQ ASPNl (A1W22 (AHJP23 皿4 (A厢5 (AM 6 彻5谭27VCC GXDKEN图2.8液晶显示单元电路图采用1602液晶进行时间和方向

12、的显示,我们采用单独的AT89S52来控制液晶,减少其对小车控制的干扰,然后由2根数据线让其与主控AT89s52进行通信,以此来显示小车运行的时间和方向。图2.8中R38用来控制液晶字幕的清晰度,R37用来控制液晶屏幕的对比度。3软件系统设计3.1 总体设计小车自上电时程序开始运行,我们依着右手原则为小车寻迹方法,右为先。自上电后小车进入初始化阶段之后转入主函数,我们将小车能遇到的各种情况进行一一排列出来,这样无论传感器反馈回来什么样的信号都有与之对应的命令,分为以下10种情况:左微调,右微调,前进,左转,右转,T型,左T,右T,十字路口,死胡同。其流程图如图3.1所不。( 开旗3.2 各子模

13、块的设计3.2.1 转弯模块的设计为了让小车能够顺利并且及时的停止转弯,我们将其转弯的停止标志设为当检测前方是否有路的传感器遇到黑色轨迹,即表示其已完成转弯,这样避免了小车转弯过大或者过小的问题。3.2.2 终点识别模块的设计为了让小车能够准确的识别终点标志,采用2个传感器来检测终点标志,当且仅当前后检测终点的传感器同时检测到终点信号时,才认定到达终点,即当前后前后检测终点的传感器3.2.3 防误判模块的设计列出了小车在行走时可能碰到的各种误判情况,对其一一分析后判别出应是那种路况,将其对应情况列出,并给出小车应该正确运行的指令。4附加功能增加了小车转弯的转向灯模拟功能,转向灯能随小车的转向实

14、时的闪烁起来,以此一次来表示小车的运转状态,还在车尾处额外增加了两组led小灯,以此表示小车现在处于的状态即状态前进最优路径返回线占/、起点绿色1010绿色1010蓝色0110蓝色0110附录1主控程序清单#include#include#include/charpro_left,pro_right,ij;左右占空比标志externmta24=3,4,0,0.0,0,0,0.0,0,0,0,0.0,0,0.0,0,0.0;externmtn=2Jogo=0;/sbitleftl=Plz0;sbitleft2=Pr1;sbitright1=P1A2;sbitright2=PlA3;sbitenl

15、=PlA4;sbiteii2=PlA5;sbitp16=PlA6;sbitp17=PlA7;左电机正反转/右电机正反转输出PWM1波控制左电机输出PWM2波控制左电机/sbitp23=P2A3;sbitp24=P2八4;sbitp25=P2A5;sbitp26=P2A6;/sbitleft_tum=P0A0;sbitleft=P0Al;sbitmidb=P0A2;sbitmidf=P0A3;sbitiight=P0z4;sbitright_tuni=P0A5;左侧传感器(识别路II)微调左位置后中间传感器(识别路II)/前中间(识别路口)微调右位置右侧传感器(识别路II)/sbitp20=P2

16、A2;sbitp21=P2Al;sbitp22=P2A0:左拐直走右拐voidfiist_stiaight();启动直走voidstiaight();直走voidsd_straightQ;voidstopQ;voidendQ;voidwleft();左岔直走终点稍停/回到起点停车左微调voidwright();voidftJeftQ;voidsd_left();右微调左转90由黑到白左转90由白到黑voidft_right();右转90由黑到白voidsd_right。;右转90由白到黑voidft80rt0;voidsd_18Ort0;左转180由黑到白左转180由白到黑voidiiifra

17、redQ;初次循迹voidcomebackQ;返航voidmemoi-y(iiitx);/记忆voiddelay(intz);延时1msvoiddelay(intz)延时z*lnischaik;while(z-)fbr(k=O;k121;k+);延时1ms)启动走直线/voidfiist_straightQp20=l;p21=0;p22=l;pro_left=85;pio_right=85;leftl=l;left2=0;right1=1;nght2=O;delay(5);/voidstiaight()走直线函数p20=l;p21=0;p22=l;pioeft=80;pro_right=80;

18、leftl=l;left2=0;right1=1;nght2=O;)IHIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIvoidsd-straightQ左岔走直线函数p20=l;p21=0;p22=l;straightQ;if(left_turn=1)/&(iight_turn=O)&(niidf=1)sd-sUaiglitQ;else(straightQ;)/voidwleft()/微调左转函数pio_left=0;pio_right=85;leftl=0;left2=0;light1=1;right2=0;)/voidwright()微调右转

19、函数pio_left=85;pro_nght=0;leftl=l;left2=0;right1=0;nght2=0;/void左转90由黑到白p20=0;p21=l;p22=l;pro_left=0;pro_nght=80;leftl=0;左轮不动left2=0;右轮动right1=1;nght2=0;if(niidf=l)(ftJeftO;)elsesd_left();voidsd_left()左转90由白到黑(p20=0;p21=l;p22=l;pio_left=0;pio_nght=80;leftl=0;左轮不动left2=0;右轮动right1=1;nght2=0;if(niidf=O

20、)sdjeft();else(fiist_straightQ;sUaightQ;)/voidft_right()p2O=l;p21=l;p22=O;pio_left=85;pro_right=0:leftl=l;left2=0:right1=0;nght2=0;if(nudf=l)ft.nghtO;)elsesd_rightO;)voidsd.rightQp20=l;p21=l;p22=0;pioeft=80;pro_right=0:leftl=l;left2=0:right1=0;右转90由黑到白左轮动右轮不动右转90由白到黑左轮动右轮不动nght2=O;if(nudf=O)sd_right

21、O;)elsefiist_straightQ;sUaightQ;)voidft80110p20=0;p21=0;p22=0;pro_left=80;pio_right=80;leftl=O;left2=l;right1=1;nght2=0;if(nudf=l)ft_180rtQ;elseif(nudf=0)sd80rt();voidsd8Ort0p20=0;p21=0;p22=0;pro_left=80;pio_right=80;leftl=O;left2=l;right1=1;nght2=0;if(nudf=0)左转由黑到白左轮反转右轮正转左转由白到黑左轮反转右轮正转sd.180rt();e

22、lse(first.straightO;suaight();)/voidstopO回到起点(while(l)(pl7=l;pl6=l;p23=0;p24=0;p25=0;p26=0;piojeft=0;pio_right=0:leftl=l;或是全等于0left2=l;light1=1;iight2=l;)voidendQ单程刹车pro_left=0;pro_right=0;leftl=0;或是全等于1left2=0;right1=0;nght2=0;delay(150);)voiduifiaied()循迹charflag=10;P16=O;P”=l;p23=0;p24=0;p25=l;p26

23、=l;if(left_niin=O)&(nght_niin=O)&(niidf=l)&(niidb=l)&(left=O)&(nght=O)flag=7;直线elseif(left_tuin=O)&(right_tuin=O)&(nudf=O)&(niidb=O)&(left=O)&(nght=O)flag=4;/memoiy(4);死胡同elseif(left_tuin=l)&(nght_tuin=O)&(nudf=O)&(niidb=l)flag=3;niemory(3);左拐elseif(left_tuin=l)&(nght_tuin=O)&(nudf=O)&(niidb=O)flag=

24、13;误认为左拐左拐elseif(left_tuin=O)&(right_tuin=l)&(nudf=O)&(nudb=1)flag=l;/memoiy(l);右拐elseif(left_tuin=O)&(nght_tuin=l)&(nudf=O)&(nudb=O)flag=ll;误认为右拐右拐elseif(left_tuin=l)&(nght_tuin=O)&(nudf=l)&(nudb=1)flag=2;/memory(2);左岔elseif(left_tuin=l)&(nght_tuin=O)&(nudf=l)&(niidb=O)flag=12;误认为左岔直走elseif(left_tu

25、in=l)&(nght_turn=l)&(nudf=O)&(nudb=1)flag=l;/menioiy(l);丁字elseif(left_turn=1)&(right_turn=l)&(nudf=O)&(nudb=O)flag=ll;误认为丁字右拐elseif(left_tuin=O)&(nght_tuin=l)&(nudf=l)&(nudb=1)flag=l;/memory(l);右岔elseif(left_tuin=O)&(right_tuin=l)&(nudf=l)&(nudb=O)flag=ll;/误认为右岔右拐elseif(left_turn=1)&(right_turn=l)&(

26、nudf=l)&(nudb=1)flag=l;/memoiy(l);十字elseif(left_turn=l)&(right_tuin=1)&(niidf=l)&(nudb=O)flag=ll;/误判十字右拐elseif(left_tuin=O)&(right_tuin=O)&(niidf=l)&(niidb=O)&(left=O)&(nght=O)flag=O;/memory(O);终点elseif(left_turn=O)&(riglit_turn=O)&(left=O)&(right=1)flag=5;左偏(nght)elseif(left_tum=O)&(riglit_turn=O)&

27、(left=1)&(right=O)flag=6;右偏(left)elseflag=7;直走switch(flag)(case0:pl7=0;pl6=0;p23=0;p24=0;p25=0;p26=0;end();ft_180rt();memoiy(0);logo=l;break;pl7=0;pl6=0;终点两个灯全亮case1:ft_nght();memoiy(1);logo=0;break:右拐case2:sd_stiaight();memory(2);logo=0;break:直走case3:memory(3);logo=0;break:左拐case4:ft_l80rt();memoiy

28、(4);logo=0;break;死胡同case5:wrightQ;logo=0;break:左偏case6:wleft();logo=0;break;右偏case7:straight();logo=0;break:直走case11:ft_right();logo=0;break:误认为右case12:straightQ;logo=0;break:误认为直case13:logo=0;break:误认为左default:straight。;logo=0;break;/记忆程序voidmemoiy(mtmflag)if(niflag=l)an+=l;if(an=4)an=O;n=n-2;n+;el

29、seif(niflag=2)(anT;n+;)elseif(niflag=3)(anfn+;)elseif(niflag=4)(an=O;11-;)elseif(niflag=O)(n-;)/voidcomeback()(p23=l;p24=l;p25=0;p26=0;pl7=0;P16=l;if(left_nirn=O)&(right_nrn=O)&(nudf=l)&(niidb=1)&(left=O)&(nglit=O) straightO;logo=l;直线elseif(left_tuin=1)&(nudb=1)左边有路(switch(an)(case 1: logo=l;n-;brea

30、k;case 2: sd_straight();logo=l;n-;break;case 3: ft_iightQ;logo=l;n-;break;)elseif(right_turn=l)&(iiudb=l)右边有路(switch(an)(case 1: logo=l;n-;break;case 2: sd_straight();logo=l;n-;break;case 3: ft_iightQ;logo=l;n-;break;)elseif(left_turn=O)&(right_turn=O)&(nudf=O)&(nudb=O)&(left=O)&(nght=O)/&(n=1)p17=l

31、;p16=l;stop0;)回到起点两个灯全灭elseif(left_tmii=O)&(riglit_tmii=O)&(left=O)&(right=1)wrightQ;logo=1;左偏Qnotor_right)elseif(left_tuin=O)&(right_tuin=O)&(left=1)&(right=O)wleft();logo=l;右偏/*elsestraightO;logo=l;*/voiduiitQTMOD=OxOi;TH0=(65536-100)/256;TL0=(65536-100)%256;EA=1;中断总开关ETO=1;开启定时器0TRO=1;定时器。启动enl=l

32、;使能1端eii2=l;使能2端voidtimeO(void)internipt1ifjfif(i=pro_left)enl=l;elseenl=0;if(i=100)enl=enl;i=0;if(j=pro_right)eii2=1;elseeii2=0;if(j=100)eii2=en2;j=0;TH0=(65536-100)/256;TL0=(65536-100)%256;)voidmam(void)initO;delay(l);while(l)(if(logo=0)(infraredQ;if(logo=l)comebackQ;)voidintO(void)iiitemipt0附录2液晶

33、驱动源代码程序#include#defuieucharunsignedchar#defuieumtunsignedintsbitrs=PrO;sbitlcden=PlAl;sbitp20=P2A0;sbitp21=P2Al;ucharcountaium;clwnuao,shi,fen;ucharcodetable口=2010-6-22ROBOT”;ucharcodetable1=M00:00:00”;voidvoiddelay(umtz)uintx,y;fbr(x=z;x0;x)for(y=110;y0;y-);voidwrite_(uchar)(rs=O;lcden=0;P0=;delay(

34、5);lcden=l;delay(5);lcden=0;voidwrite_date(uchafdate)(rs=l;lcden=0;PO=date;delay(5);lcden=l;delay(5);lcden=0;)voiduiitQucharnum;lcden=O;write_(0x38);write_(OxOc);write_(0x06);write_(0x01);write_(0x80);fbr(num=O;num15;num+)wiite_date(tablenum);delay(5);)write_(0x80+0x40);fbr(num=O;num12;num+)wiite_da

35、te(table1num);delay(5);)TMOD=OxOi;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ETO=1;TRO=1;voidwnte_sfin(uchaiadd,uchardate)(ucharslii.ge;slii=date/10;ge=date%10;write_(0x804-0x40+add);write_date(0x30+shi);wnte_date(0x30+ge);)voidmam()UUt();wliile(l)if(p20=l)&(p21=l)W回到起点TRO=O;)else氓(p20=0)&(p21

36、=1)/单程去(TRO=1;time。;)else氓(p20=l)&(p21=0)单程回(TRO=1;tuneQ;)else氓(p20=0)&(p21=O)/终点(TRO=O;)voidtimeiO()mternipt1TH0=(65536-50000)/256;TL0=(65536-50000)%256;count+;voidtime(void)(if(count=18)(count=0;niiao+;if(niiao=60)(iniao=0:fen+;if(fen=60)(fen=O;slii+;if(shi=24)shi=O;write_sfin(4,shi);wnte_sfin(7,fen);write_sfin(lOaiiiao);)附录3总体电路图(见下页)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1