基于 ESP32-S3 的可視化微型雷達(dá)掃描系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
在嵌入式系統(tǒng)與環(huán)境感知應(yīng)用中,利用低成本器件構(gòu)建“小型雷達(dá)掃描系統(tǒng)”已經(jīng)成為學(xué)習(xí)電子工程、傳感器原理及實(shí)時(shí)圖形界面的經(jīng)典入門(mén)項(xiàng)目。其優(yōu)勢(shì)在于:結(jié)構(gòu)簡(jiǎn)單、可視化直觀、軟硬件協(xié)作度高,能讓初學(xué)者迅速理解“傳感器 → 數(shù)據(jù)處理 → 顯示”的完整閉環(huán)。
本文介紹一款基于 ESP32-S3、HC-SR04 超聲波傳感器、SG90 微型舵機(jī)與 ILI9341 TFT 彩屏的微型雷達(dá)系統(tǒng)。系統(tǒng)通過(guò)舵機(jī)驅(qū)動(dòng)超聲波傳感器進(jìn)行 0°–180° 掃描,并將距離數(shù)據(jù)實(shí)時(shí)轉(zhuǎn)換為極坐標(biāo)點(diǎn),繪制在 TFT 屏幕上,形成類似聲吶雷達(dá)的扇形掃描圖。更重要的是,系統(tǒng)能夠完全脫離 PC 獨(dú)立運(yùn)行,結(jié)構(gòu)完整、成本低、易于擴(kuò)展,適合作為入門(mén)級(jí)項(xiàng)目或機(jī)器人導(dǎo)航前端模塊。

