STM32进阶之HC-SR04超声波测距

前言
本实验旨在学习和理解HC-SR04超声波测距模块的工作原理,并利用stm32F103单片机完成一个超声波测距方案。HC-SR04超声波测距模块是一种常用的距离测量传感器,通过发送超声波脉冲并接收其回波来测量物体与传感器之间的距离。

超声波测距原理
利用HC-SR04超声波测距模块可以实现比较精确的直线测距,其测距原理图如下:在这里插入图片描述

HC-SR04的一端发出超声波,接触到反射物后反射,被另一个端口接收到,所以只要知道发射和接收的时间差,就可以根据声波传播的速率算出HC-SR04和反射物直接的距离。
所以实现超声波测距就需要俩个条件:

发射和接收的时间差
超声波传输的速率
HC-SR04工作原理

HC-SR04模块的实物图如示:
参数 描述
工作电压 DC 5V
工作电流 小于15mA
工作频率 40kHz
探测距离范围 2cm - 400cm
探测角度 15度
脉冲宽度 10微秒以上
输出信号 TTL电平信号,与目标距离成反比
模块尺寸 45mm × 20mm × 15mm

HC-SR04模块的实物图如示:

在这里插入图片描述

有四个引脚:

Vcc:+5V电源供电
Trig:输入触发信号(可以触发测距)
Echo:传出信号回响(可以传回时间差)
Gnd:接地
用Trig和Echo引脚实现测距的流程:
1.通过Trig输出一段至少10us的高电平(脉冲),触发一次测距,超声波在传输的过程中Echo一直输出高电平。
2.在Trig脉冲输出后,立即检测Echo引脚的电平,测出Echo高电平持续的时间t,t就是超声波在所测距离一个来回所需时间。
测距时序图如示:
在这里插入图片描述

OLED屏幕
OLED(Organic Light Emitting Diode,有机发光二极管)是一种能够自发光的显示技术,广泛应用于单片机开发中的显示模块。它具有高对比度、快速响应、低功耗等优点,适用于小尺寸显示和低功耗应用。
同时,可以将程序中的某些重要参数直接输出到OLED屏幕当中,这样就无需使用串口助手,方便了程序的调试

工作原理
OLED显示屏由许多微小的有机发光二极管组成,每个像素点都可以自发光。当施加电压时,有机材料中的电子和空穴结合,产生光,从而形成图像。OLED不需要背光源,因此可以实现更薄、更轻、更柔性的显示器。

实验示例
在这里插入图片描述

使用标准库

HC-SR04模块代码
HC.c#include “HC.h”

#include “Delay.h”
#include “stm32f10x.h”
#include “sys.h”

#define HCSR04_PORT GPIOB
#define HCSR04_CLK RCC_APB2Periph_GPIOB
#define HCSR04_TRIG GPIO_Pin_11
#define HCSR04_ECHO GPIO_Pin_10

u16 msHcCount = 0;

void HC_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(HCSR04_CLK, ENABLE);

GPIO_InitStructure.GPIO_Pin =HCSR04_TRIG;      
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);
GPIO_ResetBits(HCSR04_PORT,HCSR04_TRIG);

GPIO_InitStructure.GPIO_Pin = HCSR04_ECHO;     
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(HCSR04_PORT, &GPIO_InitStructure);  
GPIO_ResetBits(HCSR04_PORT,HCSR04_ECHO);    


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);   

TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = (1000-1); 
TIM_TimeBaseStructure.TIM_Prescaler =(72-1); 
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
TIM_T
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值