基于光电传感器的自动寻迹智能小车的设计

基于光电传感器的自动寻迹智能小车的设计
On Design of Photosensor-based Auto-guided Vehicle

自动寻迹智能小车 AGV (Auto-guided Vehicle)

天才啊

基于光电传感器智能循迹小车的外文文献和翻译!急求!做毕业设计的!~

光电传感
智能巡航
我能写,肯定好的

我做小车用的就是这个程序,好使,选为最佳答案就是。多谢

#include "reg52.h"
#define det_Dist 2.55 //单个脉冲对应的小车行走距离,其值为车轮周长/4
#define RD 9 //小车对角轴长度
#define PI 3.1415926
#define ANG_90 90
#define ANG_90_T 102
#define ANG_180 189

/*============================全局变量定义区============================*/
sbit P10=P1^0; //控制继电器的开闭
sbit P11=P1^1; //控制金属接近开关
sbit P12=P1^2; //控制颜色传感器的开闭
sbit P07=P0^7; //控制声光信号的开启
sbit P26=P2^6; //接收颜色传感器的信号,白为0,黑为1
sbit P24=P2^4; //左
sbit P25=P2^5; //右 接收左右光传感器的信号,有光为0

unsigned char mType=0; //设置运动的方式,0 向前 1 向左 2 向后 3 向右
unsigned char Direction=0; //小车的即时朝向 0 朝上 1 朝左 2 朝下 3 朝右
unsigned sX=50; unsigned char sY=0; //小车的相对右下角的坐标 CM(sX,sY)

unsigned char StartTask=0; //获得铁片后开始执行返回卸货任务,StartTask置一
unsigned char Inter_EX0=0; // 完成一个完整的任务期间只能有一次外部中断
// Inter_EX0记录外部中断0的中断状态
// 0 动作最近的前一次未中断过,
// 1 动作最近的前一次中断过

unsigned char cntIorn=0; //铁片数
unsigned char bkAim=2; //回程目的地,0为A仓库,1为B仓库,2为停车场,
//(在MAIN中接受铁片颜色判断传感器的信号来赋值)
unsigned char Light_Flag=0;//进入光引导区的标志(1)

unsigned int cntTime_5Min=0;//时间周期数,用于 T0 精确定时
unsigned int cntTime_Plues=0; //霍尔开关产生的脉冲数
/*============================全局变量定义区============================*/


/*------------------------------------------------*/
/*-----------------通用延迟程序-------------------*/
/*------------------------------------------------*/

void delay(unsigned int time) // time*0.5ms延时
{
unsigned int i,j;

for(j=0;j<time;j++)
{
for(i=0;i<60;i++)
{;}
}
}


/*-----------------------------------------------*/
/*-------------------显示控制模块----------------*/
/*-----------------------------------------------*/


/*数码管显示,显示铁片的数目(设接在P0,共阴)*/
void Display(unsigned char n)
{
char Numb[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x37,0x77};

P0=Numb[n];

}


/*-----------------------------------------------*/
/*-------------------传感器模块------------------*/
/*-----------------------------------------------*/


/*光源检测程序: */
/*用于纠正小车运行路线的正确性*/
unsigned char LightSeek()
{ void Display(unsigned char);

bit l,r;
l=P24;
r=P25;

if(l==0&&r==1)
{
//Display(1);
return (3); //偏左,向右开
}
if(r==0&&l==1)
{
//Display(3);
return(1); //偏右,向左开

}
if((l==1&&r==1)||(l==0&&r==0))
{//Display(9);
return(0); //没有偏离,前进
}

}


/*铁片检测程序: */
/*判断铁片的颜色,设定bkAim,0为A仓库,1为B仓库,2为停车场*/
void IornColor()
{
delay(4000);
bkAim=(int)(P26);
Display((int)(P26)+2);
}


/*-----------------------------------------------*/
/*------------------运动控制模块-----------------*/
/*-----------------------------------------------*/


/*====基本动作层:完成基本运动动作的程序集====*/

/*运动调整程序: */
/*对小车的运动进行微调*/
void ctrMotor_Adjust(unsigned char t)
{
if(t==0)
{
P2=P2&240|11; //用来解决两电机不对称的问题
delay(6);
}
if(t==3)
{
P2=P2&250; //向左走
delay(1);
}
if(t==1)
{
P2=(P2&245);
delay(1); //向右走
}

P2=((P2&240)|15);
delay(10);
}

