小车正前方A目标物B
有几何关系可知:
CABACL??sin?sin?sin(?????)sin?得: AB?Lsin(???)sin? AC?L sin(???) OA2?OC2?AC2?2?OC?ACcos?OC2?OA2?AC2 ?=arccos2?OC?OA由此求得OA及?角
时刻控制小车转过???2即可让目标物时刻在小车正前方,并且让OA保持
在10m以内。
B、实现难点
由于AB杆在追踪装置上,所以不可能设计的太长,最多能设成0.4m,但是追踪器到目标物距离OA为10m左右,这会使得?与?的差值很小,从而测的OA的长度及?误差较大。
还有就是一直没找到测?与?的装置,所以导致这种方案无法执行。 (2)、隔板信号检测法
A、方案原理
如图,目标物在A点发射球面电磁波,在追踪装置上有B、C、D三个信号接收器,用三块金属板隔离开来。不管追踪小车在何方位,最多只有两个接收器能接收到信号,而当目标物在小车正前方时,只有接收器B能接受到信号,其他两个接收器应信号被隔板屏蔽而接收不到。当只有B接收到信号时,控制小车前进,其他时刻控制小车转向,即使时刻到小车沿目标物方向前进,从而达到追踪目的。
图(a)
小车正方向B120° 120° 120° DC
图(b)
B、实现难点
由于电磁波具有衍射性,隔板可能无法完全屏蔽电磁波信号,所以在任意时刻,三个接收器都会接收到信号,导致该方案无法执行。 (3)、雷达定位追踪
把雷达装到小车顶端,由雷达发射电磁波对目标进行照射并接收其回波,从而获得目标至电磁波发射点的距离、距离变化率(径向速度)、方位、高度等信息,小车分析后移向目标的方位。并且雷达白天黑夜均能探测远距离的目标,且不受雾、云和雨的阻挡,具有全天候、全天时的特点,并有一定的穿透能力。困难是雷达一般体积较大,市场上没有用于定位追踪的雷达产品,只有测量车速和GPRS定位的。
由于以上几种方案都最终未能实现追踪功能,所以我们做出来的实体只能避障,而无法追踪目标。
四、系统电路
实体的系统电路连接如下图所示
五、实体展示
六、小车运行过程
打开开关超声笔测量障碍物距离s判断s>30厘米No左电机反转,小车向左转向Yes小车继续前进
七、经费使用情况
八、程序代码
#include
#include
#define uint unsigned int #define uchar unsigned char #define ufloat unsigned float #define s0 30
sbit Rin=P1^0; // 控制超声波的发射 sbit Rout=P1^1; // 接受超声波 float s;//前方障碍到小车距离
uint time;//超声波由发送到接收的时间 void init();//变量初始化函数
void delay(uint z);//0.5毫秒延时函数 void delayus(uchar us); //微秒级延时函数,延时时间t=(11+6*us)微秒 void sendpulse();//给P1^0口发送一个11微秒脉冲 void readtime();//读取计时器时间 void distance();//计算距离
void judgedirection();//判断是否转向 void main() { init(); // 初始化 while(1) { readtime(); //发送超声波并完成计时 distance(); judgedirection();//判断是否转向(默认右转) delay(50);//延时25ms } }
void init() { Rin=0; Rout=0; P2=0xf5;//11110101,控制左右电机都正转,P2.0、P2.1控制左轮,P2.2、P2.3控制右轮 TMOD=0x01;//设置定时器0为工作方式1 TH0=0; TL0=0; //定时器初始化,一次50ms }
void delayus(uchar us) { while(us--); }
void delay(uint z) { uchar j; uint i; for(i=z;i>0;i--) { for(j=120;j>0;j--); } }
void sendpulse() { Rout=1; delayus(0); Rout=0; }
void distance() { time=TH0*256+TL0;//获取计时时间,单位:微秒 TH0=0; TL0=0; s=(time*1.7)/100;//计算距离,单位:cm }
void readtime() { sendpulse(); //发送一个10微秒的信号 delayus(0);//延时10微秒,防止信号直接发送到接受端 while(!Rin); //Rin为0时等待 TR0=1; //Rin为1时开定时器0 while(Rin); //等待直到Rin为0 TR0=0; //关闭定时器0,停止计时 }
void judgedirection() { if(s 九、感想: 通过做这次电工小项目,我知道了做项目的流程,对单片机有了更深的了解,并熟悉了开发环境Keil uvision3和烧程序的软件STC,能编辑出一般难度的程序了,在一定程度上,复习了C语言。更重要的是,学会了有条理的表达自己的想法和进行有效的沟通,潜移默化中培养了团队合作精神,这一切,会使我终身受益的。还有,在制作小车的过程中,我们三个合作的很轻松快乐,真心享受他们的陪伴。 值得一提的是,运用所学的单片机,我还编程了一个功能很全面的智能抢答器,出色完成了电工自主创新实验。不得不感慨,真是艺不压身啊!最后说一句,没能实现小车的追踪功能,我颇感遗憾。