基于 ESP32 的超声波可视化雷达
一、作品简介
这次制作的是一套基于 ESP32 的超声波可视化雷达。
制作这个作品的想法其实很简单:平时使用超声波传感器时,我们得到的通常只是一个距离数值,比如“前方障碍物距离 20cm”。如果让超声波传感器随着舵机不断改变方向,再把不同角度测量到的距离数据组合起来,是不是就可以模拟出类似雷达扫描的效果?
于是就有了这个作品。
装置通过舵机带动超声波传感器进行左右往复扫描,ESP32 同步获取当前的扫描角度和障碍物距离,再将数据实时绘制到 2.0 英寸 IPS 彩色屏幕上。
最终实现了一个可以实际工作的“小雷达”。
扫描过程中,屏幕上的扫描线会跟随超声波传感器同步移动。当检测到障碍物时,会根据物体所在的方向和距离,在雷达图中显示对应的目标位置,同时在屏幕上方实时显示当前角度和测量距离。
二、主要功能
整个系统主要实现了几个功能:
- 舵机带动超声波传感器进行往复式扫描;
- 实时获取不同方向的障碍物距离;
- TFT 屏幕绘制半圆形雷达界面;
- 扫描线与实际舵机运动方向同步;
- 实时显示当前扫描角度;
- 实时显示障碍物距离;
- 根据“角度 + 距离”计算目标在雷达图中的位置;
- 检测到目标后,在雷达界面中进行醒目标记。
这样一来,原本只有一个数字的超声波测距数据,就变成了比较直观的二维可视化信息。
三、硬件组成
整个作品主要由 ESP32 主控、超声波传感器、舵机、320×240 IPS 彩色屏幕以及机械结构件组成。
其中 ESP32 是整个系统的核心,一方面负责控制舵机运动并读取超声波测距数据,另一方面还需要完成雷达图形的计算和屏幕刷新。
舵机则相当于雷达的“旋转机构”,超声波传感器安装在舵机驱动的结构上,使传感器能够获得不同方向上的距离数据。
四、工作原理
这个项目比较有意思的地方,是需要把三个看起来相互独立的东西结合起来:
角度、距离和屏幕坐标。
例如超声波传感器扫描到某个方向时,系统已经知道当前舵机的角度 θ,同时又测量出了障碍物距离 d。
那么这两个数据就可以看成目标的一个极坐标:
(θ,d)
再根据雷达图的中心位置和显示比例,将它转换成 TFT 屏幕上的二维坐标。
这样,当超声波传感器检测到障碍物时,程序就知道应该在屏幕的什么方向、什么距离上画出目标。
所以屏幕上的红色目标点并不是随机出现的,它实际上对应着超声波传感器在现实空间中检测到的物体。
五、制作过程中遇到的问题
这个项目真正花时间的地方,其实不是“让超声波测出距离”,而是让整个系统运行起来以后看起来足够自然。
最开始舵机每次改变的角度比较大,实际扫描的时候会出现明显的一顿一顿的感觉。后来减小了每次移动的角度,并重新调整扫描节奏,使舵机运动更加平滑。
另外一个比较明显的问题是屏幕刷新。
最初采用整屏刷新的方式更新雷达画面,每次刷新时 TFT 都会产生比较明显的闪烁。后来重新调整了显示逻辑,尽量只更新需要变化的区域,从而明显减轻了屏幕闪烁。
还有一个挺有意思的问题:
屏幕上的雷达扫描方向和实际超声波传感器的运动方向一开始是反的。
最后重新调整角度与屏幕坐标之间的映射关系,才让屏幕扫描线和实体传感器真正同步起来。
这些小问题解决以后,整个雷达的效果才逐渐自然起来。
六、程序设计思路
程序主要可以分成四部分:
舵机扫描 → 超声波测距 → 数据计算 → TFT 图形显示。
ESP32 控制舵机在设定角度范围内往复运动,每到一个新的角度,就进行一次距离测量。
程序随后根据当前角度和测量距离计算目标在雷达图中的坐标。
TFT 显示部分则负责绘制雷达的半圆轮廓、距离参考线、角度参考线、扫描线以及障碍物位置,同时实时更新顶部的角度和距离数据。
为了减少屏幕闪烁,程序没有简单地不断清空整个屏幕重新绘制,而是针对动态内容进行了刷新优化。
本项目程序为本人根据硬件结构和显示需求自行编写与调试,本文主要分享作品设计思路与实现原理,因此不提供完整源代码。
我觉得这句话就够了。既说明了代码来源,也很自然地解释了为什么文章里没有源码,没必要写得像在“防盗”。😄
七、作品效果
最终完成的装置可以连续进行左右扫描。
当扫描区域内没有物体时,雷达扫描线正常运动;当超声波检测到障碍物时,屏幕会根据当前的角度和距离,在对应位置显示目标。
同时屏幕顶部实时显示:
扫描角度 + 障碍物距离
整个装置采用开放式机械结构,ESP32、舵机、传感器以及显示屏都可以直接观察,非常适合作为开源硬件和传感器课程中的实验作品。
八、制作感受
这个作品使用的单个技术其实都不复杂:舵机控制、超声波测距、TFT 显示都是开源硬件中比较常见的内容。
但当把这些技术组合起来以后,就可以完成一个非常直观的可视化作品。
相比单纯在串口中显示“距离 15cm”,让学生真正看到传感器转向哪里、屏幕扫描到哪里、障碍物又出现在哪里,会更容易理解传感器、机械运动、数据采集、坐标系统和图形显示之间的关系。
这也是我比较喜欢开源硬件的地方:
程序不只是运行在电脑屏幕里,它最终可以控制真实的硬件,并把现实世界的数据用另一种方式呈现出来。




