本文硬件采用51单片机作为控制器,HC-SR04超声波模块测量距离,LCD1602显示所测量的距离。
1.超声波模块HC-SR04简介
1.1-超声波测距
超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。
1.2-HC-SR04
HC-SR04超声波测距模块可提供2cm到400cm的非接触式距离感测功能。HC-SR04模块共有四个引脚,分别是VCC(+5V电源)、Trig(触发引脚)、Echo(接收引脚)、GND(地线),如下图所示:
2.工作原理
2.1-原理简介
在初始化之后,Trig引脚电平由单片机拉高,Echo引脚电平由传感器拉低。工作的时候,首先由单片机将Trig引脚拉低后再给一个高电平脉冲(持续时间至少为10us),传感器收到该脉冲信号后开始向外发射8个40KHz的方波。该测距超声波以声速(340m/s)向前传播,在遇到障碍物时,该超声波被反弹而向回传播,最终能够被传感器模块接收到,传感器会记录从发射超声波到接收到超声波的所经历的时间 t 。传感器在收到返回的信号后,由Echo引脚输出一个与 t 相同时间的高电平脉冲。此时,我们只需要通过单片机内部定时/计数器记录Echo引脚高电平脉冲时间即可得超声波的传播时间 t 。因此可算出传感器到障碍物间的距离s=340*(t/2) (因为t是超声波一来一回经历的时间,所以单程时间要除以2)。
2.2-程序实现
float Count(void)
{
u16 time;
float s;
time=TH0*256+TL0;
TH0=0;
TL0=0;
//s=time*0.1715;
s=(time/58.0/100)*1000;//距离单位转换成 mm
return s;
}
void LCD1602_DisDistance(void)
{
u16 s;
s=(u16)Count();
if(s<200||s>4000||flag==1)
{
flag=0;
LCD1602_DisString(0,9," error ");
}
else
{
LCD1602_DisData(0,10,s);
LCD1602_DisString(0,14,"mm");
}
}