HC-SR04 Ultrasonic Sensor Configuration
HC-SR04 Ultrasonic Sensor Configuration
Synchronized Device Documentation
This page corresponds to the synchronized Chinese source. Commands, JSON examples, API paths, field names, and screenshots are kept aligned with the Chinese device-side source documentation.
What This Page Covers
- Peripheral capability, supported device types, and wiring constraints.
- Web console configuration fields and recommended parameter values.
- PeriphExec integration, validation steps, and troubleshooting notes.
Source Reference
The detailed operational source is preserved below so implementation details stay exact while the English navigation, titles, and reading path remain available.
HC-SR04 超声波测距传感器配置指南
1. 功能说明
HC-SR04 是一款常用的超声波测距模块,通过发射 40KHz 超声波脉冲并接收回波,测量目标距离。FastBee 通过 SensorDriver::readUltrasonic() 方法实现自动初始化、脉冲收发和距离计算。
技术参数
| 参数 | 值 |
|---|---|
| 工作电压 | 5V (部分模块支持3.3V) |
| 工作频率 | 40KHz |
| 测距范围 | 2cm ~ 400cm |
| 测量精度 | ±3mm |
| 触发信号 | 10μs TTL 脉冲 |
| 回波信号 | 高电平时间正比于距离 |
| 最小读取间隔 | 100ms |
工作原理
- Trig 引脚发送 ≥10μs 高电平触发脉冲
- 模块自动发射 8 个 40KHz 超声波脉冲
- Echo 引脚输出高电平,持续时间 = 声波往返时间
- 距离计算:
distance(cm) = duration(μs) × 0.034 / 2
如果读数始终超时或跳变,先按图检查物理条件:Trig/Echo 是否接反,Echo 电平是否已转换到 3.3V,目标距离是否超过 2cm 盲区,反射面是否足够平整。
特性
- 100ms 最小读取间隔缓存
- 超时保护(30ms,约 510cm)
- 范围校验(2~400cm 有效)
- 读取失败时 10 秒内返回旧缓存值
2. 接线说明
HC-SR04 模块 ESP32
┌─────────────┐
│ VCC │───────── 5V
│ Trig │───────── GPIO4 (任意输出引脚)
│ Echo │───────── GPIO27 (任意输入引脚)
│ GND │───────── GND
└─────────────┘
注意:
- HC-SR04 需 5V 供电,Echo 输出为 5V 电平
- ESP32 GPIO 容忍 3.3V,若使用 5V 版模块需在 Echo 线加分压器:
Echo ── 1KΩ ──┬── 2KΩ ── GND
│
└── ESP32 GPIO (约 3.3V)
- 部分新版 HC-SR04 模块(如 HC-SR04P)支持 3.3V 供电和 3.3V 逻辑电平
- Trig 和 Echo 不能使用同一引脚推荐引脚:
- Trig: GPIO4, GPIO5, GPIO16, GPIO17(输出引脚)
- Echo: GPIO27, GPIO26, GPIO25, GPIO33(输入引脚)
3. 配置方式
方式1:Web界面配置(推荐)
HC-SR04 保存前重点核对 Trig/Echo 引脚,Echo 回传电平需要符合 ESP32 输入电压范围。
步骤1:进入外设管理页面
- 打开浏览器访问 ESP32 IP 地址
- 登录后点击左侧菜单 外设配置
步骤2:添加超声波传感器外设
点击 新增外设 按钮
填写配置:
字段 填写内容 说明 外设ID ultrasonic_01唯一标识符 名称 超声波测距显示名称 外设类型 通用传感器 (type: 38) 超声波驱动 Trig引脚 4触发引脚(输出) Echo引脚 27回波引脚(输入) 点击 保存
步骤3:验证配置
- 在外设列表中找到刚添加的外设
- 点击 启用 开关
- 查看实时距离数据(cm)
⚠️ 重要:5V模块的Echo引脚需加分压器(5V→3.3V)
方式2:JSON配置文件导入
将以下配置添加到 data/config/peripherals.json 的 peripherals 数组中:
超声波传感器使用 SENSOR(类型ID=38) 类型,pinCount=2,pins[0]=Trig,pins[1]=Echo。
{
"id": "ultrasonic_01",
"name": "超声波测距",
"type": 38,
"enabled": false,
"pinCount": 2,
"pins": [4, 27, 255, 255, 255, 255, 255, 255],
"params": {}
}字段说明
| 字段 | 含义 | 取值 |
|---|---|---|
| type | 外设类型 | 38 (SENSOR) |
| pins[0] | Trig 触发引脚 | 有效输出 GPIO |
| pins[1] | Echo 回波引脚 | 有效输入 GPIO |
| params | 当前无需专用参数 | 采样间隔由外设执行规则控制,建议 ≥100ms |
4. 外设执行联动
Web界面配置步骤
创建定时采集规则
- 切换到 外设执行管理 标签
- 点击 新增规则 按钮
- 配置定时触发器:
- 触发类型:定时触发
- 执行间隔:5 秒
- 添加动作:
- 动作类型:传感器读取
- 目标外设:ultrasonic_01
- 数据字段:distance(距离)
- 开启 执行后上报数据
- 点击 保存
创建距离过近报警规则
- 创建新规则
- 配置事件触发器:
- 触发类型:事件触发
- 事件ID:ds:ultrasonic_01_distance
- 比较操作:小于
- 比较值:20(cm)
- 添加动作:
- 动作1:蜂鸣器报警
- 动作类型:高电平
- 目标外设:buzzer_01
- 动作2:触发设备事件
- 动作类型:触发事件
- 事件ID:obstacle_detected
- 动作1:蜂鸣器报警
- 点击 保存
💡 提示:事件ID格式为
ds:{外设ID}_{字段名}
JSON配置示例
距离定时采集规则
{
"id": "exec_ultrasonic_read",
"name": "超声波定时采集",
"enabled": false,
"triggers": [
{
"triggerType": 1,
"timerMode": 0,
"intervalSec": 5
}
],
"actions": [
{
"targetPeriphId": "ultrasonic_01",
"actionType": 19,
"actionValue": "{\"periphId\":\"ultrasonic_01\",\"sensorCategory\":\"ultrasonic\",\"dataField\":\"distance\",\"sensorLabel\":\"距离\",\"unit\":\"cm\",\"decimalPlaces\":1}"
}
],
"reportAfterExec": true
}距离过近报警规则
{
"id": "exec_distance_alarm",
"name": "距离过近报警",
"enabled": false,
"triggers": [
{
"triggerType": 4,
"eventId": "ds:ultrasonic_01_distance",
"operatorType": 3,
"compareValue": "20"
}
],
"actions": [
{
"targetPeriphId": "buzzer_01",
"actionType": 0,
"actionValue": ""
},
{
"targetPeriphId": "",
"actionType": 21,
"actionValue": "obstacle_detected"
}
],
"reportAfterExec": true
}水位监测场景(安装在容器顶部朝下测量)
{
"id": "exec_water_level",
"name": "水位超限报警",
"enabled": false,
"triggers": [
{
"triggerType": 4,
"eventId": "ds:ultrasonic_01_distance",
"operatorType": 3,
"compareValue": "10"
}
],
"actions": [
{
"targetPeriphId": "pump_relay",
"actionType": 0,
"actionValue": ""
}
],
"reportAfterExec": true
}5. 应用场景
| 场景 | 安装方式 | 判断逻辑 |
|---|---|---|
| 障碍物检测 | 水平朝前安装 | 距离 < 阈值 → 报警 |
| 水位监测 | 垂直朝下安装在容器顶部 | 距离 < 阈值 → 水位高 |
| 料位检测 | 垂直朝下安装在料仓顶部 | 距离 > 阈值 → 料位低 |
| 车位检测 | 垂直朝下安装在车位上方 | 距离 < 阈值 → 有车 |
6. 注意事项
- 测量盲区:HC-SR04 在 2cm 以内无法测量,请确保目标距离 > 2cm
- 反射面要求:目标面应较平整,粗糙面或角度过大会导致回波丢失
- 温度补偿:声速随温度变化(20°C 约 343m/s,0°C 约 331m/s),精确测量需补偿
- 电平适配:5V 版 Echo 输出 5V,需分压或选用 3.3V 版模块
- 串扰避免:多个超声波模块需交替触发,避免互相干扰(间隔 ≥60ms)
- 软物体:棉花、布料等软物体吸声能力强,可能无法检测
水位、料位等垂直安装场景建议预留机械余量:传感器到满位液面的距离不要落入 2cm 盲区,容器边缘和液面泡沫会造成回波干扰,必要时使用多次采样中位数或加长采样周期。
7. 常见问题
Q: 读取始终返回 NAN(超时)?
- 检查 VCC 是否为 5V(3.3V 供电可能驱动力不足)
- 确认 Trig/Echo 引脚接线未反接
- 确认目标物在 2~400cm 有效范围内
- Echo 引脚需要接分压器(5V→3.3V)
Q: 读数跳动较大?
- 超声波受环境影响大(风、温度变化、反射面角度)
- 建议软件取多次中值滤波
- 减小采样间隔可提高数据密度
Q: 如何同时使用多个超声波模块?
- 不同模块使用不同的 Trig/Echo 引脚对
- 配置不同 id(如 ultrasonic_01、ultrasonic_02)
- 建议采集间隔错开,避免超声波互相干扰
