基于51单片机的HC-SR04超声波测距系统制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机带温度补偿的HC-SR04超声波测距系统利用从网上购买的HC-SR04超声波模块制作了一个测距装置,HC-SR04自身不带温度补偿功能,所以加上一个使用DS18B20做的温度测量模块。整个系统包括:51单片机最小系统,超声波测距模块、温度测量模块、液晶显示模块。使用了如下主要元器件:
元件说明数量
STC90C516RC51单片机1
HC-SR04超声波测距模块1
DS18B20温度测量模块1
lcd1602液晶显示模块1
系统电路图
51单片机最小系统
单片机型号:STC90C516,晶振:12Mhz。自己动手焊接的最小系统板。
LCD1602A液晶显示模块:
HC-SR04超声波测距模块
HC-SR04超声波测距模块可提供2cm至400cm的非接触式距离感测功能,测距精度可达3mm;模块自身包括超声波发射器、接收器与控制电路。
实物正反两面图
HC-SR04电气参数:
HC-SR04工作原理及说明:
1、给Trig触发控制信号IO端口至少10us的高电平信号;
2、模块自动发送8个40khz的方波,并自动检测是否有信号返回;
3、有信号返回时,Echo回响信号输出端口输出一个高电平,高电平持续的时间就是超声波从发射到
返回的时间;
4、两次测距时间间隔最少在60ms以上,以防止发射信号对回响信号的影响;
超声波时序图
单片机控制HC-SR04超声波测距说明:
原理图中,单片机的P1.7口接HC-SR04的Trig端口,P1.6口接HC-SR04的Echo端口,超声波在传播时碰到障碍物即返回,HC-SR04模块收到回波信号后Echo口输出一个高电平,单片机检测到高电平后即启动计数器开始计数,直到单片机检测到Echo口变成低电平后结束计数,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即距离S=v*t/2;
由于在室温下,声速受温度的影响,其变化关系为:V=334.1+T*0.61(T为当前温度),利用DS18B20温度传感器可以得到环境温度,补偿温度对声速的影响。当温度高于26度或低于14度时,上述公式不能完全满足对测量的修正了,所以高于26度时取26度,低于14度时取14度。
距离计算公式为:S=(334.1+T*0.61)*N*T0/2
T:当前环境温度值
N:计数值
T0:单片机计数周期=晶振频率/12(微秒)
HC-SR04测量存在不稳定性,所在对同一距离进行多次测量,并对测量结果排序,去除最大和最小值,将余下的求平均值。
程序流程图:
程序代码:
/*
* 程序:基于HC-SR04的超声波测距系统
* 单片机型号:STC90C516 12MHz
* 说明:按下K1键后,指示灯点亮,开始连续进行7次超声波测距,每次测距间隔80ms,
* 完成后对7次结果排序并将最大的2个数值和最小的2个数值去除,对剩余的
* 3个数值取平均值。完成后指示灯灭,输出结果到LCD1602上。测量超出范围则发出报警声。
* 使用两个IO端口控制HC-SR04触发信号输入和回响信号输出,
* 以及一个T0定时器用于时间计数。
* 使用DS18B20测量环境温度,声速公式:V=334.1m/s+Temperature*0.61,
* 单片机晶振为12Mhz(11.953M),计数时为T=1us
* 计算公式:S=(334.1m/s+Temperature*0.61)*N*T/2,N为计数值=TH0*256+TL0 */
/*包含头文件*/
#include
#include
#define Delay4us(){_nop_();_nop_();_nop_();_nop_();}
/*宏定义*/
#define uchar unsigned char //无符号8位
#define uint unsigned int //无符号16位
#define ulong unsigned long //无符号32位
/*全局变量定义*/
sbit K1=P1^0; //按下K1后,开始测距
sbit LEDRed=P1^1; //测距指示灯,亮表示正在测距,灭表示测距完成sbit BEEP=P1^5; //报警测量超出范围
sbit Trig=P1^7; //HC-SR04触发信号输入
sbit Echo=P1^6; //HC-SR04回响信号输出
float xdata DistanceValue=0.0; //测量的距离值
float xdata SPEEDSOUND; //声速
float xdata XTALTIME; //单片机计数周期
uchar xdata stringBuf[6]; //数值转字符串缓冲
//LCD1602提示信息
uchar code Prompts[][16]=
{
{"Measure Distance"}, //测量距离
{"- Out of Range -"}, //超出测量范围
{"MAX range 400cm "}, //测距最大值400cm
{"MIN range 2cm "}, //测距最小值2cm
{" "}, //清屏
{" Press K1 Start "} //按键开始测量
};
uchar xdata DistanceText[]="Range: ";//测量结果字符串