基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

这篇具有很好参考价值的文章主要介绍了基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        前言:本文主要是为了日常普通场合下测距做的对比实验,本实验主要包含2种模块超声波测距模块(HC-SR04)和红外测距模块(SHARP GP2Y0A21YK0F)。两种模块不管是测距原理和编程实验方式都是不相同的,其测距效果也存在很大差异。感兴趣的读者朋友,可以看看这篇文章,文章末尾有实验程序开源

         硬件设备:STM32F103C8T6;OLED;超声波模块:HC-SR04和红外测距模块:SHARP GP2Y0A21YK0F

        硬件实物图:

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

        效果图:

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

 引脚连接:

超声波HC-SR04模块:

VCC --> VCC

GND --> GND

Trig --> PA5

Echo --> PA0

红外测距SHARP GP2Y0A21YK0F模块:

VCC --> VCC

GND --> GND

Vo(数据) --> PA1

一、超声波测距模块简介

        超声波是振动频率高于20KHZ的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射线而定向传播等特点,应用广泛,适合大学生、工程师、技术人员以及电子爱好者等操作。

        新版HC-SRO4,性能远超老版HC-SRO4、US-015,在测距精度高于老版HC-SRO4和US-015的情况下,测距范围更远,可达6米,远超一般超声波测距模块。采用CS-100A超声波测距SOC芯片,高性能,工业级,宽电压、低价格,只有普通超声波测距模块一半的价格,而性能远超普通超声波测距模块。性能与US-025相同,均采用CS100A芯片接口完全兼容

主要参数:

超声波测距芯片:CS100A

工作电压:DC 3V-5.5V

工作电流:5.3mA

工作温度:-40℃-85℃

输出方式:GPI0

感应角度:小于15度

探测距离:2cm~600cm

探测精度:0.1cm+1%

工作原理:

        1、采用IO触发测量距离,给至少10us的高电平;

        2、模块自动发送8个40khz的方波,自动检测是否有信号返回;

        3、有信号返回、通过lo输出一高电平、高电平持续的时间就是超声波从发射到返回的时间,测试距离=(高电平时间*声速(340M/s)/2);

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

         本模块有一个接口:4Pin供电及通信接口。为2.54mm间距的弯排针,如图所示:从左到右依次编号1、2、3、4,它们的定义如下∶

1号Pin:接VCC电源(直流3V-5.5V)。

2号Pin:接外部电路的Trig端,向此管脚输入一个10uS以上的高电平,可触发模块测距。

3号Pin:接外部电路的Echo端,当测距结束时,此管脚会输出一个高电平,电平宽度为超声波往返时间之和

4号Pin:接外部电路的地。

超声波时序图:

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

         以上时序图表明你只需要提供一个10uS以上脉冲触发信号该模块内部将发出8个40kHz周期电平并检测回波

        一旦检测到有回波信号则输出回响信号

        回响信号的脉冲宽度与所测的距离正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。

        公式: us/58-厘米或者uS/148-英寸;或是:距离=高电平时间*声速(340M/S)/2;

特别注意:

        1、此模块不宜带电连接,若要带电连接则先让模块的GND端先连接,否则会影响模块的正常工作。

        2、测距时,被测物体的面积不小于0.5平方米且平面尽量要求平整,否则影响测量的结果。

