Arduino Uno 实验8——HC-SR04 超声波测距模块

HC-SR04 超声波测距模块简介

  由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。
  HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路
在这里插入图片描述

电气参数

在这里插入图片描述

基本工作原理

  超声波测距模块——触发信号后发射超声波,当超声波投射到物体而反射回来时,模块输出——回响信号,以触发信号和回响信号间的时间差,来判定物体的距离。
在这里插入图片描述

时序图

在这里插入图片描述

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

  以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
注意:
  1、此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。
  2、测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的结果。

除以58的由来:

  由超声波测距的工作原理和时序图,我们可以得到时间的数值,在得到这个数值之后,还需要除以58,这是由于:
在这里插入图片描述

超声波测距模块的使用

实验一:超声波测距

项目要求:

  通过超声波测距模块测得距离障碍物的距离,并通过串口监视器进行输出。

电路搭建

在这里插入图片描述

参考程序
const int TrigPin = 3;  //超声波的触发引脚连接引脚3
const int EchoPin = 2;   //超声波的接受引脚连接引脚2
int distance;  //定义全局变量,保存距离

void setup() {
  Serial.begin(9600);
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT);
}

void loop() {
  digitalWrite(TrigPin, LOW);
  delayMicroseconds(2);   //本段语句的目的先拉低Trig,然后发送10us的高电平信号去触发超声波传感器
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(10);  
  digitalWrite(TrigPin, LOW);
  distance = pulseIn(EchoPin, HIGH) / 58.0;  //本语句的含义是计算距离并换算成厘米
  Serial.print(distance);
  Serial.println("cm");
  delay(100);
}
pulseIn函数介绍

在这里插入图片描述

原理图

在这里插入图片描述

