(处女帖)智能小车基础硬件完成,看看.......求教传感器位置,间距的问题
参加了学校的一个比赛项目,我们小组的叫《基于多传感器的模块化机器人设计》,最后是要做成学习套件或教程之类的。。今天刚装好了循迹所需的硬件,发上来给大家看看。。(AT89S52+L298N+Lm358)
有哪些可以改进的地方,比如红外传感器的安装位置,怎样效果最好?(想用单条黑胶带作黑线)原本想装在万向轮前的。。。
软件得尽快了。。要用到PWM。才刚开始学51。。今晚找些资料看看。。。
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_545369.jpg
右边那小的是高二时做的循迹小车遗体。。效果不错,用6个三极管。 (原文件名:小车.jpg)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_545370.jpg
两节锂电+AT89S52最小系统+l298n电机驱动+lm358做的光敏模块 (原文件名:IMAGE_043.jpg)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_545371.jpg
(原文件名:IMAGE_044.jpg)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_545372.jpg
(原文件名:最小系统+光敏模块.jpg) 到处看了看。。光敏好像都装在万向轮那的。。。。 楼主的轮胎和铜联轴花了血本吧,淘宝上看到挺贵的.轮胎12,联轴8.5.两个轮胎就花了40了.
寻线似乎用的是红外线一体接收头,这东西非常灵敏,接收角度也很大(120度),识别黑白线不容易做得光滑,我以前做过. 传感器的安装位置需要根据黑色胶带的宽度确定,推荐间距为胶带宽度。
从控制角度来说传感器装在大轮附近比较好,因为我认为越接近方向控制轮越好。
单片机用51感觉不是很好,不过一般应用足够了。
只作过四轮寻迹,对三轮的不了解。不过比较喜欢三轮的灵活性。 回复【楼主位】wjd40
-----------------------------------------------------------------------
以前电子大赛时做过一点,你传感器用的是红外反射对管吧,最重要的是实际调试,可能会与想象有出入,感觉你的传感器位置可以,和我们当时的差不多,呵呵,加油啊。 谢谢各位!
觉得红外对管装在万向轮那的话,似乎容易走平滑。但转弯时容易出轨。。。
装在两轮那边的话容易走成蛇形……
现在只好多试试 两头都加啊~我们那时候就是两头都加了,两个方向都可以~ 厉害,高二就做过啊,那个小车只用一个电机就行了? 回复【7楼】zheshiwo
-----------------------------------------------------------------------
两个随身听上的小电机。很简单的电路,两个红外对管,一边的在黑线上另一边的电机就转。。。 |||
|||
* ||| *
|*|
* ||| *
|||
* ||| *
|||
直接跨列在黑线两侧比较好。两边不要离黑线太远。两边可以适当增减传感器个数 楼主这个弄的不错... 楼主的头像有意思,有抑郁症的机器人马文,I feel so depressed!“银河系漫游指南”,还记得一个比较搞笑的场景,“立场转换枪”,
马文拿着那枪对着一群外星人一射,对方立马都换上了严重抑郁症!什么时候人类造的机器人能患上抑郁症呢?
上个图片,怀念一下
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_546609.jpg
(原文件名:marvin.jpg) 循线程序基本可以了。还要花时间改进……
#include <reg52.h>
#include <math.h>
unsigned char VL,VR,tt;
/*****定义电机控制端******/
sbit MRP=P2^0;//右电机使能
sbit MLP=P2^1;
sbit MRB=P2^2;//右电机后退
sbit MRG=P2^3;//右电机前进
sbit MLB=P2^4;
sbit MLG=P2^5;
sbit LED1=P2^6;
void M(int l,r) //电机控制函数
{ //l,r分别为左右电机速度
if(l<0) //速度范围“-9~0~+9”
{MLG=0;MLB=1;}
else
{
if(l==0)
{MLG=1;MLB=1;l=9;}
else
{MLG=1;MLB=0;}
}
if(r<0)
{MRG=0;MRB=1;}
else
{
if(r==0)
{MRG=1;MRB=1;r=9;}
else
{MRG=1;MRB=0;}
}
VL=abs(l);
VR=abs(r);
}
void int1(void)//初始化
{
VL=0;
VR=0;
MLP=1;
MRP=1;
MRG=0;
MLG=0;
MRB=0;
MLB=0;
P3=0xFF;
LED1=0;
tt=0;
}
void InitTimer0(void) //定时器初始化
{
TMOD = 0x01;
TH0 = 0x0FF;
TL0 = 0x0EC;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1 //定时器0中断(PWM判断)
{
TH0 = 0x0F8;
TL0 = 0x00;
if(tt==9)
{
tt=0;
MLP=1;
MRP=1;
}
else
{
if(VL==tt)MLP=0;
if(VR==tt)MRP=0;
}
tt++;
}
void follow_line(void) //循线控制函数(待改进)
{
switch(P3|0xf0)
{
case 0xff:M(5,5);break;
case 0x00:M(0,0);break;
case 0xFB:M(0,3);break; //1011
case 0xFD:M(3,0);break; //1101
case 0xF7:M(-4,7);break;//0111
case 0xFE:M(7,-4);break;//1110
default:M(0,0) ;
}
}
void main() //主程序
{
int1();
InitTimer0();
while(1)
{
follow_line();
}
} 最后把传感器装在万向轮前,改了循线程序,效果很好。
先上程序:
#include <reg52.h>
#include <math.h>
#include <bin.h> //包含二进制转十六宏定义文件:如#define b0000_0001 0x01
/********************************
芯片:AT89S52 频率:24.576mhz
编写:wjd
********************************/
unsigned char VL,VR,tt; //定义全局变量:VL,VR为左右电机速度,tt为pwm时间
/*定义电机控制端*/
sbit MLP=P2^0; //左电机使能
sbit MRP=P2^1; //右电机使能
sbit MLG=P2^2; //左电机前进
sbit MLB=P2^3; //左电机后退
sbit MRG=P2^4; //右电机前进
sbit MRB=P2^5; //右电机后退
/*定义红外传感器*/
sbit SR2=P3^0; //
sbit SR1=P3^1; //左一和右一在黑线上
sbit SL1=P3^2; //
sbit SL2=P3^3; //
void M(int l,r) //电机控制函数
{ //l,r分别为左右电机速度
if(l<0) //速度范围:“-9~0~+9”整数
{MLG=0;MLB=1;}
else
{
if(l==0)
{MLG=1;MLB=1;l=9;}
else
{MLG=1;MLB=0;}
}
if(r<0)
{MRG=0;MRB=1;}
else
{
if(r==0)
{MRG=1;MRB=1;r=9;}
else
{MRG=1;MRB=0;}
}
VL=abs(l);
VR=abs(r);
}
void init(void)//初始化变量和端口
{
VL=0;
VR=0;
MLP=1;
MRP=1;
MRG=0;
MLG=0;
MRB=0;
MLB=0;
P3=0xFF;
tt=0;
}
void InitTimer0(void) //定时器0初始化
{
TMOD = 0x01;
TH0 = 0x0FF;
TL0 = 0x0EC;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1 //定时器0中断(PWM)
{
TH0 = 0x0F8;
TL0 = 0x00;
if(tt==9)
{
tt=0;
MLP=1;
MRP=1;
}
else
{
if(VL==tt)MLP=0;
if(VR==tt)MRP=0;
}
tt++;
}
void follow_line(void) //循线控制函数
{
switch(P3|0xf0) //“P3|0xf0”低四位代表四个传感器
{
case b1111_1001:M(8,8);break;
case b1111_1111:M(8,8);break;
case b1111_1101:
{M(8,7);}
while(SL1&&SR1==1)
{M(5,0);}break;
case b1111_1011:
{M(7,8);}
while(SL1&&SR1==1)
{M(0,5);}break;
case b1111_1110:
M(4,-4);
while(SL1&&SR1==1)
{}break;
case b1111_0111:
M(-4,4);
while(SL1&&SR1==1)
{}break;
default:M(0,0) ;
}
}
void main() //主函数
{
init();
InitTimer0();
while(1)
{
follow_line();//循线
/*+其它程序*/
}
} 我们也在做小车不过是用STC89C52RCL298NLM339 以及和你一样的红外传感器 同样是循迹的 回复【11楼】sunzhaod 查尔斯*SUN
-----------------------------------------------------------------------
。。我也再上几张。。
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_547089.jpg
(原文件名:http_imgload.jpg)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_547090.jpg
(原文件名:http_imgload2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_547091.jpg
(原文件名:http_imgload3.jpg)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_547092.jpg
(原文件名:http_imgload4.jpg) 回复【15楼】wjd40
-----------------------------------------------------------------------
不错,怪不得人家郁闷呢,马文的大脑袋的容量比一个行星还大,人家是怀才不遇啊!(*^__^*) 另外,小车做的不错! 上视频。。
YOUKU http://v.youku.com/v_show/id_XMTY3NjczNzQw.html
点击此处下载 ourdev_548961.rar(文件大小:7.48M) (原文件名:20100424007.MP4.rar)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_548962.jpg
(原文件名:http_imgload2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_548963.jpg
(原文件名:http_imgload.jpg) 不错,车体有点大。转小弯不太流畅。 看了楼主的视频,感觉寻线都脱轨了,可能你的程序在没线的时候也在运动吧,然后看见线又开始跑似的.放在万向轮前感觉不好.
我也刚发了个视频上去.
http://v.youku.com/v_show/id_XMTcxOTA3NjI4.html mark 呵呵 ,看了几个贴都是我家的宝贝,好开心,店铺地址:www.jyoorobot.cn mark 我来看了 mark m mark下,想用STC89S52+L298N,做个简单的小车,没基础,还不会接线,下下来学习下,谢谢楼主
页:
[1]