智能迷宫寻迹小车报告_第1页
智能迷宫寻迹小车报告_第2页
智能迷宫寻迹小车报告_第3页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、摄像头进行 CCD 处理所用的硬件搭接较为繁琐,并且处理起来 还比较麻烦,而光敏传感器 TCRT5000 可以虽然智能识别黑与白两种颜色由 于现场条件,并不能对其造成干扰,而且其反应速度快,响应时间短,故此, 我们选用光敏传感器 TCRT5000 。1.2 车体的选择与比较方案一 采用 4 轮小车, 前轮由舵机控制转弯,后轮由动力电机控制前进与 后退。方案二 采用三轮小车, 前面两轮由两个电机分别控制, 用其速度差来实现 转弯与调整,后前轮为万向轮,用来维持小车的平衡由于采用 4 轮车,小车在转弯时会产生转弯半径,会偏离轨迹,不能按照 黑色轨迹前进,而转弯半径无法缩小到满意的程度,由于三轮小车

3、用两个电机 来控制两个轮子,故很容易来实现转弯与调整,是理想的车体模型。1.3 前进路径与返回路径的最优选择由于小车需要按照黑色轨迹寻到终点,并且按最优路径返回,故小车应能 识别迷宫的路况,普通寻迹小车智能按照黑色轨迹走,但不能识别路况,这样 小车寻到终点的效率很低,又不能按照最优路径返回。考虑到以上情况,我们 给小车加上了识别路口程序,并且让小车按照右手原则前进,在每个路口处让 小车记录出所走过的路况,并且记忆,以便于在返航时调用记录信息,使小车 顺利返回。1.4 传感器个数的比较与选择方案一 总共 5 个传感器,两个传感器用来检测小车是否偏离轨迹,另外三 个传感器用来检测小车是否遇到路口(

4、前方 .左方及右方各一个) ,由前方传感 器来检测终点。(如图 1.1 )方案二 总共 6 个传感器,其中两个传感器用来检测小车是否偏离轨迹,另 外三个传感器用来检测小车是否遇到路口(前方 .左方及右方各一个) ,还有一 个传感器配合前方的传感器来检测终点。 (如图 1.2 )图 1.1 五个传感器示意图图 1.2 六个传感器示意图图 1.3 八个传感器示意图方案三 总共 8 个传感器,两个传感器用来检测小车是否偏离轨迹,另外五 个传感器用来检测小车是否遇到路口(前方一个,左方及右方各两个) ,还有一 个传感器配合前方的传感器来检测终点。检测路口左右方向时用 2 个传感器, 是以使能减少误判,

5、让小车更好的寻迹。 (如图 1.3 )方案一比方案二多一个传感器, 是为了更好的检测终点, 方案一检测终点的 方法是前当方传感器检测到死胡同时在让其延时继续前进如图 1.4 ,当再检测 到黑色信号时即使终点, 但是实际运作时发现由于 2cm 对于运动的小车来说过 小,而且即便检测到终点在返回时,会再次遇到黑色信号,和死胡同标志容易 产生混淆,不易于小车更好的判别路口,而当有第 6 个传感器辅助前方传感器 检测到终点时,则能避免以上问题,当检测到死胡同标志时,只要再继续往前 走,辅助检测传感器便会检测到白色信号小车就会认为到达终点如图 1.5 ,避 免了小车混淆死胡同与终点标志,同时让终点标志更

6、好的被识别。而方案三, 将检测左右路口的传感器增加至每侧 2 个,以防出现如图 1.6 所示的误判,而 图 1.7 的方案三只要两个传感器不全进入黑线就不会认为有路口,能大大的避 免误判的几率。但是后来在软件编写和实际测试的时候, 发现了用软件可以进行防误判, 而 由于这种防误判方法的引入,是传感器的个数从 8 个减少到了 6 个,其具体如 何防误判将在后面说明。图 1.4 一个传感器检测终点示意图图 1.5 两个传感器检测终点示意图图 1.6 路口误判示意图 图 1.7 路口防误判示意图1.5 传感器位置摆放的比较与选择1. 为了让小车在检测到路口时就进行转弯,在转完后其中线仍与轨迹中线 重

