智能循迹小车C程序完美详尽_第1页
智能循迹小车C程序完美详尽_第2页
智能循迹小车C程序完美详尽_第3页
智能循迹小车C程序完美详尽_第4页
智能循迹小车C程序完美详尽_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、""MHBMMMM«»HM«BMBBMH»«WMVWWM*«MB*MMMBB不小车运行主程序简介:模块组成:红外对管检测模块一一五组对管,五个信号采集端口直流电机驱动模块一一驱动两个直流电机,另个轮子用万向轮单片机最小系统用于烧写程序,控制智能小车运动功能简介:在白色地面或皮质上用黑色胶带粘贴出路线路径宽度微大于相邻检测管间距。这样小车便可在其上循迹运行。补充说明:该程序采取“右优先”的原则:即右边有黑线向右转,若无,前方有黑线,向前走,若无,左边有黑线,向左转,若全无,从右方向后转。程序开头定义的变量的取值是根据

2、我的小车所调试选择好的,如果采用本程序,请自行调试适合自己小车的合适参数值。编者:陈尧,黄永刚(江苏大学电气学院二年级,三年级)1 .假定:IN1=1,IN3=1时电机正向转动,必须保证本条件2 .假定:遇到白线输出0,遇到黑线输出1;如果实际电路是:遇到白线输出1,遇到黑线输出0,这种情况下只需要将第四,第五句改成:definem01#defineml0即可。3. 说明1:直行速度full_speed_left,full_speed_right.转弯,调头速度correct_speed_left,correct_speed_right.微小校正时高速轮full_speed_left,full

3、_speed_right;低速轮correct_speed.可以通过调节第六,七,八,九,十条程序,改变各个状态下的占空比(Dutycycle),以求达到合适的转弯,直行速度4. lenthlength检测到黑线到启动转动的时间间隔5. widthmid3在黑线上到脱离黑线的时间差作为判断中心位置是否进入黑线的标志,由于运行的粗糙性和惯性,常取其他对管的输出信号作为判断条件7.check.right一一若先检测到左边黑线,并且左边已出黑线,判断右端是否压黑线时间拖延Sinclude<STC12C5A60S2.h>defineucharunsignedchardefineuintun

4、signedintdefinemO1黑线ml,白线mOdefineml0definefull_speed_left40方便调节各个状态的占空比,可用参数组:(30,35,6,25,30,68000,27000,500):?definefull_speed_right45/(40,45,6,25,30,68000,27000,500);definecorrect_speed6校正时的低速轮的占空比defineturn_speed_left25defineturn_speed_right30?definelenth68000测试数据:10000一1005002000800007600068000?

5、definewidth2700050010>2000600003000027000definecheck.right500/2000>20200>500学definemidileftldefinemidrright5ucharDuty_left,Duty_right,i=0,j=0;/左右占空比标志,取1100sbitIN1=P2O;sbitIN2=P2l;sbitIN3=P2A2;sbitIN4=P2*3;sbitENA=PrO;sbitENB=Pri;循迹口五组红外对管,依次对应从左往右第1,2,3,4,5五组sbitleftl=Pr6;sbitleft2=Pr5;sbi

6、tmid3=P1*4;sbitright4=Pr3;sbitright5=Pr2;voidline_left0;voidline_right0;voidline_straight0reentrant;voiddelay(longintDelay_time)延时函数uintt=Delay_time;while(t-);voidinit0定时器初始化leftl=mO;初始化left2=m0;白线位置mid3=ml;黑线位置right4=m0;right5=m0;TMOD=0x01;THO=(65536-66)/256;TLO=(65536-66)%6;EA=1;ETO=1TRO=1使能端口,初始化

7、ENA=1ENB=1voidtimeO(void)interrupt1中断程序i+;调速在中断中执行j+;if(i<=Duty_left)ENA=1;elseENA=0;if(i>100)ENA=l;i=0;if(j<=Duty_right)ENB=1;elseENB=O;if(j>100)ENB=l;j=O;THO=(65536-66)/256;取约150HZ,12M晶振,每次定时66us,分100次,这样开头定义的变量正好直接表示占空比的数值TLO=(65536-66)%6;voidcorrect_left()向左校正,赋值Duty_left=correct_spe

8、ed;Duty_right=full_speed_right;IN1=1;IN2=0;IN3=1;IN4=0;voidcorrect_right()向右校正,赋值Duty_left=full_speed_left;Duty_right=correct_speed;IN1=1;IN2=0;IN3=1;IN4=0;voidturneft()左转,赋值(Duty_left=turn_speed_left;Duty_right=turn_speed_right;IN1=O;转弯时个正转,一个反转,IN2=1;IN3=1;IN4=0;/voidturnjright()右转,赋值(Duty_left=tu

9、rn_speed_left;Duty_right=turn_speed_right;IN1=1;转弯时个正转,个反转,IN2=0;IN3=0;IN4=1;WMVMVWW«WWWMMW«W«MVWW«*»W/rvoidstraight()/直走,赋值(Duty_left=full_speed_left;/左右电机占空比初始化,调节直线运动速度Duty_right=full_speed_right;鉴于左右轮电机内部阻力不同,故占空比取不同值,这组值需要单独写程序取值IN1=1;IN2=0;IN3=1;IN4=0;W»«

10、7;«i»«*«»«*0*«»0»«*«»«»«»«*«»voidline_straight0reentrant/函数名后加reentrant可以递归调用,直走黑直线时(straight0;if(right5=ml)line_right();elseif(leftl=ml)line_left0;elseif(left2=ml)防止校正时,小车冲出过大,导致2,4号检测管扉蔽了两端检测管的检测,避免其走直线时

11、出轨while(left2=ml)correct_left0;if(right5=ml)(line_right0;gotolabe!3;elseif(leftl=ml)line.leftO;gotolabel3;elseif(right4=ml)防止校正时,小车冲出过大,导致2,4号检测管解蔽了两端检测管的检测,避免其走直线时出轨while(right4=ml)correct_right0;if(right5=ml)line_right();gotolabel3;elseif(leftl=ml)line_left0;gotolabel3;elseif(leftl=m0)&&(l

12、eft2=m0)&&(mid3=m0)&&(right4=m0)&&(right5=m0)(straight0;/delay(lenth);while(right4=m0)本来应该是用mid3,但是为提高灵敏度,选择right4;向左时,可取left2对管turn_right0;if(mid3=ml)line_straight0;label3:;什么都不做/MVMMMVW«WWWMWWWMMMVWWMVMVMMMVMV/1voidline.right0右边有黑线时(straight。;/这里的直走是在不管红外检测结果的直行delay(l

13、enth);if(mid3=ml)turn_right();执行向右转的赋值label:delay(width);由width值决定转弯时mid3经过黑线宽度时所需要的时间if(mid3=m0)while(right4=m0)()elsegotolabel;elseif(mid3=m0)(turn_right0;while(rightl=mO)()if(midr=ml)line_straight0;.,一一一一一一一一一一一一fIvoidline_left()/左边出现黑线时(while(leftl=ml)(if(right5=ml)line_right0;gotolabel2;delay(checkjight);左边遇到黑线时,左边出了黑线之后,继续延时段时间,判断右边是否遇到黑线,若遇到黑线,执行line_right()函数if(right5=ml)line_right0;gotolabe!2;)if(mid3=ml)jj(left2=ml)(right4=ml)line_straight0;elsewhile(left2=m0)turn.left0;if(midl=ml)line_straight0;labe12:;voiddetect.inf

温馨提示

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

评论

0/150

提交评论