超声波模块
型号:HC-SR04
产品介绍:
超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离
手上的是老版本
应用注意事项:
1:此模块不宜带电连接,如果要带电连接,则先让模块的 GND 端先连接。否则会影响模块工作。
2:测距时,被测物体的面积不少于 0.5 平方米且要尽量平整。否则会影响测试结果。
接口定义:
VCC:5V电源
GND:接地
Trig:控制端
Echo:接收端
工作原理:
1、采用IO触发测距,给至少10us的高电平信号,实际40-50uS效果好 2、模块自动发送8个40KHz的方波 3、有信号返回,通过lO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间 4、测试距离=(高电平时间*声速(340M/S))/2
本产品使用方法:控制口发一个 10US 以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,就可以达到你移动测量的值了。
接线参考:
模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板的P1.5和 P1.6端口
代码时序:
- 怎么让它发送波 Trig :给Trig端口至少10us的高电平
- 怎么知道它开始发了:Echo信号由低电平跳转到高电平,表示开始发送波
- 怎么知道接收了返回波:Echo由高电平跳转回低电平,表示波回来了
- 怎么算时间: Echo引脚维持高电平的时间!波发出去的那一下,开始启动定时器波回来的那一下,我们开始停止定时器,计算出中间经过多少时间
- 怎么算距离:距离 = 速度 (340m/s)* 时间/2,时间单位是us
#include <REGX52.H>
#include "Timer0.h"
sbit LED1 = P3^7;
sbit LED2 = P3^6;
sbit Trig = P1^5;
sbit Echo = P1^6;
void Delay10us()
{
unsigned char i;
i = 2;
while (--i);
}
void Trig_Start()
{
Trig = 0;
Trig = 1;
Delay10us();
Trig = 0;
}
void main()
{
double time;
double distance;
Timer0Init();
while(1)
{
Trig_Start();
Echo = 0;
while(Echo == 0);
TR0 = 1;
while(Echo == 1);
TR0 = 0;
time = (TH0*256+TL0)*1.085;
distance = time*0.017;
if(distance < 20)
{
LED1 = 0;
LED2 = 1;
}
else
{
LED1 = 1;
LED2 = 0;
}
TH0 = 0;
TL0 = 0;
}
}
注意:
11.0592MHz的晶振频率的机器周期是1.085us,计算方法:12 * 1/110592Hz = 1.085us
12MHz的晶振频率的机器周期是1us
|