




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目名称:迷宫寻迹机器人(EJ1参赛队员:*摘要:本寻迹小车选用8位89C52单片机为控制器,通过6个红外光电传感器 TCRT5000对信号进行釆集,采集到的信号经比较器LM393处理后传给89C52 单片机,经单片机处理后,发出控制命令给L298N,驱动2台直流电动机进行 相应的动作。该小车能够识别出黑色轨迹并能沿着黑色轨迹前进直到终点,并 能显示出运行时间。1方案论证与比较1.1传感器的选择与比较方案一釆用摄像头,然后用CCD处理技术,对采集的信号进行分析。方案二使用光敏传感器,能够采集回来黑与白两种信号,然后进行处理与 分析。由于釆用摄像头进行CCD处理所用的硬件搭接较为繁琐,并且处理起來
2、还 比较麻烦,而光敏传感器TCRT5000可以虽然智能识别黑与白两种颜色由于现 场条件,并不能对其造成干扰,而且其反应速度快,响应时间短,故此,我们 选用光敏传感器TCRT5000o1.2车体的选择与比较方案一采用4轮小车,前轮由舵机控制转弯,后轮由动力电机控制前进与 后退。方案二釆用三轮小车,前面两轮由两个电机分别控制,用其速度差来实现 转弯与调整,后前轮为万向轮,用来维持小车的平衡由于釆用4轮车,小车在转弯时会产生转弯半径,会偏离轨迹,不能按照 黑色轨迹前进,而转弯半径无法缩小到满意的程度,由于三轮小车用两个电机 来控制两个轮子,故很容易来实现转弯与调整,是理想的车体模型。1.3前进路径与
3、返回路径的最优选择由于小车需要按照黑色轨迹寻到终点,并且按最优路径返回,故小车应能 识别迷宫的路况,普通寻迹小车智能按照黑色轨迹走,但不能识别路况,这样 小车寻到终点的效率很低,乂不能按照最优路径返回。考虑到以上情况,我们 给小车加上了识别路口程序,并且让小车按照右手原则前进,在每个路口处让 小车记录出所走过的路况,并且记忆,以便于在返航时调用记录信息,使小车 顺利返回。14传感器个数的比较与选择方案一总共5个传感器,两个传感器用來检测小车是否偏离轨迹,另外三 个传感器用來检测小车是否遇到路口(前方.左方及右方各一个),由前方传感 器來检测终点。(如图1.1)方案二总共6个传感器,其中两个传感
4、器用來检测小车是否偏离轨迹,另 外三个传感器用來检测小车是否遇到路口(前方左方及右方各一个),还有一 个传感器配合前方的传感器来检测终点。(如图1.2)图1.1五个传感器示意图图1.2六个传感器示意图图1.3八个传感器示意图方案三总共8个传感器,两个传感器用來检测小车是否偏离轨迹,另外五 个传感器用來检测小车是否遇到路口(前方一个,左方及右方各两个),还有一 个传感器配合前方的传感器来检测终点。检测路口左右方向时用2个传感器, 是以使能减少误判,让小车更好的寻迹。(如图1.3)方案一比方案二多一个传感器,是为了更好的检测终点,方案一检测终点的 方法是前当方传感器检测到死胡同时在让其延时继续前进
5、如图1.4,当再检测到 黑色信号时即使终点,但是实际运作时发现由于2cm对于运动的小车來说过小, 而且即便检测到终点在返回时,会再次遇到黑色信号,和死胡同标志容易产生 混淆,不易于小车更好的判别路口,而当有第6个传感器辅助前方传感器检测 到终点时,则能避免以上问题,当检测到死胡同标志时,只要再继续往前走, 辅助检测传感器便会检测到白色信号小车就会认为到达终点如图1.5,避免了小 车混淆死胡同与终点标志,同时让终点标志更好的被识别。而方案三,将检测 左右路口的传感器增加至每侧2个,以防出现如图1.6所示的误判,而图1.7的 方案三只要两个传感器不全进入黑线就不会认为有路口,能大大的避免误判的 几
6、率。但是后来在软件编写和实际测试的时候,发现了用软件可以进行防误判,而 由于这种防误判方法的引入,是传感器的个数从8个减少到了 6个,其具体如 何防误判将在后面说明。图1.4 一个传感器检测终点示意图图1.5两个传感器检测终点示意图图1.6路II误判示意图图17路II防误判示意图1.5传感器位置摆放的比较与选择1 为了让小车在检测到路口时就进行转弯,在转完后其中线仍与轨迹中线 重合,避免了其每次转弯后都进行调整,我们经测量发现小车轮距为10cm,而 轨迹宽度为2cm,故检测路口的传感器与轮子轴承间的距离D= (10-2)/2=4cm, 如图1.8所示。2.为了让小车刚刚检测偏离轨迹就做出调整,
7、同时乂给小车在走直线时留 有余量,经过不断实践测试,认为检测偏离轨迹的两个传感器间距以2.1cm为 最佳。如图19所示3图1.8检测转弯路I 1传感器位置的计算7图19检测偏离轨迹的传感器示意图3为了两检测终点的传感器能够准确快速的检测并识别出终点,设定两传感器 间距离为2.1cnioc图1.10两检测终点传感器间距4总体摆放如下图1.1L A=l.lcm, B=3.2cm图1.11总体摆放图2硬件系统设计2.1总体设计有光敏传感器进行信号釆集,经电压比较器LM393处理后直接传给 AT89C52,单片机对信号按照预定的程序进行处理,将处理的结果通过10 口传 给74LS08,通过与PWM波合
8、成后给L298N (直流电机驱动芯片)信号,通过 L298N进行控制小车两轮子,以实现左右微调,左右转弯,前进与原地旋转等 动作。小车每到路口都进行相关的记忆处理,以便最优返回。图2.1总体设计框架图2.2单元电路设计2.2.1传感器单元电路的设计图2.2传感器单元电路当传感器进入黑色轨迹中时,由发射管发射的不可见光被吸收,不能被接 收器接收到,故接收一侧电路不导通,LM393的同向输入为高,输入比较器输 出为高,其输出高电压为5V,低电压为0V,故可以直接传给单片机。而电压 比较器的输出端所接的LED能够实时的显示传感器的工作状况。本题目要求小车能够不偏离中心轨迹,由于轨迹交窄小车相对运动速
9、度快, 故要求传感器单元必须较为灵敏,相应时间短,反应速度快。我们采用的LM393 电压比较器,其工作电源电压范围宽,单电源、双电源均可工作,消耗电流小, 输入失调电压小,共模输入电压范围宽,反应时间快,其内部结构图如图2.3 所示。2.2.2电机驱动单元电路的设计bEN1EN2翥常VCCVDDOUT1OUT2OUTSOUT4图2.4电机驱动电路图由于要对电机实行加速减速刹车的控制,故采用由L298N和74LS08构成 的驱动电路,由1.0和1.1 口负责控制1号电机的前进与后退,而与他们一起走 与门74LS08的1.4 口负责输出PWM波,由PWM波负责控制小车的减速与加 速以及制动的控制。
10、同时与门也起到了扩大单片机输出电流的作用,由于L298N 需要的输入电流AT89C52无法驱动,与门在此起到一定的上拉作用。因为要用单片机对电动机进行四象限的控制,由于控制象限的复杂以及驱 动电机功率的问题,这里我们需要采用电动机驱动芯片來实现,我们釆用的是 L298N这款电机驱动芯片,该芯片具备控制简单,反应快,输出功率大,支持 外接电机工作电源等一系列优点。其结构图如图2.5所示。图2.5 L298N内部结构图2.2.3电源模块单元电路的设计图2.6电源模块单元电路图由于整个控制板都需要5V电压,考虑到电池随着使用时间的增强,电压 会有所下降,故我们选用直流稳压电源9V进行供电,由于多方同
11、时分流,有 可能造成电量不足,为了保持电压能够稳定在5V,故选用L7805进行稳压。在 其输出输入端口各并联一个电容,以起到保护芯片的作用。其内部结构图如2.7 所示。$兀 04图27 L7805内部结构图224液晶显示单元电路设计PL1JZEX;PL2 轧PL6MS0)PL?tsoo y i p?3jynT CZ Jpmxn;P34TOfTvpnXTALlXIAL2XS7p=.?T p油应(ADLJP0.1 AD2:P0J CADJJPOJ 0.4 AD5 昨 (AD5)m UDW7CADP2CCAW11 (A】沁2 (All)?: 3 (A】2阳 (ABp:5 (AU)P: d (A15p
12、:7vcc GNDRJO7卫汕40200091图2.8液晶显示单元电路图釆用1602液晶进行时间和方向的显示,我们采用单独的AT89S52来控制 液晶,减少其对小车控制的干扰,然后由2根数据线让其与主控AT89S52进行 通信,以此來显示小车运行的时间和方向。图2.8中R38用来控制液晶字幕的 清晰度,R37用來控制液晶屏幕的对比度。3软件系统设计3.1总体设计小车自上电时程序开始运行,我们依着右手原则为小车寻迹方法,右为先。 自上电后小车进入初始化阶段之后转入主函数,我们将小车能遇到的各种情况进行一一排列出来,这样无论传感器反馈回來什么样的信号都有与之对应的命 令,分为以下10种情况:左微调
13、,右微调,前进,左转,右转,T型,左T, 右T,十字路口,死胡同。其流程图如图3.1所不。113.2各子模块的设计3.2.1转弯模块的设计为了让小车能够顺利并且及时的停止转弯,我们将其转弯的停止标志设为当 检测前方是否有路的传感器遇到黑色轨迹,即表示其己完成转弯,这样避免了 小车转弯过大或者过小的问题。3.2.2终点识别模块的设计为了让小车能够准确的识别终点标志,釆用2个传感器來检测终点标志, 当且仅当前后检测终点的传感器同时检测到终点信号时,才认定到达终点,即 当前后前后检测终点的传感器323防误判模块的设计列出了小车在行走时可能碰到的各种误判情况,对其一一分析后判别出应 是那种路况,将其对
14、应情况列出,并给出小车应该正确运行的指令。4附加功能增加了小车转弯的转向灯模拟功能,转向灯能随小车的转向实时的闪烁起来,以此一 次来表示小车的运转状态,还在车尾处额外增加了两组led小灯,以此表示小车现在处于 的状态即状态前进最优路径返回歿占起点绿色1010绿色1010蓝色0110蓝色011015附录1主控程序清单存include 存include 存include /char pro_left,pro_nght,iJ; 左右占空比标志 extein iiit a24=3,4O0O0,0Q0,0,OOOOOQOQQO;extein iiit n=2Jogo=0;/sbit leftl=PlzO
15、;sbit left2=Pr 1;sbit right 1=P1A2;sbit right2=PlA3;sbit enl=PlA4; sbit en2=PlA5; sbitpl6=PlA6; sbitp!7=PlA7;/左电机正反转/右电机正反转输出PWM1波控制左电机输出PWM2波控制左电机/sbitp23=P2A3; sbit p24=P2A4; sbit p25=P2A5; sbitp26=P2A6;sbit lefCtuin=POAO;sbit left=POAl;sbit midb=P0A2;sbit midf=P0A3;sbit right=POA4;sbit iight_aini
16、=POA5;左侧传感器(识别路II)微调左位置后中间传感器(识别路|丨)/前中间(识别路1)微调右位置右侧传感器(识别路II)7/sbit p20=P2A2; sbit p21=P2T;左拐直走右拐sbit p22=P2A0:void fiist_stiaight(); 启动直走void stiaight();直走void sd_straight();左岔直走void stopQ;终点稍停void endQ;回到起点停车void wleft();左微调void wright();右微调void ftJeftQ;左转90由黑到白void sd_left();左转90由白到黑void ft_rig
17、ht();右转90由黑到白void sdjightO;右转90由白到黑void ft_180nQ;左转180由黑到白void sd_18Ort0;左转180由白到黑7/void iiifraredQ;初次循迹void comebackQ;返航void memoi-y(mt x);/记忆void delay(int z); 延时 1ms7/void delay(int z)延时 z*lnischai k;while(z-) fbr(k=O ;k121 ;k+);延时 1 ms启动走直线/void fiist_stiaightQ p20=l;p21=0;p22=l;pro_left=85; pio
18、_right=85; leftl=l; 嚴 2=0;right 1=1;nght2=0;delay(5);/void stiaight() /走直线函数p20=l;p21=0;p22=l;pro_left=80; pro_right=80; leftl=l;嚴 2=0;right 1=1; nght2=0;/void sd_straightQ 左岔走直线函数 p20=l;p21=0;p22=l;straightQ;if(left_turn= 1 )/&(right_turn=O)&(nudf= 1) sdsUaightQ;elsestraight();/void wleft() 微调左转函数
19、pio_left=0;pio_right=85;leftl=O;left2=0;light 1=1; iight2=0;/void wHght() /微调右转函数 pro_left=85;pro_right=0: leftl=l;left2=0;light 1=0;iight2=0;31/void ftJeftQ p20=0;p21=l;p22=l; pro_left=0;pro_right=80; leftl=O; 嚴 2=0;right 1=1; nght2=0; if(niidf=l) elsesdjeft(); void sd_left() p20=0;p21=l;p22=l;左转90
20、由黑到白左轮不动右轮动左转90由白到黑pro_left=0; pio_right=80;leftl=O;嚴 2=0;right 1=1;nght2=0; if(nudf=0)sd_left();else fiist_straightQ; sUaightQ;左轮不动右轮动/void ft_right() p20=l;p21=l;右转90由黑到白p22=0;pro_left=85; pro_right=0: leftl=l; 嚴 2=0; right 1=0; nght2=0;if(nudf=l) ft.nghtO; elsesdnghtQ; void sdjightQ p20=l;p21=l;p
21、22=0;左轮动右轮不动右转90由白到黑pro_left=80; pio_right=0: leftl=l;/左轮动嚴 2=0;right 1=0;nght2=0;if(nudf=0) sd_nght(); else fiist_straightQ; suaight();右轮不动7/void ft_ 180110 p20=0;p21=0;p22=0;左转由黑到白pro_left=80; pio_right=80; leftl=0; left2=l; right 1=1; nght2=0;if(nudf=l) ft_180rt0; elseif(nudf=0) sd_180rt();左轮反转右轮
22、正转void sd_18Ort0 p20=0;p21=0;左转由白到黑p22=0;左轮反转右轮正转pro_left=80; pio_right=80; leftl=0; left2=l; right 1=1;nght2=0;if(nudf=O)sd_180rt0;elsefiist_straightQ; suaight();/void stopQ 回到起点 while(l) pl7=l;pl6=l; p23=0;p24=0;p25=0;p26=0; pio_left=0;或是全等于0pio_right=0: leftl=l;left2=l;light 1=1;iight2=l;/或是全等于1v
23、oid endQpro_left=0; pro_right=0; leftl=0;嚴 2=0; right 1=0; nght2=0; delay(150);单程刹车/循迹 char flag=10;pl6=0;pl7=l;p23=0;p24=0;p25=l;p26=l;&(nght_niin=0)&(niidf=l)&(niidb=l)&(left=0)&(right=0)flag=7;直线elseif(left_tuin=0)&(right_tuin=0)&(nudf=0)&(midb=0)&(left=0)&(nght=0)flag=4; / memoiy(4); 死胡同else&(ri
24、ght_turn=0)&(midf=0)&(midb=l)flag=3;/memory(3);左拐else&(right_tuin=0)&(midf=0)&(midb=0)flag=13;误认为左拐左拐elseif(left_turn=0)&(right_turn=l)&(midf=0)&(midb= 1)fhg= 1;/memory( 1);右拐elseif(left_tuin=0)&(right_tuin=l)&(midf=0)&(midb=0)flag=ll;误认为右拐右拐elseif(left_turn= 1 )&(right_turn=0)&(nudf= 1 )&(midb= 1)f
25、lag=2;/memory(2);左岔else&(right_turn=0)&(nudf=l)&(midb=0)flag=12;误认为左岔直走elseif(left_turn= 1 )&(right_turn= 1 )&(midf=0)&(midb= 1)flag=l;/memoiy(l); 丁字elseif(left_turn=l)&(right_turn=l)&(midf=O)&(midb=O)flag=ll;误认为丁字右拐elseif(left_turn=O)&(right_turn=l)&(nudf=l)&(midb= 1)flag=l; /memory(l); 右岔elseif(le
26、ft_turn=O)&(right_turn=l)&(nudf=l)&(midb=O)flag=ll; /误认为右岔右拐elseif(left_tuin= 1 )&(right_tuin= 1 )&(nndf= 1 )&(midb= 1) flag=l; /memoiy(l);十字else1 )&(right_tuin= 1 )&(nndf= 1 )&(midb=O) flag=ll; 误判十字 右拐elseif(left_tuin=O)&(right_tuin=O)&(nndf=l)&(midb=O)&(left=O)&(nght=O )flag=O;/memorv(O); 终点elseif
27、(left_turn=O)&(right_turn=O)&(left=O)&(right= 1)flag=5;左偏(light)elseif(left_turn=O)&(right_turn=O)&(1 亡 ft= 1 )&(right=O)flag=6;右偏(left)elseflag=7;直走switch (flag)case 0: pl7=0;pl6=0;p23=0;p24=0;p25=0;p26=0;end();ft_180rt();memoiy(0); logo=l; break; /p!7=0:pl6=0;终点两个灯全亮case 1: ft_nght();memoiy(1);log
28、o=0;break:右拐case 2: sd_stiaight();memory(2);logo=0;break:直走case 3:memory(3);logo=0;break:左拐case 4: ft_l 80rt();memoiy(4);logo=0;break;死胡同case 5: wrightQ;logo=0;break:左偏case 6: vleft();logo=0;break:右偏case 7: straight();logo=0;break:直走case 11: ft_right();logo=0;break:误认为右case 12: stiaightQ;logo=0;brea
29、k:误认为直case 13: ft_left();logo=0;break:误认为左default: straight();logo=0;break;/记忆程序void memoiy(mt mflag) if(niflag=l)an+=l;if(an=4)an=O; n=n-2;n+;elseif(niflag=2)an+=2; n+;else if(niflag=3)an+=3; n+;elseif(niflag=4)an=O;11;else if(niflag=O)n; void comeback()/p23=I;p24=I;p25=0;p26=0;pl 7=0;pl6=l;if(left
30、_nirn=0)&(right_nirn=O)&(nudf=l)&(midb= 1 )&(left=O)&(nglit=0else1 )&(nudb= 1)i左边有路iswitch(an)tcase 1: ft_left();case 2: sd_straight();case 3: ft_iightQ;logo=l;n-; logo=l;n-; logo=l;n;break; break; break;) straightO;logo=l;直线elseif(iighcturn= 1 )&(midb= 1)i右边有路iswitch(an)tcase 1: ft_left();case 2: s
31、d_straight();case 3: ft_iightQ;logo=l;n-; logo=l;n-; logo=l;n;break; break; break;elseif(left_tuin=O)&(right_tuin=O)&(midf=O)&(midb=O)&(left=O)&(right=O )&(n=l) pl7=l;pl6=l;stop();回到起点两个灯全灭elseif(left_turn=O)&(right_turn=O)&(left=O)&(right=l)wrightQ;logo= 1;左 偏(motoi_right)elseif(left_turn=O)&(right
32、_turn=O)&(left= 1 )&(right=O)wleft();logo= 1;右偏(motor_left)/* elsestraightO;logo=l;*/void uiitQTMOD=0x01;TH0=(65536-100)/256;TL0=(65536-100)%256;EA=1;中断总开关ETO=1;开启定时器0TRO=1;/定时器0启动enl=l;使能1端eii2=l;使能2端void timeO(void)internipt 1i+;片;if(i=projeft) enl=l;else enl=0;if(i=100) enl=enl;i=0;if(j =pro_righ
33、t) eii2= 1;else eii2=0;if(j=100) en2=en2;j=0;TH0=(65536J 00)/256;TL0=(65536J00)%256;/void mam(void)nutQ;delay(l);while(l)if(logo=0)infiared();if(logo=l)comebackQ;void mtO(void)mtermpt 0附录2液晶驱动源代码程序#include#defiiie ucliar unsigned char#defiiie umt unsigned int sbitrs=PlAO;sbit lcden=PlAl;sbit p20=P2A0;sbit p21=P2Al;uchar countaium;chai nuao,shi,fen;uchar code table=n2010-6-22 ROBOT1; uchar code table 1=M0090:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度酒店餐饮部门承包经营合同范本
- 二零二五年度餐厅特色糕点制作与销售合同样本
- 二零二五年度汽车销售居间服务合同样本英文
- 二零二五年度历史文化名城保护项目施工合同范本
- 2025年教育科研场地租赁合同规范
- 2025版GPS军事侦察定位服务全面合作协议
- 二零二五年度能源工程工期延期补充协议书
- 2025版房地产租赁居间服务佣金定金合同模板
- 二零二五年度百花广场社区快递收发服务合作协议
- 二零二五年体育行业人才派遣服务合同
- 2025年新电梯安全员培训考试试题及答案
- 2025全国会计知识大赛题库及答案
- 2025山西晋城市乡村振兴投资开发有限公司招聘5人笔试历年参考题库附带答案详解
- 河北收购发票管理办法
- 2025至2030中国眼科医院行业发展趋势分析与未来投资战略咨询研究报告
- 深静脉血栓形成的诊断和治疗指南第三
- 2025年个人理财规划初级考试试卷:退休规划与教育金规划含答案
- 福建省老旧房屋抗震性能提升加固技术指引(试行)2025
- 2025年合肥高新创业投资管理合伙企业招聘考试笔试试题(含答案)
- 辅警看护考试试题及答案
- 2025脓毒症诊断与治疗规范
评论
0/150
提交评论