wjd40 发表于 2010-4-10 18:30:42

(处女帖)智能小车基础硬件完成,看看.......求教传感器位置,间距的问题

参加了学校的一个比赛项目,我们小组的叫《基于多传感器的模块化机器人设计》,最后是要做成学习套件或教程之类的。。
今天刚装好了循迹所需的硬件,发上来给大家看看。。(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)

wjd40 发表于 2010-4-10 21:15:17

到处看了看。。光敏好像都装在万向轮那的。。。。

ct_dev 发表于 2010-4-11 11:18:59

楼主的轮胎和铜联轴花了血本吧,淘宝上看到挺贵的.轮胎12,联轴8.5.两个轮胎就花了40了.
寻线似乎用的是红外线一体接收头,这东西非常灵敏,接收角度也很大(120度),识别黑白线不容易做得光滑,我以前做过.

loongsuns 发表于 2010-4-11 12:36:15

传感器的安装位置需要根据黑色胶带的宽度确定,推荐间距为胶带宽度。
从控制角度来说传感器装在大轮附近比较好,因为我认为越接近方向控制轮越好。

单片机用51感觉不是很好,不过一般应用足够了。

只作过四轮寻迹,对三轮的不了解。不过比较喜欢三轮的灵活性。

zeunike 发表于 2010-4-11 12:42:41

回复【楼主位】wjd40
-----------------------------------------------------------------------

以前电子大赛时做过一点,你传感器用的是红外反射对管吧,最重要的是实际调试,可能会与想象有出入,感觉你的传感器位置可以,和我们当时的差不多,呵呵,加油啊。

wjd40 发表于 2010-4-11 15:11:37

谢谢各位!
觉得红外对管装在万向轮那的话,似乎容易走平滑。但转弯时容易出轨。。。
装在两轮那边的话容易走成蛇形……
现在只好多试试

bbandpp 发表于 2010-4-11 15:16:58

两头都加啊~我们那时候就是两头都加了,两个方向都可以~

zheshiwo 发表于 2010-4-11 23:50:25

厉害,高二就做过啊,那个小车只用一个电机就行了?

wjd40 发表于 2010-4-12 00:03:30

回复【7楼】zheshiwo
-----------------------------------------------------------------------

两个随身听上的小电机。很简单的电路,两个红外对管,一边的在黑线上另一边的电机就转。。。

yunhuisong 发表于 2010-4-12 19:18:24

|||
|||
* ||| *
|*|
* ||| *
|||
* ||| *
|||
直接跨列在黑线两侧比较好。两边不要离黑线太远。两边可以适当增减传感器个数

to_destiny 发表于 2010-4-15 16:18:48

楼主这个弄的不错...

sunzhaod 发表于 2010-4-15 17:32:39

楼主的头像有意思,有抑郁症的机器人马文,I feel so depressed!“银河系漫游指南”,还记得一个比较搞笑的场景,“立场转换枪”,
马文拿着那枪对着一群外星人一射,对方立马都换上了严重抑郁症!什么时候人类造的机器人能患上抑郁症呢?

上个图片,怀念一下
http://cache.amobbs.com/bbs_upload782111/files_28/ourdev_546609.jpg
(原文件名:marvin.jpg)

wjd40 发表于 2010-4-15 19:53:35

循线程序基本可以了。还要花时间改进……


#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();
}       
}

wjd40 发表于 2010-4-17 15:06:48

最后把传感器装在万向轮前,改了循线程序,效果很好。
先上程序:
#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();//循线
/*+其它程序*/
}       
}

QQ373466062 发表于 2010-4-17 17:00:08

我们也在做小车不过是用STC89C52RCL298NLM339   以及和你一样的红外传感器   同样是循迹的

wjd40 发表于 2010-4-17 18:19:55

回复【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)

sunzhaod 发表于 2010-4-17 18:24:32

回复【15楼】wjd40
-----------------------------------------------------------------------
不错,怪不得人家郁闷呢,马文的大脑袋的容量比一个行星还大,人家是怀才不遇啊!(*^__^*) 另外,小车做的不错!

wjd40 发表于 2010-4-24 16:44:49

上视频。。
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)

zxl2431 发表于 2010-5-2 14:53:47

不错,车体有点大。转小弯不太流畅。

ct_dev 发表于 2010-5-10 18:12:59

看了楼主的视频,感觉寻线都脱轨了,可能你的程序在没线的时候也在运动吧,然后看见线又开始跑似的.放在万向轮前感觉不好.

我也刚发了个视频上去.

http://v.youku.com/v_show/id_XMTcxOTA3NjI4.html

ZZL520 发表于 2010-5-11 13:05:16

mark

combug 发表于 2010-6-4 10:43:46

呵呵 ,看了几个贴都是我家的宝贝,好开心,店铺地址:www.jyoorobot.cn

chenhuwyl 发表于 2010-7-18 13:05:32

mark

jmulsh 发表于 2010-10-25 21:55:16

我来看了

chenrulin 发表于 2010-11-16 21:44:05

mark

LegendSong 发表于 2011-6-22 13:19:34

m

杏仁酥 发表于 2016-6-5 10:51:08

mark下,想用STC89S52+L298N,做个简单的小车,没基础,还不会接线,下下来学习下,谢谢楼主
页: [1]
查看完整版本: (处女帖)智能小车基础硬件完成,看看.......求教传感器位置,间距的问题