1 简介
Hi,大家好,今天向大家介绍一个学长做的单片机项目
基于单片机的红外测距系统设计与实现
大家可用于 课程设计 或 毕业设计
2 主要器件
3 实现效果
测量传感器到桌面的距离,效果如下:
测量传感器到书本的距离,可以看到计算精度还是很高的:
4 设计原理
4.1 红外测距原理
红外测距传感器利用红外信号遇到障碍物距离的不同反射的强度也不同的原理,进行障碍物远近的检测。红外测距传感器具有
一对红外信号发射与接收二极管,发射管发射特定频率的红外信号,接收管接收这种频率的红外信号,当红外的检测方向遇到
障碍物时,红外信号反射回来被接收管接收,经过处理之后,通过数字传感器接口返回到机器人主机,机器人即可利用红外的
返回信号来识别周围环境的变化。
4.2 红外测距常用算法
-
①时间差法测距原理
-
②反射能量法测距原理
-
③相位法测距原理
-
④三角法测距原理
4.3 三角法测距原理
最常用的测距算法为,三角法测距,原理如下:
红外发射器按照一定的角度发射红外光束,当遇到物体以后,光束会反射回来,如图1所示。反射回来的红外光线被CCD检测器检测到以后,会获得一个偏移值L,利用三角关系,在知道了发射角度a,偏移距L,中心矩X,以及滤镜的焦距f以后,传感器到物体的距离D就可以通过几何关系计算出来了
4.4 红外测距传感器特点
1)远距离测量,在无反光板和反射率低的情况下能测量较远的距离;
2)有同步输入端,可多个传感器同步测量;
3) 测量范围广,响应时间短;
5 部分实现代码
核心计算代码:
#include"reg52.h"
#include<intrins.h>
#include "lcd1602.h"
long int read=0;
uchar bai,shi,ge;
uchar table[] ="0123456789";
uchar table1[] ="Infrared Measure";
uchar table2[] ="Distance:";
void delay(uint a) // a 个1us延时
{
for(;a > 0;a --)
_nop_();_nop_();
}
void T0_time() interrupt 1
{
cs = 0;
RD = 0;
read = P1;
INT0 = 1;
}
uint adc0804()
{
TMOD=0X01;
TH0=(65536-45872)/256;
TL0=(65536-45872)/256;
EA=1;
ET0=1;
TR0=1;
INT0 = 1;
cs = 0;
WR = 0;
delay(255);
cs = 1;
WR = 1;
delay(200);
read = read * 196 /100;
return read;
}
void math(uint x)
{
bai = x / 100;
shi = x /10 % 10;
ge = x % 10;
}
void main()
{
cs=0;
init();
while(1)
{
write_com(0x80);
print_data(table1);
write_com(0x80+0x40);
print_data(table2);
math(adc0804());
write_com(0x80+0x40+12);
write_data(table[bai]);
write_data(table[shi]);
write_data(table[ge]);
write_data('M');
delayms(500);
}
}