/*直走程序: */
/*控制小车运动距离,dist为运动距离(cm),type为运动方式(0 2)*/
/*只改变小车sX 和 sY的值而不改变Direction的值. */
void ctrMotor_Dist(float dist,unsigned char type)
{unsigned char t=0;
mType=type;
P2=((P2&240)|15);
cntTime_Plues=(int)(dist/det_Dist);

while(cntTime_Plues)
{
if(Inter_EX0==1&&StartTask==0)
{
cntTime_Plues=0;
break;
}
if(Light_Flag==1) t=LightSeek();

if(type==0) //向前走
{
P2=P2&249;
delay(40);
ctrMotor_Adjust(t);
}
if(type==2) //向后退
{
P2=P2&246;
delay(50);
ctrMotor_Adjust(t);
}

P2=((P2&240)|15);
if(mType==2) delay(60);//刹车制动 0.5ms
else delay(75);
}


}


/*拐弯程序: */
/*控制小车运动角度,type为运动方式(1 3) */
/*只改变小车Direction的值而不改变sX 和 sY的值*/
void ctrMotor_Ang(unsigned char ang,unsigned char type,unsigned char dir)
{
unsigned char i=0;
mType=type;
P2=((P2&240)|15);
cntTime_Plues=(int)((PI*RD*90/(180*det_Dist)*1.2)*ang/90);

while(cntTime_Plues)
{
if(Inter_EX0==1&&StartTask==0)
{
cntTime_Plues=0;
break;
}
if(type==1) //向左走
{
P2=P2&250;
delay(100);
ctrMotor_Adjust(0);
}
if(type==3) //向右走
{
P2=P2&245;
delay(100);
ctrMotor_Adjust(0);
}

P2=((P2&240)|15);
delay(50);//刹车制动 0.5ms
}
if(!(Inter_EX0==1&&StartTask==0))
{
Direction=dir;
}

}


/*====基本路线层:描述小车基本运动路线的程序集====*/

/*当小车到达仓库或停车场时,放下铁片或停车(0,1为仓库,2为停车场)*/
void rchPlace()
{unsigned int time,b,s,g;

time=(int)(cntTime_5Min*0.065535);//只有一个数码管时,轮流显示全过程秒数 个 十 百
b=time%100;
s=(time-b*100)%100;
g=(time-b*100-s*10)%10;

if(bkAim==2)
{
//到达停车场了,停车
EA=0;
P2=((P2&240)|15);
while(1)
{
Display(10); //N
delay(2000);
Display(cntIorn);
delay(2000);
Display(11);//A
delay(2000);
Display(b);
delay(2000);
Display(s);
delay(2000);
Display(g);
delay(2000);
}
}
else
{
if(Inter_EX0==1&&StartTask==1)P10=0; //到达仓库,卸下铁片
}

}


/*无任务模式: */
/*设置小车的固定运动路线,未发现铁片时的运动路线*/
void BasicRoute()
{ //Light_Flag=1;
ctrMotor_Dist(153,0);
//Light_Flag=0;
ctrMotor_Ang(ANG_90,1,1);
ctrMotor_Dist(100-sX,0);
ctrMotor_Dist(125,2);
ctrMotor_Dist(73,0);
ctrMotor_Ang(ANG_90,1,2);
//Light_Flag=1;
ctrMotor_Dist(153,0);
//Light_Flag=0;
ctrMotor_Ang(ANG_180,1,0);
rchPlace();

}


/*任务模式: */
/*设置小车的发现铁片后的运动路线*/
void TaskRoute()
{
//基本运行路线表,记载拐弯 0 向前 1 左拐 2 向后 3 右拐,正读去A区;反读去B区
StartTask=1;

ctrMotor_Ang(ANG_90_T,1,2);

if(bkAim==1) //仓库A
{
ctrMotor_Dist(10,0);
P2=((P2&240)|15);
delay(60);
ctrMotor_Ang(ANG_90_T,1,3);
ctrMotor_Dist(100-sX,2);

ctrMotor_Ang(ANG_90_T,1,2);
Light_Flag=1;
ctrMotor_Dist(153,2);
Light_Flag=0;
// ctrMotor_Ang(208,1,0);
}
else if(bkAim==0) //仓库B
{
ctrMotor_Dist(10,0);
P2=((P2&240)|15);
delay(60);
ctrMotor_Ang(ANG_90_T,1,3);
ctrMotor_Dist(100-sX,0);
ctrMotor_Ang(ANG_90_T,1,0);
Light_Flag=1;
ctrMotor_Dist(153,2);
Light_Flag=0;
//ctrMotor_Ang(208,1,0);
}

delay(5000);

rchPlace();

}


