- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于51单片机的HC-SR04超声波测距系统制作
基于51单片机带温度补偿的HC-SR04超声波测距系统
利用从网上购买的HC-SR04超声波模块制作了一个测距装置,HC-SR04自身不带温度补偿功能,所以加上一个使用DS18B20做的温度测量模块。整个系统包括:51单片机最小系统,超声波测距模块、温度测量模块、液晶显示模块。使用了如下主要元器件:
元件 说明 数量 STC90C516RC 51单片机 1 HC-SR04 超声波测距模块 1 DS18B20 温度测量模块 1 lcd1602 液晶显示模块 1
系统电路图
51单片机最小系统
单片机型号:STC90C516,晶振:12Mhz。自己动手焊接的最小系统板。
LCD1602A液晶显示模块:
HC-SR04超声波测距模块
HC-SR04超声波测距模块可提供2cm至400cm的非接触式距离感测功能,测距精度可达3mm;模块自身包括超声波发射器、接收器与控制电路。
实物正反两面图
HC-SR04电气参数:
HC-SR04工作原理及说明:
给Trig触发控制信号IO端口至少10us的高电平信号;
模块自动发送8个40khz的方波,并自动检测是否有信号返回;
有信号返回时,Echo回响信号输出端口输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间;
两次测距时间间隔最少在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 reg51.h
#include intrins.h
#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 xd
文档评论(0)