机器人
返回首页

基于CW32的超声波模块的应用

2023-09-06 来源:武汉芯源半导体

一、简介

1. C-SR04超声波模块是一种常用的测距模块,其通过发射超声波并接收其反射来实现测距功能。因其成本低、精度高、使用简便等特点,被广泛应用于以下场景:

(1)避障:HC-SR04超声波模块可以用于避障机器人的距离测量,通过障碍物与机器人的距离,实现避障控制。

(2):HC-SR04超声波模块可用于家居中的人体检测和距离测量。例如,在门口安装超声波模块,可以检测人的接近并触发开门动作,或者用于室内的距离测量和触发自动照明等。

2. 本实验用到了CW32F030C8T6小蓝板、0.96寸显示屏、HC-SR04超声波模块及5开发环境。

二、超声波模块测距的使用方法

使用流程 连接 将VCC引脚连接到+5V,GND引脚连接到GND。

连接触发引脚

将Trig引脚连接到的数字输出引脚。

连接回波引脚

将Echo引脚连接到单片机的数字输入引脚。

发送信号

通过向Trig引脚发送一个至少10微秒的高电平触发信号来启动测距过程

接收信号

模块发送触发信号后,自动发射超声波,并等待接收反射信号。当接收到反射信号时,Echo引脚会输出一个高电平信号,持续时间与超声波的往返时间成正比。

计算距离

通过测量Echo引脚输出高电平信号的持续时间,可以计算得到距离,一般使用以下公式计算:

距离= 高电平持续时间 × 声波在空气中传播的速度 / 2。

重复测量

根据需要可定时测量距离,以实现连续的距离监测。

需要注意的是,HC-SR04超声波模块的测距精度受到多种因素的影响,如温度、超声波传播介质等。在使用过程中,需要结合具体的应用场景和需求进行参数调整和校准,以获得准确的距离测量结果。

三、核心代码

HC_SR04.c:
#include "HC_SR04.h"


exrn unsigned int me;


void HC_GPIO_Init(void)  
{
  __RCC_GPIOB_CLK_ENABLE();
  
  GPIO_InitTypeDef GPIO_InitStruct; 
  GPIO_InitStruct.IT=GPIO_IT_NONE;
  GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULWN;//下拉输入
  GPIO_InitStruct.ns=GPIO_PIN_8;               //Echo
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;     //推挽输出
  GPIO_InitStruct.Pins=GPIO_PIN_9;               //Trig 
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  PB09_SETLOW();   //Trig拉低,为输出脉冲触发信号做准备
}


unsigned int Measure_Distance(void) //测距
{
  unsigned int distance=0;
  
  SetTrig();     //10us的脉冲触发信号
  Delay_us(10);
  ResetTrig();
  while(ReEcho()==0); //等待Echo输出高电平
  time=0;               //开始记录回波信号脉宽
  while(ReadEcho()==1); //等待Echo输出低电平     
  distance=time*1.7;//根据声速和时间计算距离,即distance=time*340/2/100
  /*
      关于分辨力(mm):
          每次对time加1是10us,10us=0.01ms,340m/s=340mm/ms
          计算距离时,最小分辨力为:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm)
          小于模块标准精度3mm,故测距结果十分精准
  */
  return distance; //返回距离,单位mm
}
main.c:
#include "HC_SR04.h"


extern unsigned int time;


void HC_GPIO_Init(void)  
{
  __RCC_GPIOB_CLK_ENABLE();
  
  GPIO_InitTypeDef GPIO_InitStruct; 
  GPIO_InitStruct.IT=GPIO_IT_NONE;
  GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;//下拉输入
  GPIO_InitStruct.Pins=GPIO_PIN_8;               //Echo
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;     //推挽输出
  GPIO_InitStruct.Pins=GPIO_PIN_9;               //Trig 
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  PB09_SETLOW();   //Trig拉低,为输出脉冲触发信号做准备
}


unsigned int Measure_Distance(void) //测距
{
  unsigned int distance=0;
  
  SetTrig();     //10us的脉冲触发信号
  Delay_us(10);
  ResetTrig();
  while(ReadEcho()==0); //等待Echo输出高电平
  time=0;               //开始记录回波信号脉宽
  while(ReadEcho()==1); //等待Echo输出低电平     
  distance=time*1.7;//根据声速和时间计算距离,即distance=time*340/2/100
  /*
      关于分辨力(mm):
          定时器每次对time加1是10us,10us=0.01ms,340m/s=340mm/ms
          计算距离时,最小分辨力为:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm)
          小于模块标准精度3mm,故测距结果十分精准
  */
  return distance; //返回距离,单位mm
}





审核编辑:刘清

进入机器人查看更多内容>>
相关视频
  • 直播回放: 如何使用MPLAB® Mindi™软件进行模拟电路仿真

  • 直播回放: 开启 SDV 的未来:集成 TI 的远程控制边缘节点解决方案

  • 直播回放: 2026 是德科技XR8新品发布: 一段跨越70年的示波器创新之旅

  • 直播回放: 使用RUHMI模型转换器部署BYOM模型并进行MINST模型部署

  • 直播回放: 使用Reality AI Tools 基于数据创建微小型AI模型以及进行拉弧检测开发实践

  • 直播回放: MPS 赋能人形机器人 - 因为没有运动,机器人只是一尊雕塑

精选电路图
  • 1瓦线性调频增强器

  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 红外开关

  • LM317过压保护

  • 0-30V/20A 大功率稳压电源(采用LM338)