HC-SR04超声波测距模块
1.模块简介
????????该模块就是HC-SR04超声波测距模块,用于对精度和量程要求不高的距离测量应用,如小车,智能垃圾桶等等。本文章将结合代码讲解如何使用51单片机来驱动该模块。
2.超声波原理讲解
????????学过初中物理的同学应该知道,超声波测距的原理是这样的,先对着要测量的墙壁发射超声波同时按下秒表开始计时。超声波传播到墙壁时会发生反射,等到反射的超声波回到的同时按下秒表结束计时。得到的总时间T就是超声波的总传播时间,也就是超声波传播两倍距离所花的时间。又因为距离s,时间t和声速v有这样的关系s = v * t.其中t = T/2,v为340m/s,可以求出距离s = 170*T。
3.模块使用方法
????????SR04模块要使用到两个I/O口,分别是trig和echo。步骤是先给trig发送一个10微秒以上的高电平,然后等待echo变为高电平,echo变为高电平后会持续一段时间然后变为低电平,单片机要记录下这段高电平时间,它就是超声波的传播时间T。
4.代码实现
????????本代码配套使用的是STC89C52RC和11.0592MHz的晶振,采用一个定时器来计时。
#include<reg52.h>
?
sbit Trig = P2^1;
sbit Echo = P2^2;
sbit LED = P1^4; ? ? //根据距离来亮灭
float result;
unsigned int count;
?
void main(){
TMOD &= 0x0F;
TMOD |= 0x10; ? ? //设定时器T1为16为定时器模式
Trig = 0;
while(1){
TH1 = 0x00;
TL1 = 0x00;
Trig = 1; ? ? ? ? //发送高电平
TR1 = 1; ? ? ? ? ?//启动定时器
while(TL1 <= 0x0c); ? //持续10微妙
Trig = 0; ? ? ? ? ? ?
? ?TR1 = 0; ? ? ? ? ? ? ?//停止定时器
TL1 = 0x00;
Echo = 1;
while(Echo == 0);
TR1 = 1;
while(Echo == 1);
TR1 = 0;
count = TH1*256 + TL1;
result = count*1.085*0.000001*17000;
if(result > 20) ? ? ?//距离大于20厘米
LED = 1; ? ? ? ? //点亮led
else ? ? ? ? ? ? ? ? //否则
LED = 0; ? ? ? ? //熄灭led
}
}
|