二、红外测距模块简介

        GP2YOA21YKOF是测距传感器单元PSD的集成组合构成(位置敏感探测器),IRED((红外发光二极管)和信号处理电路的各种物体的反射率,对环境温度工作时间不易受到影响的距离检测由于采用三角测量方法,这个装置输出对应于该电压检测距离,所以这种传感器还可以来作为接近传感器。

工作电压:4.5~5.5V DC

消耗电流:典型30mA

工作温度:-10~60℃

储存温度:-40~70℃

测量距离:10~80cm10cm内数据盲区

★输出类型:模拟量输出型

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

 引脚说明:

①Vo:模拟电压输出        

②GND:地

③VCC:电源正

输出电压(v)与距离反射物体L (cm)

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

         从上图就可以明显看出,该模块0~10cm内电压与距离不成单调关系,故一般该传感器的有效值在10~80cm

应用场合:

        1、触摸式开关(卫浴设备,照明控制等)

        2、机器人吸尘器

        3.传感器用于节能(自动取款机,复印机,自动售货机)

        4.游乐设备(机器人,街机游戏机)

三、OLED简介

        篇幅有限,如果这方面不熟悉的朋友可以去看看本人的另一篇文章,十分相近,希望对您有所帮助。【强烈推荐】基于stm32的OLED各种显示实现(含动态图)_混分巨兽龙某某的博客-CSDN博客https://blog.csdn.net/black_sneak/article/details/125418537?spm=1001.2014.3001.5501

四、CubexMX配置

        1、RCC配置外部高速晶振(精度更高)——HSE;

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

          2、SYS配置:Debug设置成Serial Wire否则可能导致芯片自锁);

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

        3、ADC1配置:配置ADC-IN1模数转换——红外测距仪所用(PA1接Vo)。

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

        4、 TIM2配置:设置定时器TIM2每1us向上计数一次通道1为上升沿捕获并连接到超声波模块的ECHO引脚,记得开启定时器中断(涉及到捕获中断+定时器溢出中断)。

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

         5、I2C2配置:作为OLED的通讯方式;

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

        6、GPIO配置:PA5接到了HC-SR04的TRIG触发引脚,默认输出低电平

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

        7、TIM1配置:由上面可知HC-SR04的使用需要us级的延迟函数,HAL库自带只有ms的,所以需要自己设计一个定时器;

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

        8、时钟树配置:

              注意:ADC的时钟频率不要过高,否则会影响精度(8~12Mhz)

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

        9、工程配置

基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)

五、代码

5.1 超声波HC-SR04模块代码

        其实,超声波HC-SR04的驱动就是基于GPIO口的调用。同时,由于超声波测距模块是基于超声波的物理性质,去进行距离测量,故此其精度受到很多因素影响

影响因素:温度,传播介质及其物理属性等

        本次实验就不进行超声波模块的精度补偿了,后面有空可以给大家出一个相关的文章。

HC-SR04.h:

#ifndef HCSR04_H_
#define HCSR04_H_

#include "main.h"
#include "delay.h"

typedef struct
{
	uint8_t  edge_state;
	uint16_t tim_overflow_counter;
	uint32_t prescaler;
	uint32_t period;
	uint32_t t1;	//	上升沿时间
	uint32_t t2;	//	下降沿时间
	uint32_t high_level_us;	//	高电平持续时间
	float    distance;
	TIM_TypeDef* instance;
    uint32_t ic_tim_ch;
	HAL_TIM_ActiveChannel active_channel;
}Hcsr04InfoTypeDef;

extern Hcsr04InfoTypeDef Hcsr04Info;

/**
 * @description: 超声波模块的输入捕获定时器通道初始化
 * @param {TIM_HandleTypeDef} *htim
 * @param {uint32_t} Channel
 * @return {*}
 */
void Hcsr04Init(TIM_HandleTypeDef *htim, uint32_t Channel);

/**
 * @description: HC-SR04触发
 * @param {*}
 * @return {*}
 */
void Hcsr04Start();

/**
 * @description: 定时器计数溢出中断处理函数
 * @param {*}    main.c中重定义void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
 * @return {*}
 */
void Hcsr04TimOverflowIsr(TIM_HandleTypeDef *htim);

/**
 * @description: 输入捕获计算高电平时间->距离
 * @param {*}    main.c中重定义void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
 * @return {*}
 */
void Hcsr04TimIcIsr(TIM_HandleTypeDef* htim);

/**
 * @description: 读取距离 
 * @param {*}
 * @return {*}
 */
