超声波模块测距

 

 

一、超声波是什么?

超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,
计算出模块到前方障碍物的距离

二、如何测距

1、怎么让它发送脉冲波?

Trig ,给Trig端口至少10us的高电平

2、怎么知道脉冲波已发送?

Echo信号,由低电平跳转到高电平,表示开始发送波

3、怎么知道接收了返回波?

Echo,由高电平跳转回低电平,表示波回来了

4、怎么算时间?

Echo引脚维持高电平的时间!
波发出去的那一下,开始启动定时器

定时器设置为模式1,使用TH0和TL0这两个移位寄存器来计数,此模式下定时器配置为16位定时器/计数器,由TH0的8位和TL0的8位构成,TH0记录高8位,TL0记录低8位,TL0溢出则向TH0进位,TH0溢出则令TCON中的溢出标志位TF0置1。


波回来的拿一下,我们开始停止定时器,计算出中间经过多少时间

Time = (TH0*256+TL0)*1.085

单位us,计算出TH0和TL0寄存器中保存的计次数,每1个计次为1.085us

5、怎么算距离?

距离 = 速度 (340m/s)* 时间/2                速度单位换算340m/s=34000cm/s=0.034cm/us

 

代码如下:

#include <reg52.h>

//距离小于10cmD5亮,D6灭,大于10cm反之
sbit D5=P3^7;
sbit D6=P3^6;

sbit Trig =P1^5;
sbit Echo =P1^6;

void Delay10us()		//@11.0592MHz
{
	unsigned char i;

	i = 2;
	while (--i);
}

void Timeinit()
{
	TMOD &= 0xF0;
	TMOD |= 0x01;
	TL0 = 0x00; 	//让TL,TH寄存器从0开始计次
	TH0 = 0x00;
}
void startHC()
{
	Trig=0;
	Trig=1;
	Delay10us();
	Trig=0;
}

void main()
{
	double Time,dis; //时间、距离
	Timeinit();
	while(1)
	{
		//1.Trig,给Trig至少10us的高电平	
		startHC();
		
		//2.echo由低电转到高电平,表示发波
		while(Echo == 0);   //Echo还是低电平的话,就一直卡在这
		//变成高电平后,开始启动定时器
		TR0=1;
		//3.由高电平跳转成低电平,则表示波返回了
		while(Echo == 1);
		TR0 = 0;		//停止计时
		
		//4.计算出中间经过多长时间
        //单位us,计算出TH0和TL0寄存器中保存的计次数,每1个计次为1.085us
		Time = (TH0*256+TL0)*1.085; 
		
		//5.计算距离,距离= 速度(340m/s)*时间/2, 340m/s=34000cm/s=0.034cm/us
		dis = 0.017 *Time;
		
		if(dis<10)
		{
			D5=0;
			D6=1;
		}
		else
		{
			D5=1;
			D6=0;
		}
		//定时器数据清零,以便下一次测距
		TL0 = 0x00; 	//让TL,TH寄存器从0开始计次
		TH0 = 0x00;
	}
	
}

 

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值