7、合,避免了其每次转弯后都进行调整,我们经测量发现小车轮距为 10cm , 而轨迹宽度为 2cm ,故检测路口的传感器与轮子轴承间的距离D= (10-2 )/2=4cm ,如图 1.8 所示。2. 为了让小车刚刚检测偏离轨迹就做出调整,同时又给小车在走直线时留 有余量,经过不断实践测试, 认为检测偏离轨迹的两个传感器间距以 2.1cm 为 最佳。如图 1.9 所示。图 1.8 检测转弯路口传感器位置的计算图 1.9 检测偏离轨迹的传感器示意图3. 为了两检测终点的传感器能够准确快速的检测并识别出终点,设定两传感器 间距离为 2.1cm 。图 1.10 两检测终点传感器间距4. 总体摆放如下图 1

8、.11 ,A=1.1cm ,B=3.2cm图 1.11 总体摆放图2 硬件系统设计2.1 总体设计有光敏传感器进行信号采集,经电压比较器 LM393 处理后直接传给 AT89C52 ,单片机对信号按照预定的程序进行处理,将处理的结果通过 IO 口 传给 74LS08 ,通过与 PWM 波合成后给 L298N (直流电机驱动芯片)信号, 通过 L298N 进行控制小车两轮子,以实现左右微调,左右转弯,前进与原地 旋转等动作。小车每到路口都进行相关的记忆处理,以便最优返回。图 2.1 总体设计框架图2.2 单元电路设计2.2.1 传感器单元电路的设计图 2.2 传感器单元电路当传感器进入黑色轨迹中

9、时,由发射管发射的不可见光被吸收,不能被接 收器接收到,故接收一侧电路不导通, LM393 的同向输入为高,输入比较器 输出为高,其输出高电压为 5V ,低电压为 0V ,故可以直接传给单片机。而电 压比较器的输出端所接的 LED 能够实时的显示传感器的工作状况。本题目要求小车能够不偏离中心轨迹, 由于轨迹交窄小车相对运动速度快, 故要求传感器单元必须较为灵敏, 相应时间短,反应速度快。我们采用的 LM393 电压比较器,其工作电源电压范围宽,单电源、双电源均可工作,消耗电流小, 输入失调电压小,共模输入电压范围宽,反应时间快,其内部结构图如图 2.3 所示。图 2.3 LM393 内部结构图

10、2.2.2 电机驱动单元电路的设计图 2.4 电机驱动电路图 由于要对电机实行加速减速刹车的控制,故采用由 L298N 和 74LS08 构 成的驱动电路,由 1.0 和 1.1 口负责控制 1 号电机的前进与后退,而与他们一 起走与门 74LS08 的 1.4 口负责输出 PWM 波,由 PWM 波负责控制小车的减 速与加速以及制动的控制。同时与门也起到了扩大单片机输出电流的作用,由 于 L298N 需要的输入电流 AT89C52 无法驱动,与门在此起到一定的上拉作因为要用单片机对电动机进行四象限的控制,由于控制象限的复杂以及驱 动电机功率的问题,这里我们需要采用电动机驱动芯片来实现,我们采

11、用的是 L298N 这款电机驱动芯片,该芯片具备控制简单,反应快,输出功率大,支持 外接电机工作电源等一系列优点。其结构图如图 2.5 所示。图 2.5 L298N 内部结构图2.2.3 电源模块单元电路的设计图 2.6 电源模块单元电路图由于整个控制板都需要 5V 电压,考虑到电池随着使用时间的增强,电压 会有所下降,故我们选用直流稳压电源 9V 进行供电,由于多方同时分流,有 可能造成电量不足,为了保持电压能够稳定在 5V ,故选用 L7805 进行稳压。 在其输出输入端口各并联一个电容,以起到保护芯片的作用。其内部结构图如 2.7 所示。图 2.7 L7805 内部结构图2.2.4 液晶

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