float Hcsr04Read();

#endif /* HCSR04_H_ */

HC-SR04.c:

#include "hc-sr04.h"

Hcsr04InfoTypeDef Hcsr04Info;

/**
 * @description: 超声波模块的输入捕获定时器通道初始化
 * @param {TIM_HandleTypeDef} *htim
 * @param {uint32_t} Channel
 * @return {*}
 */
void Hcsr04Init(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  /*--------[ Configure The HCSR04 IC Timer Channel ] */
  // MX_TIM2_Init();  // cubemx中配置
  Hcsr04Info.prescaler = htim->Init.Prescaler; //  72-1
  Hcsr04Info.period = htim->Init.Period;       //  65535

  Hcsr04Info.instance = htim->Instance;        //  TIM2
  Hcsr04Info.ic_tim_ch = Channel;
  if(Hcsr04Info.ic_tim_ch == TIM_CHANNEL_1)
  {
    Hcsr04Info.active_channel = HAL_TIM_ACTIVE_CHANNEL_1;             //  TIM_CHANNEL_4
  }
  else if(Hcsr04Info.ic_tim_ch == TIM_CHANNEL_2)
  {
    Hcsr04Info.active_channel = HAL_TIM_ACTIVE_CHANNEL_2;             //  TIM_CHANNEL_4
  }
  else if(Hcsr04Info.ic_tim_ch == TIM_CHANNEL_3)
  {
    Hcsr04Info.active_channel = HAL_TIM_ACTIVE_CHANNEL_3;             //  TIM_CHANNEL_4
  }
  else if(Hcsr04Info.ic_tim_ch == TIM_CHANNEL_4)
  {
    Hcsr04Info.active_channel = HAL_TIM_ACTIVE_CHANNEL_4;             //  TIM_CHANNEL_4
  }
  else if(Hcsr04Info.ic_tim_ch == TIM_CHANNEL_4)
  {
    Hcsr04Info.active_channel = HAL_TIM_ACTIVE_CHANNEL_4;             //  TIM_CHANNEL_4
  }
  /*--------[ Start The ICU Channel ]-------*/
  HAL_TIM_Base_Start_IT(htim);
  HAL_TIM_IC_Start_IT(htim, Channel);
}

/**
 * @description: HC-SR04触发
 * @param {*}
 * @return {*}
 */
void Hcsr04Start()
{
  HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_SET);
  DelayUs(10);  //  10us以上
  HAL_GPIO_WritePin(TRIG_GPIO_Port, TRIG_Pin, GPIO_PIN_RESET);
}

/**
 * @description: 定时器计数溢出中断处理函数
 * @param {*}    main.c中重定义void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
 * @return {*}
 */
void Hcsr04TimOverflowIsr(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == Hcsr04Info.instance) //  TIM2
  {
    Hcsr04Info.tim_overflow_counter++;
  }
}

/**
 * @description: 输入捕获计算高电平时间->距离
 * @param {*}    main.c中重定义void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
 * @return {*}
 */