使用LCD和Arduino制作超声波测距仪说明: 在这个Arduino教程中,我将向您展示如何使用HC-SR04超声波传感器,并将其与LCD显示器集成,以便显示传感器与特定物体之间的距离。 所需材料: Arduino UNO 面包 16 x 2液晶显示器 HC-SR04超声波传感器 10K电位器(与上面连接的LCD显示器一起) 跨接电缆 第一步:连接HC-SR04超声波传感器 HC-SR04超声波传感器有4个引脚:VCC引脚,触发引脚,回波引脚和GND引脚。如上图所示,VCC引脚连接到面包上的+ 5V,GND引脚连接到面包上的GND,trig引脚连接到Arduino的数字引脚11,echo引脚连接到数字引脚10 Arduino的。 第二步:连接LCD和电位器 为了将LCD连接到面包,我建议您将引脚连接头焊接到显示器的连接器上。LCD显示器的连接如下: LCD VSS引脚到面包上的Arduino GND 在面包上将LCD VDD引脚连接到Arduino 5V LCD VO引脚至10k电位器中心引脚 LCD RS引脚连接到数字引脚1 在面包上将LCD RW引脚连接到Arduino GND LCD使能引脚到数字引脚2 LCD D4引脚连接到数字引脚4 LCD D5引脚至数字引脚5 LCD D6引脚到数字引脚6 LCD D7引脚至数字引脚7 LCD面上的一个针脚+ 5V 面包上的LCD K引脚连接到GND 10K电位器的其余引脚连接到面包和GND上的+ 5V。 第三步:供电 对于这个项目,我们可以通过任何+ 5V电源为Arduino供电。您可以使用计算机上的USB端口为Arduino供电,但在此项目中,我将使用便携式电池。在将电源连接到Arduino之前,确保Arduino上的+ 5V端口连接到面包上的+ 5V。做同样的事情,将Arduino的GND端口连接到面包的GND。 第四步:获取代码 具体代码见附件。 第五步:观看视频 使用LCD和Arduino制作超声波测距仪视频: https://v.youku.com/v_show/id_XMzIzMjg4NTQ4MA==.html
<think>嗯,用户问的是HC-SR04超声波测距模块使用什么通信方式。首先,我需要确认自己对HC-SR04的了解。HC-SR04是一种常见的超声波测距模块,通常用于测量距离,比如在机器人避障或者自动导航系统中使用。 接下来,用户想知道它的通信方式。这里需要明确通信方式指的是什么。一般来说,通信方式可能包括数字信号、模拟信号、串口通信(如UART)、I2C、SPI等。但HC-SR04的工作方式可能和这些标准通信协议不同,因为它可能使用简单的触发和回波信号来工作。 回想一下HC-SR04的工作原理,通常它需要外部微控制器(如Arduino)来触发一个脉冲信号,然后模块发送超声波,并检测回波,通过计算时间差来得到距离。所以它的通信可能基于简单的数字脉冲,而不是复杂的协议。也就是说,用户可能需要通过数字引脚发送触发信号,然后通过另一个数字引脚读取回波信号的高电平持续时间,再根据时间计算距离。 需要确认这一点是否正确。可能需要查阅HC-SR04的数据手册或者常见的应用笔记。根据记忆,HC-SR04的接口通常包括VCC、GND、Trig(触发)和Echo(回波)四个引脚。Trig用于启动测距,Echo用于返回高电平脉冲,其宽度与距离成正比。所以这更像是一种基于脉冲宽度的通信方式,而不是传统的串行通信协议。 用户可能想知道是否需要使用特定的通信协议,比如I2C或UART,但根据HC-SR04的设计,它不需要这些协议。它只需要通过数字IO口进行触发和读取脉冲宽度。因此,通信方式可以描述为非协议化的数字脉冲方式,或者基于脉冲宽度调制(PWM)的方式,但更准确的是触发-回波机制。 另外,用户可能想知道是否需要额外的库或硬件支持,但通常只需要基本的GPIO操作即可,不需要复杂的通信库。可能还要提到工作电压、测量范围、精度等参数,但用户的问题主要集中在通信方式上,所以重点应放在触发和回波的机制上。 总结来说,HC-SR04的通信方式是使用两个数字信号线:Trig和Echo。Trig接收一个10微秒的高电平脉冲来启动测距,然后Echo输出一个高电平脉冲,其持续时间与距离成正比。通过测量Echo脉冲的持续时间,可以计算出距离值。这种机制不依赖于标准的通信协议,而是基于时间测量的简单数字信号交互。</think>### 核心结论 **HC-SR04超声波测距模块使用基于数字脉冲的触发-回波机制(非标准通信协议)**,通过简单的电平信号交互完成距离测量,无需I²C、SPI或UART等复杂通信协议。 --- ### 通信方式详解 1. **接口定义** - **Trig(触发引脚)**:输入引脚,接收来自控制器(如单片机)的触发信号(需至少$10\mu s$的高电平脉冲) - **Echo(回波引脚)**:输出引脚,返回与距离成比例的高电平脉冲(持续时间$T$对应超声波往返时间) - **VCC/GND**:供电($5V$直流)与接地 2. **工作流程** ```plaintext 控制器动作 HC-SR04响应 ┌───────────┐ ┌──────────────────┐ │发送10μs高电平脉冲→Trig│触发超声波发射(8个40kHz脉冲) │ │←Echo │检测回波并输出高电平脉冲 │测量Echo高电平时间T │ └───────────┘ ``` **距离计算公式**: $$ \text{距离} = \frac{T \times 340\text{m/s}}{2} $$ (340m/s为声速,实际需根据温度修正) --- ### 参数特性 | 参数 | 数值/描述 | |---------------------|-----------------------------------| | **工作电压** | $5V \pm 0.5V$ | | **测量范围** | $2\text{cm} \sim 400\text{cm}$ | | **测距精度** | $\pm 3\text{mm}$(理想条件下) | | **触发信号要求** | $10\mu s$以上高电平脉冲 | | **响应时间** | 最大$100ms$(无回波时超时) | --- ### 典型电路连接示例 ``` [Arduino UNO] [HC-SR04] Digital Pin 9 →→→→→ Trig Digital Pin 10 ←←←←← Echo 5V →→→→→ VCC GND →→→→→ GND ``` **注意事项**: - 若控制器电压为$3.3V$(如树莓派),需在Echo引脚串联$1k\Omega$电阻或使用电平转换模块 - 避免多个超声波模块同时工作,防止声波干扰 --- ### 代码实现(Arduino示例) ```cpp const int trigPin = 9; const int echoPin = 10; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { // 发送触发信号 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 测量回波脉冲宽度 long duration = pulseIn(echoPin, HIGH); float distance = duration * 0.034 / 2; // 单位:厘米 Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); delay(100); } ``` --- ### 常见问题与优化 1. **测量误差大** - **原因**:环境温度影响声速(温度每升高$1℃$,声速增加约$0.6m/s$) - **解决**:加入温度传感器(如DS18B20),动态修正声速: $$ v = 331.4 + 0.6 \times T_{℃} $$ 2. **近距离盲区** - **现象**:$<2cm$时无法检测 - **应对**:软件设置最小阈值或改用TOF(飞行时间)传感器 3. **多模块干扰** - **方案**:分时复用(依次触发不同模块,间隔$>60ms$) --- ### 扩展应用场景 | 场景 | 实现方式 | |---------------------|-----------------------------------| | **智能小车避障** | 3个模块分别检测左/前/右障碍物 | | **液位监测** | 垂直安装于容器顶部测液面高度 | | **自动门控制** | 检测人体进入触发范围(1m内) | --- ### 替代方案对比 | 模块类型 | HC-SR04 | VL53L0X(激光ToF) | |----------------|---------------------------|---------------------------| | **测距原理** | 超声波 | 激光飞行时间 | | **最大距离** | $4m$ | $2m$ | | **精度** | $\pm 3mm$ | $\pm 1mm$ | | **抗光干扰** | 强(适用于黑暗环境) | 弱(强光下性能下降) | | **成本** | $1 \sim 2$美元 | $4 \sim 6$美元 | --- ### 总结 HC-SR04通过**数字脉冲触发+回波时间检测**实现测距,无需复杂通信协议。其低成本、易用性使其成为入门级项目的理想选择,但在高精度或复杂环境应用中需结合温度补偿、多模块协同等策略优化性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值