13、微调,右微调,前进,左转,右转, T 型,左 T, 右 T ,十字路口,死胡同。其流程图如图 3.1 所示。开始Y前进NN左边有路YYan=1NYan=2NYan=3NN右边有路YYan=1NYan=2NYan=3NY微调开始n-n-右转子程序微调子程序左转子程序直走子程序前进子程序左转子程序直走子程序右转子程序n-n-n-n-3.2 各子模块的设计3.2.1 转弯模块的设计为了让小车能够顺利并且及时的停止转弯, 我们将其转弯的停止标志设为当 检测前方是否有路的传感器遇到黑色轨迹,即表示其已完成转弯,这样避免了 小车转弯过大或者过小的问题。3.2.2 终点识别模块的设计为了让小车能够准确的识别

14、终点标志,采用 2 个传感器来检测终点标志,当且仅当前后检测终点的传感器同时检测到终点信号时,才认定到达终点,即 当前后前后检测终点的传感器3.2.3 防误判模块的设计列出了小车在行走时可能碰到的各种误判情况,对其一一分析后判别出应 是那种路况,将其对应情况列出,并给出小车应该正确运行的指令。4 附加功能增加了小车转弯的转向灯模拟功能,转向灯能随小车的转向实时的闪烁起来,以此一 次来表示小车的运转状态,还在车尾处额外增加了两组 led 小灯,以此表示小车现在处于 的状态即状态前进最优路径返回终点起点绿色1010绿色1010蓝色0110蓝色0110附录 1 主控程序清单#include <

15、reg52.h>#include <stdio.h>#include <intrins.h>/ char pro_left,pro_right,i,j; / 左右占空比标志 extern int a24=3,4,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0;extern int n=2,logo=0;/sbit left1=P10;sbit left2=P11; sbit right1=P12; sbit right2=P13;sbit en1=P14;sbit en2=P15;sbit p16=P16;sbit p17=P17;/ 左

16、电机正反转/ 右电机正反转/ 输出 PWM1 波控制左电机/ 输出 PWM2 波控制左电机/sbit p23=P23;sbit p24=P24;sbit p25=P25;sbit p26=P26;/sbit left_turn=P00;sbit left=P01;sbit midb=P02;/ 左侧传感器(识别路口)/ 微调左位置/ 后中间传感器(识别路口)/ 前中间(识别路口)/ 微调右位置/ 右侧传感器(识别路口)/ 延时 z*1ms/ 延时 1mssbit midf=P03;sbit right=P04;sbit right_turn=P05; / /sbit p20=P22;/左拐sb

17、it p21=P21;/直走sbit p22=P20;/右拐void first_straight();/ 启动直走void straight();/ 直走void sd_straight();/ 左岔直走void stop();/ 终点稍停void end();/ 回到起点停车void wleft();/ 左微调void wright();/ 右微调void ft_left();/ 左转 90 由黑到白void sd_left();/ 左转 90 由白到黑void ft_right();/ 右转 90 由黑到白void sd_right();/ 右转 90 由白到黑void ft_180rt

18、();/ 左转 180 由黑到白void sd_180rt();/ 左转 180 由白到黑/ /void infrared();/ 初次循迹void comeback();/ 返航void memory(int x);/ 记忆void delay(int z);/ 延时 1ms / / void delay(int z)char k;while(z-)for(k=0;k<121;k+);/ / void first_straight() / 启动走直线 p20=1;p21=0;p22=1;pro_left=85;pro_right=85;left1=1;left2=0;right1=1;

19、right2=0;delay(5); /void straight() /走直线函数p20=1;p21=0;p22=1;pro_left=80; pro_right=80;left1=1;left2=0;right1=1;right2=0; /void sd_straight() / 左岔走直线函数p20=1;p21=0;p22=1;straight();if(left_turn=1)/&&(right_turn=0)&&(midf=1)sd_straight();elsestraight();/void wleft() / 微调左转函数pro_left=0;p

20、ro_right=85;left1=0;left2=0;right1=1;right2=0;/void wright() / 微调右转函数pro_left=85;pro_right=0;left1=1;left2=0;right1=0;right2=0;/ 左转 90 由黑到白/ void ft_left() p20=0;p21=1;p22=1;pro_left=0;pro_right=80; Ho- -efMHO 八 righH"八 righNSHO 八 if(midlrul) 宀ftCDftu e-se宀 sdl_eft()v void sdefo 宀P20U0八 p21丄p22

