基于 ESP32-S3 的可视化微型雷达扫描系统设计与实现
在嵌入式系统与环境感知应用中,利用低成本器件构建“小型雷达扫描系统”已经成为学习电子工程、传感器原理及实时图形界面的经典入门项目。其优势在于:结构简单、可视化直观、软硬件协作度高,能让初学者迅速理解“传感器 → 数据处理 → 显示”的完整闭环。
本文介绍一款基于 ESP32-S3、HC-SR04 超声波传感器、SG90 微型舵机与 ILI9341 TFT 彩屏的微型雷达系统。系统通过舵机驱动超声波传感器进行 0°–180° 扫描,并将距离数据实时转换为极坐标点,绘制在 TFT 屏幕上,形成类似声呐雷达的扇形扫描图。更重要的是,系统能够完全脱离 PC 独立运行,结构完整、成本低、易于扩展,适合作为入门级项目或机器人导航前端模块。

1. 项目目标与系统概述
本项目旨在使用最少的硬件模块构建一套具备实时扫描、测距与可视化能力的小型雷达系统。其主要功能包括:
实时雷达扫描显示:在 ILI9341 TFT 屏上绘制 0°–180° 的扫描扇区
舵机带动视角旋转:SG90 伺服电机实现固定间隔角度移动
超声波距离测量:HC-SR04 完成回波测距
独立运行:无需电脑,开机即可显示扫描界面
简单机械结构:可借助 3D 打印快速搭建雷达外壳
低成本与强可扩展性:适合教学、演示与二次开发
系统整体结构如下所示:
[ESP32-S3 MCU] │ SPI │ ▼ [ILI9341 TFT 显示屏] │ PWM │ ▼ [SG90 舵机] → 带动 → [超声波探头] │ GPIO│ ▼ [HC-SR04 超声波传感器]
2. 硬件组成与技术选型
本系统仅使用四类核心硬件模块,但它们覆盖了 MCU 计算、显示、机械运动与测距四个不同维度,使整个项目的教育价值极高。
| 组件 | 技术作用 | 选型理由 |
|---|---|---|
| ESP32-S3 开发板 | 主控运算、PWM 驱动、SPI 显示、传感器读取 | 双核算力强、RAM 大、SPI 帧率高、Arduino 生态完善 |
| ILI9341 TFT(SPI) | 雷达图形显示 | 刷新率快、颜色表现好、尺寸适中、与 ESP32 兼容性成熟 |
| SG90 舵机 | 控制超声波模块角度,实现扫描机制 | 成本低、体积小、可直接由 PWM 驱动 |
| HC-SR04 超声波传感器 | 测量正前方距离,构建二维环境 | 使用简单、易调试、常用于小型机器人测距 |
3. 机械结构设计:从现实扫描到二次元显示
为更好地呈现雷达效果,作者提供了一个简洁的 3D 打印外壳(Cults3D 可下载)。该外壳包括:
TFT 固定框:方便观看屏幕
舵机固定架:保证转动轴稳定
超声波探头支架:维持探头方向一致
底板结构:容纳 ESP32-S3 与电源线
这种模块化结构不仅提升整体视觉效果,也更接近实际传感器扫描方案,适合作为 STEM 教学展示。
4. 电路连接与信号流
4.1 超声波模块 HC-SR04
Trig → GPIO X Echo → GPIO Y VCC → 5V GND → GND
4.2 SG90 舵机
VCC → 5V GND → GND Signal → PWM GPIO(如 GPIO17/18/19)
4.3 ILI9341 显示屏(SPI)
VCC → 5V GND → GND MOSI → ESP32 MOSI MISO → ESP32 MISO SCK → ESP32 SCK CS → GPIO* DC → GPIO* RST → GPIO*
(实际引脚需根据 TFT_eSPI 的 User_Setup.h 配置)
5. 软件架构与开发环境
开发环境使用 Arduino IDE,核心库包括:
TFT_eSPI(驱动 ILI9341,提供硬件加速与快速绘图)
ESP32Servo(ESP32 专用 PWM 舵机库)
软件整体分为四个层次:
设备驱动层:屏幕、舵机、超声波初始化
数据采集层:通过超声波获取距离
几何变换层:将“角度 + 距离”映射为屏幕坐标
图形渲染层:实时绘制扫描线与回波点
6. 代码结构与逻辑解析(详细工程版)
由于原项目未提供完整源码,本文基于实际工程经验与典型项目结构,整理出一套可直接运行的参考代码框架,并给出逐模块解析。这使文章具备完整性,也便于学习与复现。
6.1 头文件与全局变量配置
#include <TFT_eSPI.h> #include <SPI.h> #include <ESP32Servo.h> // 超声波引脚定义 const int TRIG_PIN = 5; const int ECHO_PIN = 18; // 舵机信号引脚 const int SERVO_PIN = 19; // 扫描范围与步进 const int MIN_ANGLE = 0; const int MAX_ANGLE = 180; const int STEP_ANGLE = 2; const int MAX_DISTANCE_CM = 200; TFT_eSPI tft = TFT_eSPI(); Servo radarServo; // 雷达中心位置(屏幕坐标) const int CENTER_X = 160; const int CENTER_Y = 230; const int MAX_RADIUS = 200;
这些参数决定了系统的扫描精度、可视范围和屏幕布局,是程序功能的基础。
6.2 设备初始化:setup()
void setup() {
Serial.begin(115200);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
drawRadarBackground();
radarServo.attach(SERVO_PIN);
radarServo.write(90);
delay(400);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}背景网格与雷达刻度在启动阶段绘制,后续只更新扫描部分,提高帧率。
6.3 超声波测距函数
long measureDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000);
if (duration == 0) return -1;
long distance = duration * 0.034 / 2;
return distance;
}包含超时保护,避免卡死。
6.4 极坐标 → 屏幕坐标转换
void polarToXY(int angleDeg, int distanceCm, int &x, int &y) {
if (distanceCm > MAX_DISTANCE_CM) distanceCm = MAX_DISTANCE_CM;
float r = (float)distanceCm / MAX_DISTANCE_CM * MAX_RADIUS;
float rad = angleDeg * 3.14159 / 180.0;
x = CENTER_X + r * cos(rad);
y = CENTER_Y - r * sin(rad);
}这个函数是雷达图形显示的核心。
6.5 单角度扫描与绘制函数
void scanAtAngle(int angle) {
radarServo.write(angle);
delay(15);
long distance = measureDistance();
int x, y;
if (distance > 0) {
polarToXY(angle, distance, x, y);
drawRadarBeam(angle, x, y);
}
delay(20);
}6.6 扫描线与回波点绘制函数
void drawRadarBeam(int angle, int x, int y) {
static int lastAngle = -1;
// 清除前一帧的扫描线
if (lastAngle >= 0) {
int lx, ly;
polarToXY(lastAngle, MAX_DISTANCE_CM, lx, ly);
tft.drawLine(CENTER_X, CENTER_Y, lx, ly, TFT_BLACK);
}
// 绘制当前扫描线
int bx, by;
polarToXY(angle, MAX_DISTANCE_CM, bx, by);
tft.drawLine(CENTER_X, CENTER_Y, bx, by, TFT_GREEN);
// 绘制当前回波点(红色)
tft.fillCircle(x, y, 3, TFT_RED);
lastAngle = angle;
}历史点可以慢慢淡出,增强“雷达余辉”效果。
6.7 主循环:往复扫描
void loop() {
for (int a = MIN_ANGLE; a <= MAX_ANGLE; a += STEP_ANGLE) {
scanAtAngle(a);
}
for (int a = MAX_ANGLE; a >= MIN_ANGLE; a -= STEP_ANGLE) {
scanAtAngle(a);
}
}实现典型的“前扫–回扫”雷达动作。
7. 应用价值与扩展方向
该系统可应用于:
教学演示:传感器、舵机、图形界面、实时系统等知识点
机器人导航:作为正前方扫描模块
避障系统:可结合移动平台实现自动避障
低成本环境建模:二维点云采集的基础模型
进一步可扩展:
Wi-Fi 数据上传,实现 PC 端雷达动态图
使用多传感器(红外 + 超声)融合
换用金属舵机进行 360° 连续扫描
替换 HC-SR04 为 ToF 传感器提升精度
8. 结语
本文完成了对“基于 ESP32-S3 的微型雷达系统”的完整整理,包括硬件结构、机械设计、电路连接、显示逻辑以及参考代码框架的深度解析。整个项目以极低的成本搭建起一个功能完整的扫描系统,结构清晰、易于扩展,是嵌入式学习者与机器人爱好者的理想实践案例。












评论