这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【M5stackS3】使用超声波模块测量距离

共2条 1/1 1 跳转至

【M5stackS3】使用超声波模块测量距离

高工
2026-07-20 17:22:39     打赏

一:超声波模块知识分享:

HC-SR04超声波传感器是通过发送和接收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离的一种传感器模块。与蝙蝠寻找猎物的回声定位基本原理相同,可以广泛应用于无损测量、水文液位测量、工业场地等领域。

CS100A超声波测距模块有两个超声波探头,分别用于发射和接收超声波,TRIG脚用于触发发射超声波,若接收到返回的超声波ECHO脚会输出高电平,根据高电平的持续时间计算目标距离

二:模块参数:

  测距芯片:CS100A

  晶振:8MHz

  超声波发射频率:40KHz

  测距范围:最大距离约5m(受实际测量环境影响)

  方向角:60°+15°

  探测精度:0.3cm+1%

  测量盲区:小于2cm

  工作温度范围:-40°C-85°C

  工作电压范围:3V~5.5V

具体说明如下所示:

模块上有两个超声波探头,LS1发射探头用于发射超声波,LS2接收探头用于接收超声波更加敏感,模块选用10MQ(建议范围10M0~22MQ)

LS2接收探头接了下拉电阻,可以调节测距灵敏度,减小这个电阻,可以增强抗干扰能力,但也会减小灵敏度,降低测距范围;增大这个电阻,可以得到更远的测量距离,但也会对周围小物体的回波信

在TRIG脚输入一个10us 的高电平(通常建议50us左右),CS100A芯片的TP和TN脚即可发出8个40KHz的超声波脉冲,接着通过RP和RN脚检测回波信号。当检测到回波信号,ECHO脚输出高电平,其持续时间可用于计算距离值,距离(m)=高电平持续时间(s)*声速(340m/s)/2

即使测量距离超过测量范围,CS100A芯片仍会通过ECHO脚输出高电平信号,持续时间约为33ms

三:软件代码如下所示:

选取任意GPIO脚做普通输出脚,选取任意一条定时器TIM通道做输入捕获脚普通输出脚接到超声波测距模块的TRIG脚,输出一个大于10us的高电平触发测距输入捕获脚接到超声波测距模块的ECHO脚,捕获其脉冲宽度,计算距离值

1.选定好GPIO1脚,该脚与超声波测距模块的TRIG脚相连

2.选定好GPIO2通道,该脚与超声波测距模块的ECHO脚相连

3.初始化GPIO脚即TRIG脚,重点配置为推挽输出模式

4.初始化TIM通道对应的GPIO脚即ECHO脚,重点配置为浮空输入模式

5.初始化GPIO2,配置为输入捕获模式

6.TRIG脚输出一个大于10us的高电平,触发CS100A芯片发射超声波

7.输入捕获测量ECHO脚高电平脉宽算出距离值

8.计算ECHO脚高电平持续时间,带入公式距离(m)=高电平持续时间(s)*声速(340m/s)/2,

四:软件代码:

/*
 * ESP32 + HC-SR04 超声波测距示例
 * 测量距离并通过串口打印(单位:厘米)
 * 引脚定义可根据实际接线修改
 */

// 定义引脚
const int TRIG_PIN = 1;   // 触发引脚
const int ECHO_PIN = 2;   // 回波引脚

// 超时时间(微秒),对应最大测量距离约 400cm
const unsigned long TIMEOUT_US = 25000UL;  // 25ms

void setup() {
  Serial.begin(115200);                // 初始化串口
  pinMode(TRIG_PIN, OUTPUT);           // 设置 TRIG 为输出
  pinMode(ECHO_PIN, INPUT);            // 设置 ECHO 为输入
  digitalWrite(TRIG_PIN, LOW);         // 初始低电平
  Serial.println("HC-SR04 测距准备就绪");
}

void loop() {
  float distance = measureDistance();  // 测量距离(厘米)
  
  if (distance > 0) {
    Serial.print("距离: ");
    Serial.print(distance);
    Serial.println(" cm");
  } else {
    Serial.println("测量超时,请检查传感器或调整距离");
  }

  delay(500);  // 每秒测两次
}

/*
 * 测量距离函数
 * 返回距离(厘米),若超时则返回 -1.0
 */
float measureDistance() {
  // 1. 发送一个 10us 的高电平脉冲触发测距
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // 2. 读取 ECHO 引脚的高电平持续时间(微秒)
  unsigned long duration = pulseIn(ECHO_PIN, HIGH, TIMEOUT_US);

  // 3. 判断是否超时
  if (duration == 0) {
    return -1.0;  // 超时返回 -1
  }

  // 4. 计算距离:声速 340m/s = 0.034 cm/us
  //    距离 = 高电平时间 * 声速 / 2(来回)
  float distance = duration * 0.034 / 2.0;
  return distance;
}

五:实物验证

串口数据接收如下所示:




关键词: M5stack     超声波     测量    

院士
2026-07-21 22:36:59     打赏
2楼

我也购买一个HC-SR04超声波传感器玩玩去。感觉还是非常不错的。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]