超声波测距
摘要: 超声波测距是一项非常重要和实用的技术,可以广泛应用于不同的领域和行业,例如安防监控,工业控制等。该技术可以通过发射超声波,然后测量超声波的回弹时间来确定距离。因此,设计一套超声波测距系统并将结果显示在OLED屏幕上具有重要的现实意义。
本人结合实际情况,采用了STC8H8K64U单片机,它有足够的IO口来控制超声波模块和连接OLED屏幕。使用软件Keil C51进行开发。对于超声波模块的选择,我选用了HC-SR04模块,它能够提供稳定的回波和精确的距离测量。同时,我还使用了一块0.96寸OLED显示屏,将测量结果清晰地显示在屏幕上。
在设计过程中,我遇到了一些挑战,例如超声波模块与屏幕的数据传输和显示,单片机程序的编写等。但最终,我成功完成了我的课程设计,并且测试结果符合预期目标,精确地测量了距离并将结果成功地显示在屏幕上。
总之,课程设计让我深入了解了超声波测距技术和单片机编程的实践经验。我认为我的设计可以满足基本的测距需求,并且可以在实际应用中进一步改进。除此之外,我还感受到了独立思考和解决问题的能力培养。
关键词:超声波测距; I2C通信; 数字系统;课程设计
1 设计任务
1.1 设计目的
本次课程设计的目的是设计一套超声波测距系统,并将结果显示在OLED屏幕上。
1.2 设计内容
完成本次课程设计可以分为以下几个步骤:
(1) 硬件设计:首先需要选取合适的单片机器和超声波模块,搭建电路,并进行线路布局。
- 超声波模块与单片机连接:将超声波模块的 Trig 和 Echo 引脚分别连接到单片机的 GPIO 口,其中,Trigger 为输出口,通过单片机控制其高低电平来启动超声波发射;Echo 为输入口,用于接收超声波的回波信号,回波信号经过处理后被单片机采集。
- OLED屏幕与单片机连接:将OLED屏幕的 SCL 和 SDA 引脚连接到单片机的 I2C 接口口上,通过I2C总线来和单片机进行通信,将测量结果传输到OLED屏幕上,并进行显示。
- 电源电路:使用稳压电源模块将输入电压稳定在3.3V左右,确保单片机、超声波模块和OLED屏幕等电路正常工作。需要注意的是,稳压电源模块的输入电压范围和输出电压范围需要根据电路中使用到的元器件的电压要求进行选择,不能超过其极限工作范围。
(2) 超声波测距代码编写:编写单片机代码,使用定时器作为计数器,通过超声波模块进行测距,将测量结果保存到内存中。
2设计电路图
数字系统原理图:
超声波模块选用HC-SR04,TRIG引脚连接P0.0 IO口、ECHO引脚连接P0.1 IO口;接3.3v直流电源;
显示模块选用0.96寸OLED屏幕,I2C通信;SDA引脚连接P0.6 IO 口、SCL引脚连接P0.7IO口;接3.3v直流电源;
使用STC8H8K64U单片机,接5v电源。
(2)供电电路原理图
实物图:
3原理及代码
HC-SR04 超声波测距模块可提供 2cm-400cm的非接触式距离感测功能,测距精度可达高达3mm;模块包括超声波发射器、接收器与控制电路。
基本工作原理:
(1)采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;
让它发送波:给Trig端口至少10us的高电平
开始发送波:Echo信号由低电平跳转到高电平
接收返回波:Echo信号由高电平跳转回低电平
计算时间 :Echo引脚维持高电平的时间
开始发送波,启动定时器,接收到返回波,停止计时器
计算距离 :测试距离=(高电平时间*声速(340m/s))/2
单片机主要代码:
#include <STC8H.H>
#include <I2C.H>
#include <INTRINS.H>
#include <OLED.H>
#include <stdio.h>
#include <string.h>
#include "chaoshengboceju.h"
void main()
{
double time=0;
double dis=0;
char str[50];
P0M0 = 0xc1; P0M1 = 0x02;
OLED_Init();
EA = 1; // 允许总中断
Time0Init();
while(1)
{
Delay1000ms();
startHC();//1. 让它发送波:给Trig端口至少10us的高电平
while(Echo == 0);
TR0 = 1;
while(Echo == 1);
TR0 = 0;
// 计算时间
time = (TF0*65792+TH0 * 256 + TL0)*0.09042245;//us为单位
dis = time * 0.017;// 距离 = 速度 (340m/s)* 时间/2
memset(str,0,sizeof(str));
sprintf(str, "%.4f", dis);
strcat(str,"cm");
OLED_Clear();
OLED_ShowString(2,2,str,16);
TH0 = 0;
TL0 = 0;
TF0 = 0;
}
}
4实物测试
- 近距测试(2-20cm):
- 远距离测试(1-2m)
5设计小结
在超声波测距系统中,超声波信号作为研究对象,是一种承载信息的信号。通过设计一套超声波测距系统,可以更深入地了解信号的特性和行为,同时提高数据分析和信号处理的能力。在设计本次课程中,需要使用单片机进行超声波信号的信号处理。在《数字系统设计》中,数字信号处理是一个重要的概念,它包括数字信号的采样、滤波、编码和解码等。通过本次设计,进一步学习和掌握了数字信号处理的相关知识,提高信号处理的技能。控制系统是数字系统设计的重要组成部分,也是本次课程设计的一个关键点。我们需要使用单片机进行超声波测距系统的控制,从而实现测距的目的。通过本次设计,我们可以更加深入地理解控制系统的基本原理和常用算法,进一步提高系统控制的能力。
参考文献
- STC8H系列单片机技术参考手册202211
- 【51单片机STC89C52】HC-SR04超声波模块测距
--https://blog.csdn.net/Zy_1213/article/details/125189395