当前位置: 首页 > news >正文

GD32F407单片机开发入门(二十五)HC-SR04超声波模块测距实战含源码

文章目录

    • 一.概要
    • 二.HC-SR04主要参数
      • 1.模块引脚定义
      • 2.模块电气参数
      • 3.模块通讯时序
      • 4.模块原理图
    • 三.GD32单片机超声波模块测距实验
    • 四.工程源代码下载
    • 五.小结

一.概要

HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。
两个压电陶瓷超声波传感器,一个用于发出超声波信号,一个用于接收反射回来的超声波信号。由于发出信号和接收信号都比较微弱,所以需要通过外围信号放大器提高发出信号的功率,和将反射回来信号进行放大,以能更稳定地将信号传输给单片机。
模块如图所示:

在这里插入图片描述

二.HC-SR04主要参数

1.模块引脚定义

在这里插入图片描述

2.模块电气参数

在这里插入图片描述

3.模块通讯时序

在这里插入图片描述

以上时序图表明单片机只需要提供一个10uS以上脉冲触发信号给模块的TRIG引脚,该模块内部将发出8个40kHz周期电平并检测回波。模块一旦检测到有回波信号则输出回响信号到模块ECHO引脚。回响信号的脉冲宽度与所测的距离成正比。单片机通过采集收到的输出回响信号的宽度时间就可以计算得到距离。
距离公式:距离=回响高电平时间*声速(340M/S)/2

4.模块原理图

在这里插入图片描述

三.GD32单片机超声波模块测距实验

硬件准备:

STLINK接GD32F407VET6开发板,STLINK接电脑USB口,OLED接板子。
在这里插入图片描述

主要代码

#include "gd32f4xx.h"
#include "gd32f4xx_libopt.h"
#include "systick.h"
#include "oled.h"
uint32_t HalTime1,HalTime2;
//等待时间,us级别
void Delay_us(unsigned long i)
{unsigned long j;for(;i>0;i--){for(j=32;j>0;j--);}
}
uint32_t Distance_Calculate(uint32_t count)//传入时间单位100us
{uint32_t Distance = 0;Distance = (uint32_t)(((float)count *17)/10);//距离单位cm,声速340M/S,时间*速度/2=距离return Distance;
}uint32_t Distance;
uint32_t TimeCounter;
//定时器配置
void timer_config(void)
{/* -----------------------------------------------------------------------系统主频168MHZ,timer_initpara.prescaler为167,timer_initpara.period为99,周期为0.1ms----------------------------------------------------------------------- */timer_parameter_struct timer_initpara;rcu_periph_clock_enable(RCU_TIMER1);rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);//AP1总线最高42MHZ,所以TIME1到168M需要4倍频timer_deinit(TIMER1);/* TIMER1 configuration */timer_initpara.prescaler         = 167;timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;timer_initpara.counterdirection  = TIMER_COUNTER_UP;timer_initpara.period            = 99;timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;timer_initpara.repetitioncounter = 0;timer_init(TIMER1,&timer_initpara);nvic_priority_group_set(NVIC_PRIGROUP_PRE1_SUB3);nvic_irq_enable(TIMER1_IRQn, 0, 1);timer_interrupt_enable(TIMER1, TIMER_INT_UP);/* auto-reload preload enable */timer_auto_reload_shadow_enable(TIMER1);/* auto-reload preload enable */timer_enable(TIMER1);
}
int main(void)
{systick_config();//配置系统主频168M,外部8M晶振,配置在#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)rcu_periph_clock_enable(RCU_GPIOA);//使能GPIOA时钟	gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);//PA0配置成输出gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0);//配置成推挽输出,50M速度gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_1);//PA1配置成输入timer_config();  OLED_Init();//OLED初始化  OLED_Clear();//OLED清屏 while(1) {		gpio_bit_write(GPIOA, GPIO_PIN_0,RESET);//预先拉低Trig引脚delay_1ms(5);gpio_bit_write(GPIOA, GPIO_PIN_0,SET);//拉高Trig引脚Delay_us(20);gpio_bit_write(GPIOA, GPIO_PIN_0,RESET);//拉低Trig引脚Delay_us(20);while(gpio_input_bit_get(GPIOA, GPIO_PIN_1) == 0);//如果是低电平,一直等HalTime1= TimeCounter;while(gpio_input_bit_get(GPIOA, GPIO_PIN_1) == 1);//如果是高电平一直等if(TimeCounter>HalTime1){HalTime2 = TimeCounter-HalTime1;if(HalTime2<0x300){Distance = Distance_Calculate(HalTime2);//计算距离值}}OLED_Clear();OLED_ShowCHinese(18,0,0);//光OLED_ShowCHinese(36,0,1);//子OLED_ShowCHinese(54,0,2);//物OLED_ShowCHinese(72,0,3);//联OLED_ShowCHinese(90,0,4);//网OLED_ShowString(24,3,"SR04 TEST");OLED_ShowString(0,6,"Dis: ");  OLED_ShowNum(30,6,Distance,3,16);//显示距离,单位cm  OLED_ShowString(60,6,"cm"); delay_1ms(200);		}  }extern uint32_t TimeCounter;//时间计数器,单位为100us
void TIMER1_IRQHandler(void)//定时器中断服务程序,中断周期为100us
{timer_flag_clear(TIMER1,TIMER_FLAG_UP);TimeCounter++;
}

实验结果:

前方放一个物体,能测试到探测到的距离值。
在这里插入图片描述

超声波测距处设置断点,可以查看检测到的距离值,如果检测不到距离值,需要排查超声波模块接线或者物体距离超声波模块太远。
在这里插入图片描述

四.工程源代码下载

源代码链接下载如下:
CSDN

五.小结

超声波模块基于声音传播的速度和时间差来计算模块到前方障碍物的距离,可用于人体检测,机器人避障,距离测量等,例如在门口安装超声波模块可以检测人的接近并触发开门动作,或者用于室内的距离测量和自动照明等

相关文章:

  • [计算机科学#7]:CPU的三阶段,取指令、解码、执行
  • 2025五一杯数学建模B题:矿山数据处理问题,详细问题分析,思路模型
  • 实习入职的总结
  • RPG_5.角色动画
  • 如何拿奖蓝桥杯
  • UN R79 关于车辆转向装置形式认证的统一规定(正文部分2)
  • 数字智慧方案6157丨智慧医疗建设方案(85页PPT)(文末有下载方式)
  • 结构模式识别理论与方法
  • 内存 “舞台” 上,进程如何 “翩翩起舞”?(转)
  • 雅思写作--70个高频表达
  • 华为OD机试真题——斗地主之顺子(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • JDK-17 保姆级安装教程(附安装包)
  • 运维工作中,Ansible常用模块有哪些?
  • 【Python-Day 8】从入门到精通:Python 条件判断 if-elif-else 语句全解析
  • 上位机知识篇---流水线执行
  • KWDB初体验
  • 如何通过日志在本地调试LangChain编写的程序?
  • 聊一聊接口测试如何处理鉴权
  • 数据升降级:医疗数据的“时空穿梭“系统工程(分析与架构篇)
  • cPanelWHM 的 AutoSSL
  • 阿根廷发生5.6级地震,震源深度30公里
  • 龚正盛秋平王晓真共同启动2025国际消费季暨第六届上海“五五购物节”
  • 乌副总理:乌美签署矿产协议
  • 夜读丨跷脚牛肉乐翘脚
  • 王沪宁主持召开全国政协主席会议
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日