void Hcsr04TimIcIsr(TIM_HandleTypeDef* htim)
{
  if((htim->Instance == Hcsr04Info.instance) && (htim->Channel == Hcsr04Info.active_channel))
  {
    if(Hcsr04Info.edge_state == 0)      //  捕获上升沿
    {
      // 得到上升沿开始时间T1,并更改输入捕获为下降沿
      Hcsr04Info.t1 = HAL_TIM_ReadCapturedValue(htim, Hcsr04Info.ic_tim_ch);
      __HAL_TIM_SET_CAPTUREPOLARITY(htim, Hcsr04Info.ic_tim_ch, TIM_INPUTCHANNELPOLARITY_FALLING);
      Hcsr04Info.tim_overflow_counter = 0;  //  定时器溢出计数器清零
      Hcsr04Info.edge_state = 1;        //  上升沿、下降沿捕获标志位
    }
    else if(Hcsr04Info.edge_state == 1) //  捕获下降沿
    {
      // 捕获下降沿时间T2,并计算高电平时间
      Hcsr04Info.t2 = HAL_TIM_ReadCapturedValue(htim, Hcsr04Info.ic_tim_ch);
      Hcsr04Info.t2 += Hcsr04Info.tim_overflow_counter * Hcsr04Info.period; //  需要考虑定时器溢出中断
      Hcsr04Info.high_level_us = Hcsr04Info.t2 - Hcsr04Info.t1; //  高电平持续时间 = 下降沿时间点 - 上升沿时间点
      // 计算距离
      Hcsr04Info.distance = (Hcsr04Info.high_level_us / 1000000.0) * 340.0 / 2.0 * 100.0;
      // 重新开启上升沿捕获
      Hcsr04Info.edge_state = 0;  //  一次采集完毕,清零
      __HAL_TIM_SET_CAPTUREPOLARITY(htim, Hcsr04Info.ic_tim_ch, TIM_INPUTCHANNELPOLARITY_RISING);
    }
  }
}

/**
 * @description: 读取距离 
 * @param {*}
 * @return {*}
 */
float Hcsr04Read()
{
  // 测距结果限幅
  if(Hcsr04Info.distance >= 500)
  {
    Hcsr04Info.distance = 500;        //元器件资料说是600cm最高距离,这里保守一点
  }
  return Hcsr04Info.distance;
}

        由于利用中断去读取定时测算的脉冲距离,所以这里需要重写定时器的中断服务函数。(这部分放在main.c最后即可)

/* USER CODE BEGIN 4 */
/**
 * @description: 定时器输出捕获中断
 * @param {TIM_HandleTypeDef} *htim
 * @return {*}
 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)    //捕获回调函数
{
  Hcsr04TimIcIsr(htim);
}

/**
 * @description: 定时器溢出中断
 * @param {*}
 * @return {*}
 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)    //在中断回调函数中添加用户代码
{
  Hcsr04TimOverflowIsr(htim);
}
/* USER CODE END 4 */

5.2 红外测距SHARP GP2Y0A21YK0F模块代码

        其实,红外测距模块就是单纯的ADC读取,通过电压结合手册中电压与距离的关系公式得到计算的距离。

ranging.h:

#ifndef __SHARP2Y0A21_H
#define __SHARP2Y0A21_H	

#include "main.h"


#define Adc1IN1Distance_READ_TIMES	10		//定义红外传感器读取次数,以便取平均值
 
void DistanceSensor_Init(void); 				//初始化红外传感器
float DistanceSensor_Get_Val(void);				//读取红外传感器的值


#endif 

ranging.c:

#include "sharp.h"
#include "adc.h"
#include "main.h"
#include "stdio.h"

//初始化ADC,不用修改
//这里我们仅以规则通道为例														   
		  
//初始化传感器,需要修改端口和引脚号,这里是c出口,c1引脚,ADC1的IN1
void DistanceSensor_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  __HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟
	
  //先初始化ADC1通道11 IO口
  GPIO_InitStructure.Pin = GPIO_PIN_1;//PA1
  GPIO_InitStructure.Mode = GPIO_MODE_ANALOG;//模拟输入
  GPIO_InitStructure.Pull = GPIO_NOPULL ;//不带上下拉
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化  
	
 
	MX_ADC1_Init();//初始化ADC1
}
//PA1=IN1
float DistanceSensor_Get_Val(void)
{
	uint32_t temp_val=0;
	float distemp=0.0;
	uint8_t t;
	for(t=0;t<Adc1IN1Distance_READ_TIMES;t++)
	{
		temp_val+=HAL_ADC_GetValue(&hadc1);	//读取ADC值,通道1
		HAL_Delay(5);
	}
	temp_val/=Adc1IN1Distance_READ_TIMES;//得到平均值,这个是平均的ADC,
	distemp=temp_val*3.3/4095;

	//电压对应距离
	distemp=(-13.2*distemp*distemp*distemp)+72.84*distemp*distemp-140*distemp+107.12;
  return distemp;

}

