从零搭建Arduino智能小车:硬件选型、电路连接与避障编程全攻略
这次我们来看一个 Arduino 智能小车项目。对于很多电子爱好者、学生和创客来说,自己动手组装一台能跑、能避障、甚至能遥控的小车,是入门嵌入式开发和机器人控制最直观、也最有成就感的实践。这个项目不追求复杂的算法,重点在于硬件选型、电路搭建、代码烧录和功能验证的完整流程。无论你是参加工创赛、课程设计,还是个人兴趣学习,这篇文章都能提供一个清晰的路线图。
Arduino 智能小车的核心在于其模块化和易用性。你不需要从零设计 PCB,也不需要编写复杂的底层驱动,Arduino 生态提供了丰富的库和成熟的硬件模块。本文将从零开始,带你完成一台基础智能小车的组装与编程。我们会重点关注硬件清单的选购、电路连接的正确性、Arduino IDE 的环境配置、核心控制代码的编写,以及避障、巡线等基础功能的实现与调试。整个过程门槛不高,但能让你系统掌握从硬件到软件的全链路开发技能。
如果你关心的是:需要准备哪些零件?总成本大概多少?代码怎么写?遇到电机不转、传感器没反应怎么办?这篇文章可以直接参考。我们将以最通用的 Arduino Uno R3 作为主控板,搭配 L298N 电机驱动模块、超声波传感器等常见模块进行讲解。这些组件价格低廉、资料丰富,非常适合初学者。
1. 核心能力速览
在开始动手之前,我们先快速了解这个项目能实现什么,以及你需要准备什么。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 嵌入式硬件开发 / 机器人入门实践 |
| 核心功能 | 电机驱动(前进、后退、转向)、超声波避障、红外巡线、蓝牙/Wi-Fi 遥控(可选) |
| 主控平台 | Arduino Uno R3 (兼容 CH340 芯片版本) |
| 推荐硬件 | Arduino 主板、电机驱动模块、直流减速电机、超声波模块、红外传感器、小车底盘套件、电池 |
| 开发环境 | Arduino IDE (或 PlatformIO, Arduino Web Editor) |
| 编程语言 | C/C++ (Arduino 框架) |
| 关键技能 | 基础电路连接、Arduino 引脚控制、PWM 调速、串口通信、传感器数据读取 |
| 适合场景 | 创客教育、电子竞赛、课程设计、个人兴趣项目、机器人算法验证平台 |
这个项目的“显存占用”在这里就是你的物料成本和时间投入。整体花费通常在 100 至 300 元人民币之间,具体取决于所选传感器的多少和底盘质量。它的“一键启动”则是上电后,烧录好的程序自动运行。
2. 适用场景与使用边界
适合谁?
- 电子/自动化/计算机相关专业的学生:用于完成课程设计、毕业设计或备战“工创赛”等赛事。
- 创客与硬件爱好者:希望亲手打造一个可交互的智能硬件,学习传感器和执行器的控制。
- 中小学科技教师或家长:作为 STEM 教育的实践项目,培养孩子的动手能力和逻辑思维。
- 软件开发者:想了解硬件如何与软件交互,拓展物联网(IoT)开发技能。
能解决什么问题?
- 理论与实践结合:将编程逻辑转化为真实的物理运动。
- 传感器应用入门:学习如何使用超声波测距、红外反射等传感器感知环境。
- 控制系统搭建:理解开环与闭环控制的基本概念(如简单的巡线就是闭环)。
- 为复杂项目奠基:此小车平台可扩展为自动驾驶模型、物流搬运小车、环境监测机器人等。
不适合什么场景?
- 需要高精度定位或高速运算的场景:Arduino Uno 处理能力有限,内存小,不适合运行 SLAM 或复杂视觉算法(可考虑升级为 ESP32 或 Raspberry Pi)。
- 商业产品或需要长期稳定运行的工业环境:Arduino 开发板设计用于原型验证,在可靠性、防护等级上不如工业控制器。
- 完全零基础的纯软件人员:需要具备最基础的电路知识(如正负极、短路)和动手焊接/接线的意愿。
安全与合规边界:
- 电气安全:使用合适的电池(如 18650 锂电池组),避免短路。电机驱动模块可能发热,注意散热。
- 运动安全:小车在测试时可能突然启动,请确保在空旷、平整的桌面或地面进行,远离边缘。
- 版权与开源:Arduino 生态本身是开源的,项目中使用的库通常遵循开源协议。在分享或参赛时,注明所使用的库和参考来源是良好的实践。
3. 环境准备与前置条件
在购买零件前,我们先确保软件开发环境就绪。
1. 操作系统Windows 10/11, macOS, 或 Linux 发行版均可。本文以 Windows 环境为例进行说明。
2. 安装 Arduino IDE这是最官方的开发环境,集成了代码编辑、编译、上传和串口监视功能。
- 下载:访问 Arduino 官网,下载对应操作系统的安装包。
- 安装:运行安装程序,建议勾选“安装 USB 驱动”(这对于识别 CH340 等 USB 转串口芯片至关重要)。
- 验证安装:打开 Arduino IDE,在
文件->示例->01.Basics中打开Blink示例程序。如果能正常打开,说明 IDE 安装成功。
3. 准备 USB 数据线你需要一根USB-A 转 USB-B 方口线来连接电脑和 Arduino Uno 板。这是最常见的连接线。
4. 硬件清单采购建议以下是组装一台具备基础避障功能的小车所需的核心物料清单。你可以在各大电子元器件电商平台(如淘宝、京东、得捷电子等)搜索购买。
| 序号 | 组件名称 | 数量 | 关键说明 | 参考单价(元) |
|---|---|---|---|---|
| 1 | Arduino Uno R3 开发板 | 1 | 建议选 CH340 芯片版本,性价比高,驱动易安装。 | 20-30 |
| 2 | 智能小车底盘套件 | 1 | 包含底盘、2个或4个直流减速电机、轮子、万向轮/球、螺丝包。 | 40-80 |
| 3 | L298N 电机驱动模块 | 1 | 最常用的双路 H 桥驱动,可同时驱动两个直流电机。 | 10-15 |
| 4 | HC-SR04 超声波模块 | 1 | 用于测距避障。 | 5-8 |
| 5 | 18650 锂电池及电池盒 | 1套 | 建议使用 2节 18650 串联的电池盒(输出 7.4V),为电机驱动供电。 | 15-25 |
| 6 | 9V 电池或电池扣 | 1 | 为 Arduino 板单独供电(可选,也可从 L298N 取 5V)。 | 5-10 |
| 7 | 杜邦线 | 若干 | 公对公、公对母、母对母都需要,用于连接各模块。 | 10-20 |
| 8 | 面包板 | 1 | 用于扩展连接和测试,非必须但强烈推荐。 | 5-10 |
| 总计 | 约 110-200 |
注:若想增加巡线功能,还需购买TCRT5000 红外反射传感器模块(通常 3-5 元一个,一般需要 3-5 个)。若想增加蓝牙遥控,需购买HC-05 或 HC-06 蓝牙模块(约 15-25 元)。
4. 硬件组装与电路连接
这是最关键的一步,正确的连接是代码能正常控制硬件的前提。我们分步进行。
4.1 机械结构组装
- 根据你购买的小车底盘套件说明书,将直流减速电机安装到底盘上,并固定好轮子。
- 将万向轮或球轮安装到底盘前部或后部,确保小车能平稳保持三点或四点支撑。
- 使用螺丝或扎带,将 Arduino 板、L298N 模块、电池盒等初步固定到底盘上。注意布局,为后续连接杜邦线留出空间。
4.2 电源系统连接
电源连接错误是导致模块烧毁的最常见原因,请仔细核对。
- L298N 供电:将 2节 18650 电池盒的输出线(红正黑负)连接到 L298N 模块的
+12V和GND端子。注意:即使电池是 7.4V,也接在+12V口,这个端子实际是电机电源输入口。 - L298N 输出:将 L298N 模块的
+5V输出端子与 Arduino 的5V引脚用杜邦线连接,同时将两者的GND用杜邦线连接起来。这样,L298N 在给电机供电的同时,也能通过其稳压芯片给 Arduino 供电,无需额外的 9V 电池。这是最简洁的供电方案。 - 使能跳线帽:确保 L298N 模块上控制电机 A 和电机 B 的使能端
ENA和ENB插上了跳线帽(默认使能,全速)。后续调速时会拔掉,通过 Arduino 的 PWM 引脚控制。
4.3 电机与驱动连接
假设我们使用两个电机驱动后轮(差速转向)。
- 将左侧电机的两根线连接到 L298N 的
OUT1和OUT2。 - 将右侧电机的两根线连接到 L298N 的
OUT3和OUT4。 - 如果电机转向与预期相反,只需将这两根线对调即可。
4.4 控制信号连接
将 L298N 的控制引脚连接到 Arduino 的数字引脚。
| L298N 引脚 | Arduino 引脚 | 功能说明 |
|---|---|---|
ENA | 5(PWM) | 左侧电机使能/调速 |
IN1 | 4 | 控制左侧电机方向 |
IN2 | 7 | 控制左侧电机方向 |
ENB | 6(PWM) | 右侧电机使能/调速 |
IN3 | 8 | 控制右侧电机方向 |
IN4 | 9 | 控制右侧电机方向 |
连接方式:使用公对母杜邦线,一端插在 L298N 的排针上,另一端插在 Arduino 的对应插孔。
4.5 超声波传感器连接
将 HC-SR04 模块连接到 Arduino。
| HC-SR04 引脚 | Arduino 引脚 | 功能说明 |
|---|---|---|
VCC | 5V | 电源正极 |
Trig | 2 | 触发测距信号 |
Echo | 3 | 接收回波信号 |
GND | GND | 电源地 |
至此,硬件连接基本完成。上电前,请务必再次检查所有电源线(红正黑负)是否正确,特别是 Arduino 和 L298N 的5V和GND是否已连通。
5. 软件环境配置与驱动安装
硬件连接好后,我们需要让电脑识别 Arduino 板。
- 连接 USB 线:用 USB 线将 Arduino Uno 与电脑连接。
- 安装 CH340 驱动(如果需要):如果你的 Arduino 是 CH340 芯片版本,Windows 系统可能需要手动安装驱动。
- 可以在 Arduino IDE 安装目录下的
drivers文件夹里找到,或者从网络搜索“CH340 驱动”下载安装。 - 安装后,在 Windows 设备管理器的“端口 (COM 和 LPT)”下,应该能看到类似“USB-SERIAL CH340 (COM3)”的设备,记住后面的 COM 端口号(如 COM3)。
- 可以在 Arduino IDE 安装目录下的
- 配置 Arduino IDE:
- 打开 Arduino IDE。
- 点击
工具->开发板,选择Arduino Uno。 - 点击
工具->端口,选择刚才在设备管理器中看到的 COM 端口(如 COM3)。
6. 基础功能代码编写与测试
不要急于编写完整的避障程序。我们先分模块测试,确保每个部分都工作正常。
6.1 测试电机驱动
上传以下代码,测试小车是否能基本前进、后退、左转、右转。
// 引脚定义 const int ENA = 5; const int IN1 = 4; const int IN2 = 7; const int ENB = 6; const int IN3 = 8; const int IN4 = 9; void setup() { // 设置所有控制引脚为输出模式 pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); // 初始化串口,用于调试 Serial.begin(9600); Serial.println("Motor Test Start!"); } // 电机控制函数 void setMotor(int motor, int speed, int direction) { // motor: 0 左电机,1 右电机 // speed: 0-255, PWM调速值 // direction: 0 停止,1 前进,-1 后退 int in1, in2, en; if (motor == 0) { // 左电机 in1 = IN1; in2 = IN2; en = ENA; } else { // 右电机 in1 = IN3; in2 = IN4; en = ENB; } if (direction == 0) { // 停止 digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(en, 0); } else if (direction == 1) { // 前进 digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(en, speed); } else if (direction == -1) { // 后退 digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(en, speed); } } void loop() { Serial.println("Forward 2s"); setMotor(0, 200, 1); // 左电机前进,速度200 setMotor(1, 200, 1); // 右电机前进,速度200 delay(2000); Serial.println("Backward 2s"); setMotor(0, 200, -1); setMotor(1, 200, -1); delay(2000); Serial.println("Turn Left 1s"); setMotor(0, 150, -1); // 左电机后退 setMotor(1, 150, 1); // 右电机前进 delay(1000); Serial.println("Turn Right 1s"); setMotor(0, 150, 1); // 左电机前进 setMotor(1, 150, -1); // 右电机后退 delay(1000); Serial.println("Stop 1s"); setMotor(0, 0, 0); setMotor(1, 0, 0); delay(1000); }操作与验证:
- 将代码复制到 Arduino IDE 中。
- 点击
上传按钮(向右的箭头)。 - 上传成功后,小车应该会按照“前进2秒 -> 后退2秒 -> 左转1秒 -> 右转1秒 -> 停止1秒”的循环动作。
- 如果电机不转:
- 检查电源是否接通(L298N 和 Arduino 的电源指示灯是否亮)。
- 检查杜邦线是否插紧,特别是控制引脚。
- 检查代码中的引脚定义是否与实际连接一致。
- 尝试调换电机的两根线,可能电机极性接反。
- 用万用表测量 L298N 的电机输出端是否有电压变化。
6.2 测试超声波传感器
单独测试超声波测距是否准确。
const int trigPin = 2; const int echoPin = 3; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // 发送一个10us的高电平脉冲触发测距 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 读取回波高电平持续时间(单位:微秒) long duration = pulseIn(echoPin, HIGH); // 计算距离(声速340m/s,除以2因为是往返距离) // 距离 = (持续时间 * 0.034) / 2 = 持续时间 * 0.017 (厘米) int distance = duration * 0.017; Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); delay(500); // 每500ms测一次 }操作与验证:
- 上传此代码。
- 打开 Arduino IDE 的
工具->串口监视器,设置波特率为 9600。 - 在超声波传感器前方放置障碍物(如书本),移动障碍物,观察串口监视器输出的距离值是否随之变化。有效测距范围通常在 2cm 到 400cm 左右。
- 如果一直输出0或超大值:
- 检查 VCC 和 GND 是否接反或接错。
- 检查 Trig 和 Echo 引脚是否与代码定义一致。
- 尝试给
VCC和GND之间并联一个 10uF 的电容,以稳定电源。
7. 核心功能集成:自动避障小车
将电机控制和超声波测距结合起来,实现一个简单的自动避障逻辑:前进,遇到障碍物(距离小于设定阈值)则后退并随机转向。
// 引脚定义 (与之前相同) const int ENA = 5; const int IN1 = 4; const int IN2 = 7; const int ENB = 6; const int IN3 = 8; const int IN4 = 9; const int trigPin = 2; const int echoPin = 3; // 避障阈值(厘米) const int OBSTACLE_DISTANCE = 20; // 电机速度 const int MOTOR_SPEED = 180; const int TURN_SPEED = 150; void setup() { pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); randomSeed(analogRead(0)); // 初始化随机数种子 } // 测距函数 int getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); return duration * 0.017; } // 电机控制函数 (与之前相同,略作简化) void motorControl(int leftSpeed, int leftDir, int rightSpeed, int rightDir) { // 左电机 digitalWrite(IN1, leftDir == 1 ? HIGH : LOW); digitalWrite(IN2, leftDir == -1 ? HIGH : LOW); analogWrite(ENA, leftSpeed); // 右电机 digitalWrite(IN3, rightDir == 1 ? HIGH : LOW); digitalWrite(IN4, rightDir == -1 ? HIGH : LOW); analogWrite(ENB, rightSpeed); } void loop() { int distance = getDistance(); Serial.print("Distance: "); Serial.println(distance); if (distance > OBSTACLE_DISTANCE && distance < 100) { // 前方无障碍,且在有效范围内 // 前进 motorControl(MOTOR_SPEED, 1, MOTOR_SPEED, 1); Serial.println("Moving Forward"); } else { // 遇到障碍,先停止 motorControl(0, 0, 0, 0); delay(200); // 后退一小段 motorControl(MOTOR_SPEED, -1, MOTOR_SPEED, -1); Serial.println("Moving Backward"); delay(500); // 随机左转或右转 motorControl(0, 0, 0, 0); delay(200); if (random(2) == 0) { // 随机数0或1 // 左转 motorControl(TURN_SPEED, -1, TURN_SPEED, 1); Serial.println("Turning Left"); } else { // 右转 motorControl(TURN_SPEED, 1, TURN_SPEED, -1); Serial.println("Turning Right"); } delay(random(300, 700)); // 随机转向时间 } delay(100); // 主循环延迟 }功能验证:
- 上传此代码。
- 将小车放在空旷地面,上电。
- 观察小车行为:正常情况下应向前直行。
- 用手或书本在小车前方约 20cm 内模拟障碍物。
- 小车应能检测到障碍物,先后退再随机转向,然后继续前进。
- 通过串口监视器可以实时查看距离数据和当前状态。
8. 功能扩展与进阶思路
基础避障实现后,你可以在此基础上增加更多功能。
8.1 增加红外巡线功能
巡线是智能小车比赛的经典项目。你需要购买 3-5 个 TCRT5000 红外传感器,并排安装在小车底部。
- 连接:每个传感器的
VCC接5V,GND接GND,DO(数字输出)接 Arduino 的数字引脚(如10,11,12)。 - 原理:传感器发射红外光,接收反射光。黑线吸收红外光,反射弱,输出高电平;白底反射红外光,反射强,输出低电平。
- 逻辑:读取所有传感器的状态,判断黑线相对于小车中心的位置,从而调整左右电机速度,实现 PID 或简单比例控制,使小车沿黑线行驶。
8.2 增加蓝牙遥控功能
通过手机 APP 控制小车。
- 硬件:添加 HC-05 或 HC-06 蓝牙模块。
- 连接:蓝牙模块的
VCC接5V,GND接GND,TXD接 Arduino 的RX(引脚 0),RXD接 Arduino 的TX(引脚 1)。注意:烧录程序时需断开RX/TX连接,否则可能冲突。 - 代码:编写程序,通过
Serial读取手机 APP 发送的指令(如 ‘F’, ‘B’, ‘L’, ‘R’, ‘S’ 分别代表前、后、左、右、停),并控制电机动作。
8.3 升级主控平台
如果觉得 Arduino Uno 性能或接口不够用,可以考虑:
- ESP32:自带 Wi-Fi 和蓝牙,性能更强,引脚更多,适合做物联网小车或需要无线图传的项目。在 Arduino IDE 中通过开发板管理器安装 ESP32 支持即可开发。
- STM32:性能强大,资源丰富,但开发环境(如 Keil, STM32CubeIDE)和库生态相对复杂,适合有一定基础后进阶学习。
9. 常见问题与排查方法
在组装和调试过程中,你可能会遇到以下问题:
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Arduino IDE 无法上传程序 | 1. 端口选择错误 2. CH340 驱动未安装 3. 开发板类型选错 4. 其他程序占用了串口 | 1. 检查设备管理器端口号 2. 检查驱动安装 3. 关闭串口监视器或其他串口工具 | 1. 重新选择正确的 COM 端口 2. 安装 CH340 驱动 3. 选择 Arduino Uno4. 关闭所有可能占用端口的软件 |
| 电机完全不转 | 1. 电源未接通或电压不足 2. L298N 使能跳线帽未插或使能引脚未置高 3. 电机线未接牢或接错 4. 程序未上传成功 | 1. 检查电池电量,测量 L298N 输入电压 2. 检查 ENA/ENB跳线帽或代码中 PWM 输出3. 重新插拔电机线,调换极性测试 4. 上传一个简单的 Blink程序测试 Arduino | 1. 充电或更换电池 2. 插上跳线帽或检查 analogWrite函数3. 确保连接牢固,尝试对调电机线 4. 确保上传时无错误,板载 LED (13号引脚) 应闪烁 |
| 电机只朝一个方向转 | 1. 控制电机方向的两个引脚(IN1/IN2, IN3/IN4)逻辑设置错误 2. 其中一个方向控制引脚接触不良 | 1. 检查代码中digitalWrite设置高低电平的逻辑2. 检查杜邦线连接 | 1. 修正代码逻辑:前进时 (HIGH, LOW),后退时 (LOW, HIGH) 2. 重新插拔或更换杜邦线 |
| 超声波传感器读数始终为 0 或异常大 | 1. 电源接反或接触不良 2. Trig 和 Echo 引脚接错或接触不良 3. 测量对象不适合(如透明、吸音材料) 4. 传感器本身故障 | 1. 检查 VCC 和 GND 2. 检查 Trig 和 Echo 连接 3. 换用书本等物体测试 4. 更换传感器测试 | 1. 确保电源正确 2. 确保引脚连接正确且牢固 3. 使用合适的障碍物 4. 更换传感器 |
| 小车行为不稳定(抽搐、跑偏) | 1. 电池电量不足导致供电不稳 2. 机械结构松动,轮子打滑 3. 地面不平或有坡度 4. 两个电机性能有差异(转速不同) | 1. 测量电池电压 2. 检查所有螺丝和轮子紧固情况 3. 在平整地面测试 4. 分别测试两个电机空载转速 | 1. 给电池充电 2. 紧固所有机械部件 3. 选择平整地面 4. 在代码中为两个电机设置略微不同的 PWM 值进行校准 |
| 增加模块后系统不稳定 | 1. 总功耗超过电源负载能力 2. 杜邦线接触电阻过大或线序混乱 3. 引脚冲突或代码逻辑错误 | 1. 测量总电流,检查电池和 L298N 是否发烫 2. 逐一排查新模块的连接 3. 检查引脚定义是否重复 | 1. 使用容量更大的电池或分开供电 2. 使用质量好的杜邦线,理清线序 3. 重新规划引脚,避免冲突 |
10. 最佳实践与项目建议
- 分步测试,循序渐进:不要一次性连接所有模块并编写复杂代码。务必遵循“电源 -> 电机 -> 单个传感器 -> 集成逻辑”的顺序进行测试,每步成功后再进行下一步。
- 善用串口调试:
Serial.print()是你的好朋友。将关键变量(如传感器读数、电机状态)打印到串口监视器,是定位问题最有效的方法。 - 代码模块化:将电机控制、传感器读数等功能封装成函数,如本文中的
setMotor()和getDistance()。这使主循环逻辑清晰,易于维护和调试。 - 电源管理:电机启动瞬间电流很大,可能引起 Arduino 复位。确保电机电源(接 L298N)和控制电源(给 Arduino)之间共地。如果问题严重,可以考虑使用大电容并联在电机电源两端缓冲,或使用独立的电源为 Arduino 供电。
- 扩展时注意引脚资源:Arduino Uno 的模拟引脚(A0-A5)也可以作为数字引脚使用。提前规划好各模块所需引脚,制作一个引脚分配表。
- 版本管理与备份:使用 GitHub 或本地文件夹管理你的代码版本。每次重大修改前备份旧代码。
- 参与社区:遇到棘手问题,可以在 Arduino 中文社区、CSDN、知乎等平台搜索或提问。很多坑别人已经踩过,善于利用现有资源能极大提高效率。
从零组装一台 Arduino 智能小车,最大的收获不是小车本身,而是解决问题的完整流程:定义需求、选型采购、硬件连接、环境配置、分步调试、集成测试、功能扩展。这个过程中遇到的每一个“为什么不动”的疑问,和最终解决后看到的“动起来了”的喜悦,正是硬件开发的魅力所在。建议你先基于本文完成基础避障小车,确保所有环节都跑通。之后,无论是增加巡线、蓝牙遥控,还是尝试用 ESP32 做 Web 控制,都有了坚实的起点。项目的所有代码和连接图都已在文中给出,你可以直接复制使用,并根据自己的硬件情况进行微调。
