## 项目30 测距仪表

**1. 项目介绍：**

HC-SR04超声波传感器是一种非常实惠的距离传感器，主要用于各种机器人项目中的物体躲避。它也被用于水位传感器，甚至作为一个停车传感器。我们把超声波传感器当作蝙蝠的眼睛，在黑暗中，蝙蝠仍然可以通过超声波识别前方的物体和方向。

在本项目中，我们使用ESP32控制超声波传感器和LED模拟超声波测距仪。

**2. 项目元件：**

|![Img](./media/afc52f6616725ba37e3b12a2e01685ad.png)|![Img](./media/a2aa343488c11843f13ae0413547c673.png)|![Img](./media/28c9fe25104d16cc0ed7da8c80c443ea.png)|![Img](./media/4191d5454859076aa2a6c069185be177.png)|
| :--: | :--: | :--: | :--: |
|ESP32*1|面包板*1|超声波传感器*1|4P转杜邦线公单*1
|![Img](./media/e8726e55ebfb8e7520e615575ce89204.png)|![Img](./media/11f324f82f890b0691f134e1ea7a3765.png)|![Img](./media/8d920d12138bd3b4e62f02cecc2c63a3.png)|![Img](./media/b4421594adeb4676d63581a1047c6935.png)|
|红色 LED*4|220Ω电阻*4|跳线若干|USB 线*1|

**3. 元件知识：**

**HC-SR04超声波传感器：** 像蝙蝠一样使用声纳来确定与物体的距离，它提供了精准的非接触范围检测、高精度和稳定的读数。它的操作不受阳光或黑色材料的影响，就像精密的照相机(在声学上像布料这样比较软的材料很难被探测到)。它带有超声波发射器和接收器。

![Img](./media/714ec39c0aca1fe5faa21660afa4f584.png)

在超声波传感器的前面是两个金属圆筒，这些是转换器。转换器将机械能转换成电信号。在超声波传感器中，有发射转换器和接收转换器。发射转换器将电信号转换为超声波脉冲，接收转换器将反射的超声波脉冲转换回电信号。如果你看超声波传感器的背面，你会看到的发射转换器后面有一个IC。这是控制发射转换器的IC。在接收转换器后面也有一个IC，这是一个四运算放大器，它将接收转换器产生的信号放大成足以传输到微控制器的信号。

**时序图：**

图示HC-SR04的时序图。为了开始测量，SR04的Trig必须接受至少10us的高(5V)脉冲，这将启动传感器将发射出8个周期的40kHz的超声波脉冲，并等待反射的超声波脉冲。当传感器从接收器检测到超声波时，它将设置回波引脚为高(5V)和延迟一个周期(宽度)，与距离成比例。为了获得距离，测量Echo引脚的宽度。

![Img](./media/0ef4e6d4eeb8fcda4c3414414cb2ff42.png)

时间=回波脉冲宽度，单位为us(微秒)

距离厘米=时间/ 58

距离(英寸)=时间/ 148

**4. 读取超声波传感器距离值**  

我们将从一个简单的超声波测距开始，并打印测量的距离。 

![Img](./media/88695ec0baa6f351fabceb67888a85b0.png)

HC-SR04超声波传感器有四个引脚：Vcc、Trig、Echo和GND。Vcc引脚提供产生超声波脉冲的电源，接Vcc/+5V。GND引脚接地/GND。Trig引脚是控制板发送信号来启动超声波脉冲的地方。Echo引脚是超声波传感器向控制板发送关于超声波脉冲行程持续时间的信息的地方。按下图接线：

![Img](./media/b6bca4b1243254d8a499d52eacb8e372.png)

**代码说明：**

![Img](./media/img-20241029142305.png)

读取超声波传感器检测的距离。

你可以打开我们提供的代码，也可以自己编写代码，其如下：

1. 从 “![Img](./media/img-20241023140031.png)” 拖出 “![Img](./media/img-20241023140106.png)”。

2. 从 “![Img](./media/img-20241023140218.png)” 拖出 “![Img](./media/img-20241023140243.png)” 放入 “![Img](./media/img-20241023140106.png)”，设置波特率为 115200 。

3. 先从 “ ![Img](./media/img-20241024133608.png)” 拖出 “![Img](./media/img-20241028131724.png)” 放入 “![Img](./media/img-20241023140106.png)” 中，将 “ 整数 ” 改成 “字符串” ；从 “![Img](./media/img-20241028132016.png)” 拖出 “![Img](./media/img-20241028132058.png)” 放入 “![Img](./media/img-20241028131724.png)”中，将 item 改成 distance 。

![Img](./media/img-20241029155850.png)

4. 先从 “ ![Img](./media/img-20241024133608.png)” 拖出 “![Img](./media/img-20241029134032.png)” ；再从 “ ![Img](./media/img-20241029153615.png) ” 拖出 “ ![Img](./media/img-20241029160051.png) ” Trig管脚为 13 ，Echo 管脚为 14 。

![Img](./media/img-20241029160216.png)

5. 先从 “![Img](./media/img-20241023140218.png)” 拖出 “![Img](./media/img-20241029151254.png)” ，将 “自动换行” 改成 “不换行”；接着从 “ ![Img](./media/img-20241029152415.png) ” 拖出 “ ![Img](./media/img-20241029152450.png) ”，将 hello 改成 Distance:  。

![Img](./media/img-20241029160600.png)

6. 先从 “![Img](./media/img-20241023140218.png)” 拖出 “![Img](./media/img-20241029151254.png)” ，将 “自动换行” 改成 “不换行”；接着从 “ ![Img](./media/img-20241024133608.png)” 拖出 “ ![Img](./media/img-20241029160503.png) ”。

![Img](./media/img-20241029160617.png)

7. 复制代码块 “ ![Img](./media/img-20241029160651.png) ” 1次，将 “不换行” 改成 “自动换行” ，Distance: 改成 cm 。

![Img](./media/img-20241029160906.png)

8. 从 “![Img](./media/img-20241023140031.png)” 拖出 “![Img](./media/img-20241029134512.png)”，设置延时为100毫秒。

完整代码：

![Img](./media/img-20241029142355.png)

编译并上传代码到ESP32，代码上传成功后，利用USB线上电，单击图标 ![Img](./media/img-20241023142105.png) 进入串行监视器，设置波特率为 <span style="color: rgb(255, 76, 65);">115200</span>。可以看到的现象是：串口监视器窗口将打印超声波传感器和物体之间的距离值。

![Img](./media/img-20241029143657.png)

**5. 超声波测距仪的接线图：**

接下来，我们将使用ESP32控制超声波传感器和4个LED模拟超声波测距仪。按如下图接好线：

![Img](./media/6fbf83282f8afdbf127d675cf1cb7aab.png)

**6. 项目代码：**

![Img](./media/img-20241031133951.png)

**7. 项目现象：**

编译并上传代码到ESP32，代码上传成功后，利用USB线上电，打开串口监视器，设置波特率为115200。可以看到的现象是：串口监视器窗口将打印超声波传感器和物体之间的距离值。另外，当我们用手在超声波传感器前移动时，相应的LED会亮起来。

![Img](./media/2477ab30a017c161f9b5ea58dd66fa80.png)





