智能往返小车的控制【恢复】
智能往返小车的控制,这是2003年全国电子设计大赛的题目,我用51单片机来实现控制,现在拿出来跟大家分享: 实现任务
小车能在起跑线与终点线自动往返。
(1)车辆从起跑线出发,到达终点线后停留10S,然后自动返回起跑线。
(2)中间300CM的限速区,车辆往返均要求以低速通过,通过时间8S。
跑道宽度0.5m,表面为瓷砖地板,两侧有2cm的黑线作为跑道分界线,终点有黑带提示‘,跑道如下图所示
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479881.jpg
(原文件名:000.jpg)
2.系统方案选择
根据题目要求,电动车系统应具有:起点加速前进、减速, 限速区减速,加速,终点停留,后退、限速区减速、加速,起点停留等功能,为此按功能,系统可划分若干基本模块:黑白、检测模块,控制器模块,电机驱动模块。
2. 主要硬件设计
(1)控制电路电路的设计,如下图所示:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479902.jpg
(原文件名:红外检测和光藕隔离.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_479903.jpg
(原文件名:H桥.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_480561.jpg
单片机 (原文件名:4.jpg)
程序:
#include <reg52.h> //
#define uchar unsigned char // 开头定义,方便下面使用
#define uint unsigned int
#define ulong unsigned long
sbit P32=P3^2; // 红外检测口
sbit P12=P1^2; // 直流电机I/O口1
sbit P13=P1^3; // 直流电机IO口2
void delly(ulong y); //
void unit();
uint code data_table[]={250,250,250,150,250,0,250,150,250};//用数组,调制每个期间的PWM
uchar i,timeh,timel;
uint pwm_data,time_counter,counter1;
main()
{
unit();
while(1)
{
if(i<5)//开始前进
{
P12=1;
P13=0;
delly(pwm_data);
P12=0;
delly(1000-pwm_data);//占空比
}
else if(i==5)//到打终点后,停止
{
P13=0;
P12=0;
delly(333333);
P13=1;
while(i==5); }
else if(i>5&i<9)//到达终点之后返回
{
P12=0;
P13=1;
delly(pwm_data);
P13=0;
delly(1000-pwm_data);//返回到起跑线上停止
}
else
{
P13=0;
P12=0;
while(1);
}
//
}
}
void unit()
{
i=0;
P3=0xff;//
P1=0xff;
time_counter=0;
pwm_data=data_table;
TMOD=0x11;//
TH0=0x00;//
TL0=0x00;
EA=1;//
ET0=1;
EX0=1; //
IT0=1;//′
}
//// óê±′|àí/////
void delly(ulong y) //延时
{
while(y)
y--;
}
//////////// D ′|àí2 · ////////////
void int0() interrupt 0 using 0//中断0
{
//timel=TL0;
if(i>=1)
{
if((time_counter-counter1)>20)
i++;
}
else
{
i++;
TR0=1;
}
pwm_data=data_table;
counter1=time_counter;
//timeh=TH0;
}
void timer0() interrupt 1 using 1 //定时器0中断,
{
TR0=0;
if(time_counter<10000)
time_counter++;
else
time_counter=0;
//ET0=0;
TH0=0x00;
TL0=0x00;
TR0=1;
// t1_flag=1;
} 呵呵,很有创意嘛,看上去很不错啊,谢谢分享 下面是程序,代码为汇编,在KEIL下编写。
程序ourdev_485125.rar(文件大小:8K) (原文件名:线控小车.rar) http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_493032.jpg
这是我以前做的小车图片 (原文件名:小车.jpg) 谢谢 choulong 丑龙 的分享 真的很感谢你,因为刚接触单片机,只是做些像LCD时钟显示,矩阵键盘等简单的东西。
本贴被 Joyce 编辑过,最后修改时间:2008-11-07,16:40:07. 时间久了,原理图已经没有了,如果有需要我给你话一个。这个系统不复杂的 方便的话,能不能分享一下原理图?对新手帮助很大 呵呵,在两年前(那时候读大三)我帮助大四哥们做了一个毕业设计,功能与你的基本一样。使用AT89S51做的。你可以看下对你有没有帮助哈!!!!!
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_485087.jpg
侧面 (原文件名:照片 004.jpg)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_485088.JPG
由于时间较紧,做工有点粗糙 (原文件名:照片 006.JPG)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_485089.JPG
图中的电位器使用来调节红外传感器在不同光照下的灵敏度的 (原文件名:照片 024.JPG)
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_485090.JPG
车体是玩具汽车改装 (原文件名:照片 027.JPG) 我是自动化专业的,这是我大二时候做的项目,里面必很存在些问题,敬请各位高手能够指点迷津 -- ---- 感谢!学习学习! 很感谢!我也正在做小车!很有用. 看起来都很不错呀,我也正在做智能小车的毕业设计,用ATMEGA16控制的.马上就要和大家见面了. MARK 谢谢! xuexi 那个电位器是干什么用的? 我要研究~~~ 好东西,留名 好东西啊 正在做这个东西,希望有机会得到楼主的指点啊,我也才大二,对这个都是刚刚上手呢 mark 学习了 看起来蛮酷的嘛 m
页:
[1]