HC-SR04 超声波测距模块原理

本文详细介绍了HC-SR04超声波测距模块的工作原理,包括测距过程、公式解释以及使用中的注意事项。模块提供高精度非接触式测距,通过IO口控制和测量,适用于2cm-400cm的距离测量,建议测量周期大于60ms以减少干扰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用HC-SR04 超声波测距模块

特点

  • 可提供 2cm-400cm 的非接触式距离感测功能,
  • 测距精度可达高到3mm;
  • 模块包括超声波发射器、接收器与控制电路。

实物与接线

  • VCC 供 5V 电源
  • GND 为地线
  • TRIG 触发控制信号输入
  • ECHO 回响信号输出等四个接口端

注TRIG和ECHO接那个引脚均可以。

部分参数

测距原理

  1. 采用 IO 口 TRIG 触发测距,给最少 10us 的高电平信呈。
  2. 模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;
  3. 有信号返回,通过 IO 口 ECHO 输出一个高电平,
  4. 高电平持续的时间就是超声波从发射到返回的时间。
  5. 测试距离=(高电平时间*声速(340m/s))/2(来回);

测距本质探讨

  • 以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,
  • 该模块内部将循环发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号,从此处计时为0。
  • 回响信号的脉冲宽度与所测的距离成正比。
  • 由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。

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

  • 建议测量周期为 60ms 以上,以防止发射信号对回响信号的影响。

注测距公式的计算方法:

声音在干燥空气,20℃中传播的速度位340m/s.

  1. 距离= us/58(cm)

34000cm/s,即34000cm/10^6us=0.034cm/us.

那么声音传播1cm需要1/0.034(cm/us)=29.4117us,来回需要58.3us

距离为t(us)/58(us/cm),即us/58(cm)

2.距离= 高电平时间*声速(340(m/s)/2

传播时间是ECHO高电平持续时间,来回距离就要除以二。

注意事项

  • 此模块不宜带电连接,若要带电连接,则先让模块的 GND 端先连接,否则会影响模块的正常工作。
  • 测距时,被测物体的面积不少于 0.5 平方米且平面尽量要求平整,否则影响测量的结果

附超声波测量原理图

### HC-SR04 超声波测距模块的工作原理 HC-SR04 是一种常用的超声波距离测量模块,能够提供非接触式的精确距离检测功能。该模块通过发射和接收超声波信号来计算目标物体的距离。 #### 工作流程描述 当触发引脚接收到至少 10 微秒的高电平时,HC-SR04 将自动发送一组由八个周期组成的方波脉冲,并启动定时器开始计时[^1]。此时,内部电路会驱动压电陶瓷片发出频率约为 40kHz 的超声波信号向外界传播。一旦这些声波遇到障碍物就会反射回来被同一装置中的另一个压电晶体所捕捉到并转换成电信号返回给控制芯片处理分析得出往返时间差从而换算出实际物理空间里两者之间的直线间距长度值即为最终输出结果形式通常是以厘米单位表示的具体数值范围可以从2cm至400cm不等误差不超过±3mm精度较高适合用于机器人避障导航等领域内作为感知外部环境变化的重要组成部分之一[^2]。 ```python import time import RPi.GPIO as GPIO TRIG_PIN = 16 ECHO_PIN = 18 GPIO.setmode(GPIO.BOARD) GPIO.setup(TRIG_PIN, GPIO.OUT) GPIO.setup(ECHO_PIN, GPIO.IN) def measure_distance(): GPIO.output(TRIG_PIN, True) time.sleep(0.00001) GPIO.output(TRIG_PIN, False) while GPIO.input(ECHO_PIN) == 0: pulse_start_time = time.time() while GPIO.input(ECHO_PIN) == 1: pulse_end_time = time.time() pulse_duration = pulse_end_time - pulse_start_time distance = round(pulse_duration * 17150, 2) return distance distance = measure_distance() print(f"Distance: {distance} cm") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值