5.3 OLED显示代码

        OLED模块作为常用的数据输出显示模块,应该是必须要掌握的。如果有朋友不是很熟悉,可以去参考本人上面提到的那篇文章,十分详尽!!!

        唯一不同的点:本实验的目的是需要对比一下超声波测距模块红外测距模块的效果怎么样。其精度最高越好,这里就需要考虑到实现OLED显示含有小数的数字功能!

        含有小数的数字显示API函数:

//z_len为整数显示位数,f_len为小数显示位数,size2为字体大小
void OLED_Showdecimal(u8 x,u8 y,float num,u8 z_len,u8 f_len,u8 size2)
{         	
	u8 t,temp;
	u8 enshow;
	int z_temp,f_temp;      
	z_temp=(int)num;
	//整数部分
	for(t=0;t<z_len;t++)
	{
		temp=(z_temp/oled_pow(10,z_len-t-1))%10;
		if(enshow==0 && t<(z_len-1))
		{
			if(temp==0)
			{
				OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
				continue;
			}
			else
			enshow=1;
		}
		OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 
	}
	//小数点
	OLED_ShowChar(x+(size2/2)*(z_len),y,'.',size2); 
	
	f_temp=(int)((num-z_temp)*(oled_pow(10,f_len)));
  //小数部分
	for(t=0;t<f_len;t++)
	{
		temp=(f_temp/oled_pow(10,f_len-t-1))%10;
		OLED_ShowChar(x+(size2/2)*(t+z_len)+5,y,temp+'0',size2); 
	}
}

5.4 main函数

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C2_Init();
  MX_ADC1_Init();
  MX_TIM2_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */
  OLED_Init();
  OLED_CLS();
  Hcsr04Init(&htim2, TIM_CHANNEL_1);  // 通道选择
  Hcsr04Start();  //  启动超声波
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		//显示实验对比
		OLED_ShowCN_STR(30,0,0,4);
		
		//红外测距显示
		HAL_ADC_Start(&hadc1);
        adcx=HAL_ADC_GetValue(&hadc1);
		distance=DistanceSensor_Get_Val();
		OLED_ShowCN_STR(0,2,4,5);
		OLED_Showdecimal(80,2,distance,3,2,16);
		
		
		//超声波测距显示
		Hcsr04Start();
		OLED_ShowCN_STR(0,4,9,5);
		OLED_Showdecimal(80,4,Hcsr04Read(),3,2,16);

		//显示单位
		OLED_ShowCN_STR(30,6,14,5);
				
  }
  /* USER CODE END 3 */
}

六、实验效果

测距模块对比实验

        经过本人由于拍摄不方便,但是效果还是很明显的。经过笔者反复标定测试发现,超声波HC-SR04测距的效果从反应速度测量范围精度等都略优于红外测距模块。而且,超声波模块比红外测距模块便宜很多,emmm,不是很理解其意义所作。当然,红外模块受外界因素的影响比超声波模块少很多,超声波模块在很多情况下是需要补偿校准的。

代码开源

        链接:https://pan.baidu.com/s/1ouwFLF8ru9DROIFSZnEITg 提取码:dktp文章来源地址https://www.toymoban.com/news/detail-426651.html