/*---------------------------------------------*/
/*-------------------主程序段------------------*/
/*---------------------------------------------*/
void main()
{
delay(4000);

P2=0xff; //初始化端口
P07=0;
P1=0;

TMOD=0x01; //初始化定时器0/1 及其中断
TL0=0;
TH0=0;
TR0=1;
ET0=1;
ET1=1;

IT0=1; //初始化外部中断
EX0=1;

IT1=1;
EX1=1;

EA=1;
P11=1;

while(1)
{
Display(cntIorn);
bkAim=2;

BasicRoute();

if(Inter_EX0==1)
{
TaskRoute();//按获得铁片后的路线运动
IE0=0;
EX0=1;
}
Inter_EX0=0;

}
}

/*----------------------------------------------------*/
/*----------------------中断程序段--------------------*/
/*----------------------------------------------------*/


/*定时器0中断程序: */
/*当时间过了5分钟,则就地停车并进入休眠状态*/
void tmOver(void) interrupt 1
{
cntTime_5Min++;
TL0=0;
TH0=0;

if(cntTime_5Min>=4520)
{
Display(5);
P2=((P2&240)|15);
EA=0; //停车程序
P07=1;
delay(4000);
PCON=0X00;
while(1);
}

}


/*外部中断0中断程序: */
/*发现铁片,发出声光信号并将铁片吸起,发光二极管和蜂鸣器*/
/*并联在一起(设接在P07). 0为A仓库,1为B仓库,2为停车场*/
void fndIorn(void) interrupt 0
{
unsigned char i;

P10=1;
P2=((P2&240)|15); //停车
P07=1;
delay(1000);//刹车制动 0.5ms
P07=0;

Inter_EX0=1;

cntIorn++;
Display(cntIorn);

for(i=0;i<40;i++)
{
P2=P2&249;
delay(2);
P2=((P2&240)|15);
delay(2);
}

P2=P2&249;
delay(100);
P2=((P2&240)|15); //停车

IornColor(); //判断铁片黑白,设置bkAim

for(i=0;i<95;i++)
{
P2=P2&249;
delay(3);
P2=((P2&240)|15);
delay(2);
}
P2=((P2&240)|15); //停车
delay(4000); //把铁片吸起来
EX0=0;

}