21、丄prol-efHq prolrighH8p Ho-efMHO-=h>90=怖為孑轻-MirighH"八 righNSHO 八 if(midlrHO)宀sdefoe-se宀firsfls=raigho_ sfraigho八void fcrigho、/M>90宀p20丄p21丄P22U0八pro_left=85; pro_right=0; left1=1; left2=0; right1=0; right2=0;if(midf=1)ft_right(); elsesd_right(); void sd_right() p20=1; p21=1;/ 左轮动/ 右轮不动/ 右转

22、 90 由白到黑p22=0;pro_left=80;pro_right=0;left1=1;left2=0;right1=0;right2=0;if(midf=0) sd_right();else first_straight(); straight();/ 左轮动/ 右轮不动/ /void ft_180rt() / 左转 由黑到白 p20=0;p21=0;p22=0;pro_left=80;pro_right=80;left1=0; / 左轮反转left2=1;right1=1;right2=0;if(midf=1)ft_180rt();elseif(midf=0) sd_180rt();/

23、 右轮正转void sd_180rt()p20=0;p21=0;p22=0;pro_left=80; pro_right=80; left1=0; left2=1;right1=1;right2=0;if(midf=0) sd_180rt();elsefirst_straight();/ 左转 由白到黑/ 左轮反转/ 右轮正转straight();/void stop() / 回到起点 while(1) p17=1;p16=1; p23=0;p24=0;p25=0;p26=0;pro_left=0;pro_right=0;left1=1;/ 或是全等于 0/宀 sgLMeop o&ll

24、g oULMg 0&刼一>则<帑=o>Lllglod O吕_lodMlo曲 / ()puep_o>/二&总 匚壬6_ -Vi(ouuqp 一 lu)0303oHJLp 一 lu)0303ouuunrlllg)0303(lruunrl_)=_ so s«宀OU6PU(uuqp 壬)0303oHJLp 壬)0303osunrlllg)0303(uuunrl_)M so 叵密隈 -(寸)AjoujEw 寸匕舉) (odllg)0303oux_)0303ouuqp 一 lu)0303oHJLp 一 lu)0303oHHUnrlllg)0303oHHUn

25、rl_)M so 報M= 宀叮詈(OR 茎 g)0303ou 吕 _)0303(uuqp 壬)0303(uJLp 壬)0303oHHUnrlllg)0303oHHUnrl_)MHU9cxld HugcxldOH 寸CXId ouecxld 和卜Ld oH9Ld ou6Eq=Elp宣聘= OP2B上 U 一 po>f MLWOEgv u6eu(uuqp 壬)O3O3( LHUP 壬)O3O3(uHUnrlllg)0303ouuunrl_)M so (ouuqp 壬)0303oHJLp 壬)O3O3(uuunrlllg)0303(uuunrl_)M so >HMLWOEgv 宀匚6舉

26、(uuqp 壬)0303oHJLp 壬)O3O3(uuunrlllg)0303(uuunrl_)M so 般M毎«灭於兆/ 宀“匸黑刁 (ouuqp 壬)O3O3( LHUP 壬)0303oHHUnrlllg)0303(lrHUnrl_)M so 知«-sAJOlug/、 宀翁6舉 (uuqp 壬)O3O3( LHJLP 壬)0303oHHUnrlllg)0303(uuunrl_)M so 挥牠 / (OHHqp 一 E)0303(OHJLP 一 E)0303(LHHUnrlLI6_)0303(OHHUnrl_)u so 密牠 MLWOEgv 宀匚6舉 (uuqp 壬)03

27、03oHJLp 壬)O3O3(uHUnrlllg)0303ouuunrl_)M so s«挥«灭於兆= 盲匸黑刁<M/?匕舉) so s = 9"6舉) (ou'lllg)0303(lrx刼 _)0303oHHUnrlll6_)0303oHHUnrl_)M so allg)s«/、 宀帘詈 (匸上1|6_)03030“卫2)03030专1|9|茎6_)03030专119|黑_)=一哑隸swoluelu 二 宀OU6PB(odllg )0303oux_)0303ouuqp 一 IU)O3O3(LHJLP 壬)0303oHHUnrlllg)03

