搜索
bottom↓
回复: 26

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

[复制链接]

出0入0汤圆

发表于 2010-4-10 18:30:42 | 显示全部楼层 |阅读模式
参加了学校的一个比赛项目,我们小组的叫《基于多传感器的模块化机器人设计》,最后是要做成学习套件或教程之类的。。
今天刚装好了循迹所需的硬件,发上来给大家看看。。(AT89S52+L298N+Lm358)
  有哪些可以改进的地方,比如红外传感器的安装位置,怎样效果最好?(想用单条黑胶带作黑线)原本想装在万向轮前的。。。
  软件得尽快了。。要用到PWM。才刚开始学51。。今晚找些资料看看。。。



右边那小的是高二时做的循迹小车遗体。。效果不错,用6个三极管。 (原文件名:小车.jpg)


两节锂电+AT89S52最小系统+l298n电机驱动+lm358做的光敏模块 (原文件名:IMAGE_043.jpg)


(原文件名:IMAGE_044.jpg)


(原文件名:最小系统+光敏模块.jpg)

出0入0汤圆

 楼主| 发表于 2010-4-10 21:15:17 | 显示全部楼层
到处看了看。。光敏好像都装在万向轮那的。。。。

出0入0汤圆

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

出0入0汤圆

发表于 2010-4-11 12:36:15 | 显示全部楼层
传感器的安装位置需要根据黑色胶带的宽度确定,推荐间距为胶带宽度。
从控制角度来说传感器装在大轮附近比较好,因为我认为越接近方向控制轮越好。

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

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

出0入0汤圆

发表于 2010-4-11 12:42:41 | 显示全部楼层
回复【楼主位】wjd40
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 2010-4-11 15:11:37 | 显示全部楼层
谢谢各位!
  觉得红外对管装在万向轮那的话,似乎容易走平滑。但转弯时容易出轨。。。
装在两轮那边的话容易走成蛇形……
  现在只好多试试

出0入4汤圆

发表于 2010-4-11 15:16:58 | 显示全部楼层
两头都加啊~我们那时候就是两头都加了,两个方向都可以~

出0入0汤圆

发表于 2010-4-11 23:50:25 | 显示全部楼层
厉害,高二就做过啊,那个小车只用一个电机就行了?

出0入0汤圆

 楼主| 发表于 2010-4-12 00:03:30 | 显示全部楼层
回复【7楼】zheshiwo  
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2010-4-12 19:18:24 | 显示全部楼层
|||
  |||
* ||| *
  |*|
* ||| *
  |||
* ||| *
  |||
直接跨列在黑线两侧比较好。两边不要离黑线太远。两边可以适当增减传感器个数

出0入0汤圆

发表于 2010-4-15 16:18:48 | 显示全部楼层
楼主这个弄的不错...

出0入0汤圆

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

上个图片,怀念一下

(原文件名:marvin.jpg)

出0入0汤圆

 楼主| 发表于 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();
}       
}

出0入0汤圆

 楼主| 发表于 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();  //循线
  /*+其它程序*/
}       
}

出0入0汤圆

发表于 2010-4-17 17:00:08 | 显示全部楼层
我们也在做小车  不过是用STC89C52RC  L298N  LM339   以及和你一样的红外传感器     同样是循迹的

出0入0汤圆

 楼主| 发表于 2010-4-17 18:19:55 | 显示全部楼层
回复【11楼】sunzhaod 查尔斯*SUN
-----------------------------------------------------------------------

。。我也再上几张。。

(原文件名:http_imgload.jpg)


(原文件名:http_imgload2.jpg)


(原文件名:http_imgload3.jpg)


(原文件名:http_imgload4.jpg)

出0入0汤圆

发表于 2010-4-17 18:24:32 | 显示全部楼层
回复【15楼】wjd40  
-----------------------------------------------------------------------
不错,怪不得人家郁闷呢,马文的大脑袋的容量比一个行星还大,人家是怀才不遇啊!(*^__^*) 另外,小车做的不错!

出0入0汤圆

 楼主| 发表于 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_imgload2.jpg)


(原文件名:http_imgload.jpg)

出0入0汤圆

发表于 2010-5-2 14:53:47 | 显示全部楼层
不错,车体有点大。转小弯不太流畅。

出0入0汤圆

发表于 2010-5-10 18:12:59 | 显示全部楼层
看了楼主的视频,感觉寻线都脱轨了,可能你的程序在没线的时候也在运动吧,然后看见线又开始跑似的.放在万向轮前感觉不好.

我也刚发了个视频上去.

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

出0入0汤圆

发表于 2010-5-11 13:05:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-4 10:43:46 | 显示全部楼层
呵呵 ,看了几个贴都是我家的宝贝,好开心,店铺地址:www.jyoorobot.cn

出0入0汤圆

发表于 2010-7-18 13:05:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-25 21:55:16 | 显示全部楼层
我来看了

出0入0汤圆

发表于 2010-11-16 21:44:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-22 13:19:34 | 显示全部楼层
m

出0入0汤圆

发表于 2016-6-5 10:51:08 | 显示全部楼层
mark下,想用STC89S52+L298N,做个简单的小车,没基础,还不会接线,下下来学习下,谢谢楼主
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 19:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表