/*外部中断1中断程序: */
/*对霍尔开关的脉冲记数,对小车的位置进行记录,以便对小车进行定位*/
void stpMove(void) interrupt 2
{
cntTime_Plues--;

if(Direction==0) //向上
{
if(mType==0) sY+=det_Dist;
else if(mType==2)
sY-=det_Dist;
}
else if(Direction==1) //向左
{
if(mType==0) sX+=det_Dist;
else if(mType==2)
sX-=det_Dist;
}
else if(Direction==2) //向下
{
if(mType==0) sY-=det_Dist;
else if(mType==2)
sY+=det_Dist;
}
else if(Direction==3) //向右
{
if(mType==0) sX-=det_Dist;
else if(mType==2)
sX+=det_Dist;
}

#15612198148# 光电管智能车的循迹模块的原理是什么啊??? - ******
#亢荀# 地上的黑线较周围浅色背景反射率低,通过对车前方地面发射光(通常为红外线),比较接受到的光信号强弱即可知道前进方向与线的差距,从而调整路线.

#15612198148# 急求智能寻迹小车用三路的光电传感器检测黑线,c语言代码怎么写,在线等,追加悬赏!!! ******
#亢荀# 就比如说连接到P1.0(左)和P1.1(右)嘛,还要看你光电传感器怎么放,如果你一放上去,光电传感器就是对准黑线的,那么久检测两个I/O口的低电平就是了,如果P1.0为低,说明小车左偏,像右调整,反之亦然……如果一放上去,小车是没有对准黑线上的,那就检测I/O口得高电平就是这么简单……没懂追问

#15612198148# 基于51单片机的智能寻光跟踪小车的问题 ******
#亢荀# 使用光敏电阻检测光源,然后通过AD芯片采集信号,设置检测阈值,未达到就实现摆动前进后退直到检索到继续有光为止.

#15612198148# 什么是飞思卡尔智能车光电组? - ******
#亢荀# 1. “飞思卡尔”是这个组件的生产厂商的名字.飞思卡尔=free scale(自由规模)是有名的半导体公司.它由原摩托罗拉的半导体芯片部门独立出来后的公司名. 2. “智能车光电组”是用于智能车的“光电”组件(某块)

#15612198148# 电磁循迹智能小车有哪些实用价值?它能为生活带来哪些便利? - ******
#亢荀# 循环的小车有一定的轨道,通过光电传感器,电磁开关,PLC控制器,协同来完成,小车的移动,及其它的工作,这是基本原理,具体可以参考自动化控制方面的专业书籍,工控原理.

#15612198148# 光源追踪小车用什么传感器 - ******
#亢荀# 自动避障功能:超声波传感器寻迹功能:光敏传感器(光敏二极管或三极管).线性光敏传感器更好,例如http://www.ims.fraunhofer.de/uploads/media/CMOS_Imager_1x512Pixel_Fraunhofer_IMS.pdf.趋光功能:光敏传感器

#15612198148# 我想自己亲手DIY一个自动寻迹的智能小车 加上各种传感模块 大家有什么方案没 - ******
#亢荀# 这个很简单啊,一个底盘,一个单片机最小系统,电机驱动板,3个循迹模块,加上电源.基本上就OK了,可以自己加一些LED之类的东西..

#15612198148# 求智能寻迹小车设计方案 ******
#亢荀# 循迹小车,根据地面反馈的信号,而行走!主要由电机模块(步进电机或者直流电机),红外比较电路(或者可见光比较电路)两部分组成,相当简单...可能调试的时候比较麻烦!

#15612198148# TCRT5000光电管用于智能车寻迹,一共有四个管脚,分别是干什么用的,具体怎么接线,如何接到单片机上? - ******
#亢荀# 比较器用LM393吧,输出接回单片机的IO口

  • 光电巡线车电路工作原理
  • 答:原理:巡线小车寻迹电路采用红外光电传感器进行检测并且寻迹运动,主要利用红外传感器发出的红外线的反射原理。

  • tcrt5000红外光电传感器的工作原理是什么,怎样用它来循迹和避障?_百度...
  • 答:大气衰减 待测目标的红外辐射通过地球大气层时,由于气体分子和各种气体以及各种溶胶粒的散射和吸收,将使得红外源发出的红外辐射发生衰减。光学接收器 它接收目标的部分红外辐射并传输给红外传感器。相当于雷达天线,常用是物镜。

  • 什么是飞思卡尔智能车光电组?
  • 答:通过采集道路少数离散点反射亮度进行路径检测的车模属于光电组。通过感应由道路中心电线产生的交变磁场进行路径检测的车模属于电磁组 通过采集道路图像(一维、二维)或者连续扫描赛道反射点的方式进行路径检测的车模属于摄像头组 ...

  • 红外对管测智能小车速度和霍尔器件测量速度 。两种方法的优点缺点
  • 答:定时器输出比较完美的方波,通过单片机编写测速程序,与实际值相符,并用数码管显示。其中红外反射式光电传感器RPR220的性能比较高也对外围电路设计带来了简化。红外对管的缺点:系统整体性能能满足一般小电机的测速,适合于玩具车...

  • 如果做循迹的话,tcrt5000 和st188 这两种光电传感器哪种比较好呢?谁...
  • 答:两个应该都可以,都是红外反射式开关。TCRT5000,检测距离是1mm~8mm ST188,检测距离是4mm~13mm 两种我都在智能小车的一些报告中见过。不过ST系列的见得多。

  • 由光电传感器感应的单片机控制电动机系统
  • 答:因此我们选择此电路作为我们的传感器检测与调理电路。 2、寻迹光电对管的安装 考虑到设计要求,本次设计仅用4对光电传感器就能完成设计要求,采用直线型排列,中间2对传感器用来校正小车的寻迹路线,保证小车运行的直线性。两侧的传感器用来检测...

  • 哪些传感器可以实现自动导航
  • 答:另外,设计并制作了语音控制小车系统。该设计以凌阳单片机SPCE061A为核心控制部件,减速直流电机LS17RU419i,电机驱动芯片L298N,红外线光电传感器TCRT5000,反射式红外传感器ST178等为主要元件,智能控制技术为理论基础,论证了该...

  • tcrt5000红外光电传感器的工作原理是什么,怎样用它来循迹和避障?_百度...
  • 答:红外线光电传感器(光电开关),是利用物体对近红外线光束的反射原理,由同步回路感应反射回来的光,据其强弱来检测物体的存在与否,光电传感器首先发出红外线光束到达或透过目标物体,物体或镜面对红外线光束进行反射,光电传感器...

  • 如何用光电传感器测小车的速度
  • 答:在小车经过的地方两侧架设光电传感器。小车经过的时候,光就不能传过去。此时就开始计时。小车过去之后,又能射过去了。就知道了时间差。在量出小车的长度,就可以算出小车的速度。

  • 一路寻迹传感器,,,求大神分析一下这个电路的工作原理
  • 答:TCRT5000是个红外反射式光电传感器,其结构就是先将红外光向外射出,然后光敏三极管等着接收返回的光线,显然只有遇到物体才会产生反射光,经光敏三极管的电流放大,从R2输出。反射光越强,流经R2的电流就越大,集电极的电压就...

    为传递更多家电数码信息,若有事情请联系
    数码大全网