到了这里,关于基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【CubeMX配置STM32驱动超声波模块(HC-SR04)】

    一、CubeMX配置STM32 1、选择定时器 选择 输入捕获模式 预分频设置为71,向上计数,自动重装值65535 然后将名字改为 ECHO 2、配置TRIG口 这里的端口使用其它空闲的IO口是可以的,设置为输出模式,其它配置不需要改变,最主要的是 User Label 那儿,需要设置为 TRIG ,因为驱动函数里

    2024年02月02日
    浏览(58)
  • HC-SR04超声波测距模块使用方法和例程(STM32)

    基于STM32和HC-SR04模块实现超声波测距功能 最近在学STM32做个简单的应用实践一下,顺便水一篇文章。 本文用的单片机是STM32F103C8T6,超声波测距模块是HC-SR04,显示测距结果用的是0.96寸OLED屏模块。 下图中小于10cm时的显示结果有点问题,代码已修复并更新 修复后的结果: 视频

    2024年02月03日
    浏览(49)
  • 基于STM32F103ZET6的(单/三)路HC-SR04超声波测距+TFTLCD实时显示+距离报警

    一、成果图 说明:本程序的源码地址: https://github.com/Lfy-YF/Campus-Project            CSDN下载连接:https://download.csdn.net/download/weixin_58849239/87829470 源码包含四个版本,涉及单路测距、三路测距、增加外部中断(用来版本记录的~) 运行效果: 本程序实现脱机测距,共左中右

    2024年02月11日
    浏览(46)
  • STM32系列(HAL库)——F103C8T6通过HC-SR04超声波模块实现测距

    (1)编程平台:Keil5 (2)CubeMX (3)XCOM(串口调试助手) (1)某宝买的超声波模块   (2)F1的板子,本例使用经典F103C8T6 (3)ST-link 下载器 (4)USB-TTL模块 (5)杜邦线若干 (1)模块简介:         超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小、方向性好、能够成为射

    2024年02月02日
    浏览(50)
  • 超声波测距模块HC-SR04详解(基于51单片机)

    本篇文章是个人整理的包含超声波测距模块HC-SR04的基本介绍与基本工作原理以及分别通过LCD1602、数码管和串口显示距离的实例讲解与代码的笔记,部分内容来自《HC-SR04超声波测距模块说明书》,代码使用模块化编辑,部分模块来自江科大自化协的51单片机教学视频。 希望大

    2023年04月16日
    浏览(52)
  • 基于51单片机驱动HC-SR04超声波模块(LCD1602显示)

    点击图片购买 HC- SR04+是一款宽电压工作的超声波测距模块。模块外形尺寸及软件与老版本 HC- SR04完全兼容;可以与老版本HC SR04无缝切换。低至3V的低工作电压, 使其与3.3V供电的MCU可以直接连接。 特点 探测角度: 15° 采用工业级MCU,工作温度:-20C~80C 探测距离:5V:2cm-- 450cm;3.3V: 2c

    2024年02月02日
    浏览(61)
  • 【嵌入式系统应用开发】FPGA——基于HC-SR04超声波测距

    硬件 DE2-115 HC-SR04超声波传感器 软件 Quartus 18.1 使用DE2-115开发板驱动HC-SR04模块,并将所测得数据显示到开发板上的数码管。 HC-SR04 超声波测距模块可提供 2cm-400cm的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。图1为 HC-SR04 外观,

    2024年02月08日
    浏览(62)
  • HC-SR04超声波测距模块介绍

    超声波简介       超声波是由机械振动产生的, 可在不同介质中以不同的速度传播, 具有定向性好、能量集中、传输过程中衰减较小、反射能力较强等优点。超声波传感器可广泛应用于非接触式检测方法,它不受光线、被测物颜色等影响, 对恶劣的工作环境具有一定的适应能力

    2023年04月19日
    浏览(53)
  • 基于STM32的HC_SR04模块实现超声波测距(附源码)

    本次实验需要通过STM32与HC_SR04模块实现实时测距,并将测距信息通过串口显示在电脑上 原理 超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时

    2024年02月11日
    浏览(49)
  • 【mcuclub】超声波测距模块HC-SR04

      编号 名称 功能 1 VCC 电源正 2 TRIG 触发控制信号输入 3 ECHO 回响信号输出 4 GND 电源地 由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物体测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便

    2023年04月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包