28、03oHHUnrl_)M so挥牠>+冢兆/ ULU6B刁(ouuqp 一 1100303( LHJLP 壬)O3O3(uHUnrlllg)0303(uuunrl_)M so >+ JLWOUJeuJW 代|?6舉) (Luuqp 一 lu)0303( lhjlp 一 e)0303( Luuunrlll6 一)0303( so 挥牠 毎牠灭於兆 / (Llr6e刁 (ouuqp 一 IU)O3O3(LHJLP 壬)0303(uHUnrlllg)0303ouuunrl_)M soswitch (flag)case 0: p17=0;p16=0;p23=0;p24=0;p25=0;p2

29、6=0;end();ft_180rt();memory(0);logo=1; break; /p17=0;p16=0; 终点 两个灯全亮case 1: ft_right();memory(1);logo=0;break;/右拐case 2: sd_straight();memory(2);logo=0;break;/直走case 3: ft_left();memory(3);logo=0;break;/左拐case 4: ft_180rt();memory(4);logo=0;break;/死胡同case 5: wright();logo=0;break; /左偏case 6: wleft()

30、;logo=0;break;/右偏case 7: straight();logo=0;break;/直走case 11: ft_right();logo=0;break;/误认为右case 12: straight();logo=0;break;/误认为直case 13: ft_left();logo=0;break; /误认为左default: straight();logo=0;break;/ 记忆程序/ / void memory(int mflag)if(mflag=1)an+=1; if(an=4) an=0; n=n-2;n+;elseif(mflag=2)an+=2; n+;el

31、seif(mflag=3)an+=3;-uecxldOMOeq Eoo po>/ruo止冒)七 so宀!uolluro(寸止冒M so宀匸+u(Cro)ll9 一 MS= (Lsqp 壬)0303(LRUnrlll6_)七 so系q 丁匚|?060-三 EqiULH060-系q 丁匚|?060-蚩WBW/報M/01163 c SB。Oll6rolslps<N Seoouzl二 l SB。(Cro)ll9 一 MS(Lsqp 壬)0303(uHUnrl_)M so?H060_oM6rols(odllg)0303oux_)0303(uuqp 壬)O3O3(LHJLP 壬)0303oHH

32、Unrlll6_)0303oHHUnrl_)M-u9Ld oGd Ou9cxld ougcxld -u寸CXIdcase 1:ft_left();logo=1;n-;break;case 2:sd_straight();logo=1;n-;break;case 3:ft_right();logo=1;n-;break; elseif(left_turn=0)&&(right_turn=0)&&(midf=0)&&(midb=0)&&(left=0)&&( right=0) /&&(n=1) p17=

33、1;p16=1;stop(); / 回到起点 两个灯全灭 elseif(left_turn=0)&&(right_turn=0)&&(left=0)&&(right=1) wright();logo=1; / 左偏 (motor_right) elseif(left_turn=0)&&(right_turn=0)&&(left=1)&&(right=0) wleft();logo=1; / 右偏 (motor_left) /* elsestraight();logo=1;*/ / void init

34、()TMOD=0x01;TH0=(65536-100)/256;TL0=(65536-100)%256;EA=1; / 中断总开关ET0=1;/ 开启定时器0TR0=1;/ 定时器 0 启动en1=1;/ 使能 1 端en2=1;/ 使能 2 端void time0(void)interrupt 1i+;j+;if(i<=pro_left) en1=1;else en1=0;if(i=100) en1=en1;i=0;if(j<=pro_right) en2=1;else en2=0;if(j=100) en2=en2;j=0;TH0=(65536-100)/256;TL0=(65

35、536-100)%256;/void main(void)init();delay(1);while(1)if(logo=0)infrared();if(logo=1)comeback();void int0(void)interrupt 0附录 2 液晶驱动源代码程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rs=P10;sbit lcden=P11;sbit p20=P20;sbit p21=P21;uchar count,num;char miao,shi,fen;uchar code table="2010-6-22 ROBOT" uchar code table1=" 00:00:00"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论