1. 項(xiàng)目目標(biāo)與系統(tǒng)概述
本項(xiàng)目旨在使用最少的硬件模塊構(gòu)建一套具備實(shí)時(shí)掃描、測(cè)距與可視化能力的小型雷達(dá)系統(tǒng)。其主要功能包括:
實(shí)時(shí)雷達(dá)掃描顯示:在 ILI9341 TFT 屏上繪制 0°–180° 的掃描扇區(qū)
舵機(jī)帶動(dòng)視角旋轉(zhuǎn):SG90 伺服電機(jī)實(shí)現(xiàn)固定間隔角度移動(dòng)
超聲波距離測(cè)量:HC-SR04 完成回波測(cè)距
獨(dú)立運(yùn)行:無(wú)需電腦,開(kāi)機(jī)即可顯示掃描界面
簡(jiǎn)單機(jī)械結(jié)構(gòu):可借助 3D 打印快速搭建雷達(dá)外殼
低成本與強(qiáng)可擴(kuò)展性:適合教學(xué)、演示與二次開(kāi)發(fā)
系統(tǒng)整體結(jié)構(gòu)如下所示:
[ESP32-S3 MCU] │ SPI │ ▼ [ILI9341 TFT 顯示屏] │ PWM │ ▼ [SG90 舵機(jī)] → 帶動(dòng) → [超聲波探頭] │ GPIO│ ▼ [HC-SR04 超聲波傳感器]
2. 硬件組成與技術(shù)選型
本系統(tǒng)僅使用四類核心硬件模塊,但它們覆蓋了 MCU 計(jì)算、顯示、機(jī)械運(yùn)動(dòng)與測(cè)距四個(gè)不同維度,使整個(gè)項(xiàng)目的教育價(jià)值極高。
| 組件 | 技術(shù)作用 | 選型理由 |
|---|---|---|
| ESP32-S3 開(kāi)發(fā)板 | 主控運(yùn)算、PWM 驅(qū)動(dòng)、SPI 顯示、傳感器讀取 | 雙核算力強(qiáng)、RAM 大、SPI 幀率高、Arduino 生態(tài)完善 |
| ILI9341 TFT(SPI) | 雷達(dá)圖形顯示 | 刷新率快、顏色表現(xiàn)好、尺寸適中、與 ESP32 兼容性成熟 |
| SG90 舵機(jī) | 控制超聲波模塊角度,實(shí)現(xiàn)掃描機(jī)制 | 成本低、體積小、可直接由 PWM 驅(qū)動(dòng) |
| HC-SR04 超聲波傳感器 | 測(cè)量正前方距離,構(gòu)建二維環(huán)境 | 使用簡(jiǎn)單、易調(diào)試、常用于小型機(jī)器人測(cè)距 |
3. 機(jī)械結(jié)構(gòu)設(shè)計(jì):從現(xiàn)實(shí)掃描到二次元顯示
為更好地呈現(xiàn)雷達(dá)效果,作者提供了一個(gè)簡(jiǎn)潔的 3D 打印外殼(Cults3D 可下載)。該外殼包括:
TFT 固定框:方便觀看屏幕
舵機(jī)固定架:保證轉(zhuǎn)動(dòng)軸穩(wěn)定
超聲波探頭支架:維持探頭方向一致
底板結(jié)構(gòu):容納 ESP32-S3 與電源線
這種模塊化結(jié)構(gòu)不僅提升整體視覺(jué)效果,也更接近實(shí)際傳感器掃描方案,適合作為 STEM 教學(xué)展示。
4. 電路連接與信號(hào)流
4.1 超聲波模塊 HC-SR04
Trig → GPIO X Echo → GPIO Y VCC → 5V GND → GND
4.2 SG90 舵機(jī)
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*
(實(shí)際引腳需根據(jù) TFT_eSPI 的 User_Setup.h 配置)
5. 軟件架構(gòu)與開(kāi)發(fā)環(huán)境
開(kāi)發(fā)環(huán)境使用 Arduino IDE,核心庫(kù)包括:
TFT_eSPI(驅(qū)動(dòng) ILI9341,提供硬件加速與快速繪圖)
ESP32Servo(ESP32 專用 PWM 舵機(jī)庫(kù))
軟件整體分為四個(gè)層次:
設(shè)備驅(qū)動(dòng)層:屏幕、舵機(jī)、超聲波初始化
數(shù)據(jù)采集層:通過(guò)超聲波獲取距離
幾何變換層:將“角度 + 距離”映射為屏幕坐標(biāo)
圖形渲染層:實(shí)時(shí)繪制掃描線與回波點(diǎn)
6. 代碼結(jié)構(gòu)與邏輯解析(詳細(xì)工程版)
由于原項(xiàng)目未提供完整源碼,本文基于實(shí)際工程經(jīng)驗(yàn)與典型項(xiàng)目結(jié)構(gòu),整理出一套可直接運(yùn)行的參考代碼框架,并給出逐模塊解析。這使文章具備完整性,也便于學(xué)習(xí)與復(fù)現(xiàn)。
6.1 頭文件與全局變量配置
#include <TFT_eSPI.h> #include <SPI.h> #include <ESP32Servo.h> // 超聲波引腳定義 const int TRIG_PIN = 5; const int ECHO_PIN = 18; // 舵機(jī)信號(hào)引腳 const int SERVO_PIN = 19; // 掃描范圍與步進(jìn) 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; // 雷達(dá)中心位置(屏幕坐標(biāo)) const int CENTER_X = 160; const int CENTER_Y = 230; const int MAX_RADIUS = 200;
這些參數(shù)決定了系統(tǒng)的掃描精度、可視范圍和屏幕布局,是程序功能的基礎(chǔ)。
6.2 設(shè)備初始化: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);
}背景網(wǎng)格與雷達(dá)刻度在啟動(dòng)階段繪制,后續(xù)只更新掃描部分,提高幀率。
6.3 超聲波測(cè)距函數(shù)
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;
}包含超時(shí)保護(hù),避免卡死。
6.4 極坐標(biāo) → 屏幕坐標(biāo)轉(zhuǎn)換
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);
}這個(gè)函數(shù)是雷達(dá)圖形顯示的核心。
6.5 單角度掃描與繪制函數(shù)
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 掃描線與回波點(diǎn)繪制函數(shù)
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);
}
// 繪制當(dāng)前掃描線
int bx, by;
polarToXY(angle, MAX_DISTANCE_CM, bx, by);
tft.drawLine(CENTER_X, CENTER_Y, bx, by, TFT_GREEN);
// 繪制當(dāng)前回波點(diǎn)(紅色)
tft.fillCircle(x, y, 3, TFT_RED);
lastAngle = angle;
}歷史點(diǎn)可以慢慢淡出,增強(qiáng)“雷達(dá)余輝”效果。
6.7 主循環(huán):往復(fù)掃描
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);
}
}實(shí)現(xiàn)典型的“前掃–回掃”雷達(dá)動(dòng)作。
7. 應(yīng)用價(jià)值與擴(kuò)展方向
該系統(tǒng)可應(yīng)用于:
教學(xué)演示:傳感器、舵機(jī)、圖形界面、實(shí)時(shí)系統(tǒng)等知識(shí)點(diǎn)
機(jī)器人導(dǎo)航:作為正前方掃描模塊
避障系統(tǒng):可結(jié)合移動(dòng)平臺(tái)實(shí)現(xiàn)自動(dòng)避障
低成本環(huán)境建模:二維點(diǎn)云采集的基礎(chǔ)模型
進(jìn)一步可擴(kuò)展:
Wi-Fi 數(shù)據(jù)上傳,實(shí)現(xiàn) PC 端雷達(dá)動(dòng)態(tài)圖
使用多傳感器(紅外 + 超聲)融合
換用金屬舵機(jī)進(jìn)行 360° 連續(xù)掃描
替換 HC-SR04 為 ToF 傳感器提升精度
8. 結(jié)語(yǔ)
本文完成了對(duì)“基于 ESP32-S3 的微型雷達(dá)系統(tǒng)”的完整整理,包括硬件結(jié)構(gòu)、機(jī)械設(shè)計(jì)、電路連接、顯示邏輯以及參考代碼框架的深度解析。整個(gè)項(xiàng)目以極低的成本搭建起一個(gè)功能完整的掃描系統(tǒng),結(jié)構(gòu)清晰、易于擴(kuò)展,是嵌入式學(xué)習(xí)者與機(jī)器人愛(ài)好者的理想實(shí)踐案例。












評(píng)論