news 2026/4/22 15:55:46

Arduino小车入门必看:零基础搭建第一个智能小车

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Arduino小车入门必看:零基础搭建第一个智能小车

从零开始造一辆会“躲障碍”的小车:Arduino新手实战全记录

你有没有想过,自己动手做一个能自动避开墙角、不会撞翻花瓶的小车?听起来像科幻电影里的场景,其实用一块十几块钱的开发板就能搞定。

今天我们就来干一件“硬核小事”——从零搭建一台基础智能小车。不需要任何电子基础,只要你会插线、会复制代码,就能让它跑起来。整个过程就像搭乐高+写小程序,但背后藏着机器人控制的核心逻辑。

这不仅是炫技玩具,更是理解“感知-决策-执行”闭环系统的最佳入口。电机怎么转?传感器怎么测距?程序如何让机器“动脑筋”?我们一步步拆解,把每个模块讲透。


主控大脑:为什么选 Arduino Uno?

所有智能设备都有个“指挥中心”,对小车来说就是Arduino Uno。它不是什么神秘芯片,而是一块开源的微控制器板子,有点像迷你版计算机主板,专为快速原型设计打造。

它到底强在哪?

  • 上手极快:插上USB线,装个免费IDE(集成开发环境),点一下“上传”,代码就进去了,不用烧录器、也不用焊电路。
  • 接口够用:14个数字口、6个模拟口,其中D3/D5/D6/D9/D10/D11支持PWM输出——这意味着你可以轻松实现调光、调速。
  • 生态成熟:全球几百万开发者在用,遇到问题搜一句“Arduino XXX 不工作”,几乎都能找到答案。
  • 语言友好:虽然底层是C/C++,但封装得特别简单,连小学生都能写出第一个“点亮LED”程序。

别看它小,功能完整:ATmega328P 芯片、16MHz晶振、稳压电路、串口通信一应俱全。最关键的是——它不挑电源,7–12V直流电随便接,还能通过USB供电调试。

✅ 实战提示:初学者建议用9V电池盒(6节AA)或7.4V锂电池给整车供电,既能驱动电机又不会烧板子。

先练基本功:让板载LED闪起来

每个 Arduino 都自带一个连接到D13的LED灯。我们先写段最简单的代码验证系统是否正常:

void setup() { pinMode(13, OUTPUT); // 设置D13为输出模式 } void loop() { digitalWrite(13, HIGH); // 点亮 delay(1000); digitalWrite(13, LOW); // 熄灭 delay(1000); }

这段代码叫“Blink”,堪称嵌入式界的“Hello World”。运行后你会看到小灯一秒一闪,说明你的开发环境和硬件都没问题——恭喜,第一步成功了!


动力心脏:L298N 驱动两个轮子一起跑

有了大脑,还得有手脚。小车靠轮子前进,轮子靠电机转动,但 Arduino 输出电流太弱,直接带不动电机。这时候就需要一个“放大器”——L298N 电机驱动模块

它是怎么让电机听话的?

L298N 的核心是双H桥电路,你可以把它想象成一个“电流方向开关”。通过控制四个开关的不同组合,能让电流正向流过电机(正转)、反向流过(反转),或者切断(停止)。

更厉害的是,它支持PWM调速。所谓PWM,就是快速通断电源来调节平均电压。比如占空比50%,相当于一半时间通电一半时间断电,电机就以半速运行。

关键引脚说明:
引脚名用途
IN1/IN2控制电机A转向(高低电平决定方向)
ENA使能端,接PWM引脚实现调速
IN3/IN4控制电机B
ENB电机B调速
VCC/GND接5V逻辑电源(通常来自Arduino)
+12V/GND接电机电源(7–12V)

⚠️ 注意:如果使用外部电源供电机,必须将 L298N 和 Arduino 的 GND 连在一起,否则信号不通!

写段代码试试看

下面这段程序控制一个电机完成“前进→暂停→后退”循环:

int enA = 9; // PWM调速 int in1 = 8; int in2 = 7; void setup() { pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); } void loop() { // 正转(前进) digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, 200); // 速度约80% delay(2000); // 停止 digitalWrite(in1, LOW); digitalWrite(in2, LOW); delay(1000); // 反转(倒车) digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, 150); delay(2000); }

你会发现电机真的按指令动起来了!这就是自动化控制的雏形:程序发令 → 模块执行 → 机械响应


行走之腿:直流减速电机,力气大还稳当

普通电机转得快但扭力小,根本推不动小车。所以我们用的是直流减速电机——在电机后面加了个齿轮箱,牺牲一点转速,换来好几倍的扭矩。

常见参数如 120rpm@6V,意思是每分钟转120圈,在6伏电压下可输出几百克·厘米的扭矩,足够带动1公斤左右的小车爬坡。

这类电机只有两根线,不分正负极,但接反了会反转。实际应用中通常左右各装一个,形成差速驱动结构:左轮停右轮转,小车就原地右拐;两边同速前进,直线行驶。

🔧 小贴士:初次测试时用手托住小车底盘,避免突然启动冲出去摔坏齿轮。


眼睛上线:HC-SR04 超声波避障,让小车学会“看路”

到现在为止,小车只会傻乎乎往前冲。要想智能化,必须加上感知能力。最实用也最便宜的方案就是HC-SR04 超声波传感器

它的工作原理很简单:发出一串40kHz声波,碰到物体反弹回来,模块根据发射和接收的时间差算出距离。

公式如下:
$$
\text{距离(cm)} = \frac{\text{高电平持续时间(μs)} \times 0.034}{2}
$$

为什么除以2?因为声音走了“去程+回程”两段路。

接线与读数

  • Trig 引脚:给一个10微秒的高电平触发测量
  • Echo 引脚:返回一个高电平脉冲,长度对应距离
  • 使用pulseIn(echoPin, HIGH)函数读取这个时间

示例代码:

const int trigPin = 2; const int echoPin = 3; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); } void loop() { long duration, distance; // 发送触发信号 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 读取回响时间 duration = pulseIn(echoPin, HIGH); distance = (duration * 0.034) / 2; Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); delay(100); }

打开串口监视器(Ctrl+Shift+M),你会看到实时更新的距离值。当前方放一本书,数值立刻变小——小车“看见”了障碍物。


把所有零件串起来:构建完整的智能小车系统

现在我们把前面四个模块组装成一个真正的闭环控制系统:

硬件连接清单

模块连接到 Arduino
L298N IN1D8
L298N IN2D7
L298N IN3D5
L298N IN4D4
L298N ENAD9(PWM)
L298N ENBD3(PWM)
HC-SR04 TrigD2
HC-SR04 EchoD3
所有GND共地连接

💡 提醒:电机电源最好独立供电(如锂电池),避免大电流拉低电压导致Arduino重启。

底盘结构推荐

  • 材料:亚克力或塑料底盘(淘宝几十元可购套件)
  • 轮子:两个驱动轮(接电机)+ 一个万向轮(支撑尾部)
  • 布局:超声波居中前置,视野无遮挡

让它真正“智能”起来:加入避障逻辑

最后一步,融合所有功能,写一个自动避障程序:

// 电机控制引脚 int enA = 9, in1 = 8, in2 = 7; // 左电机 int enB = 3, in3 = 5, in4 = 4; // 右电机 // 超声波引脚 int trigPin = 2, echoPin = 6; 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); } void loop() { long duration, distance = measureDistance(); if (distance > 20) { forward(); // 前进 } else { stopMotors(); delay(500); turnRight(); // 距离太近,右转1秒 delay(1000); } delay(100); } long measureDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH); return (duration * 0.034) / 2; } void forward() { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enA, 200); analogWrite(enB, 200); } void turnRight() { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enA, 200); analogWrite(enB, 150); // 右轮慢一点,转弯更稳 } void stopMotors() { digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }

烧录进去后,小车就会边走边测距。一旦前方障碍小于20厘米,立即停下并右转,绕开障碍继续前行——一个初级自动驾驶系统诞生了!


新手常踩的坑 & 解决方案

❌ 电机不转?

  • 检查 L298N 上的使能跳帽是否插上(ENA/ENB)
  • 确认电机电源已接入且电压足够
  • 查看 INx 引脚是否接错顺序

🌀 小车跑偏?

  • 两侧电机PWM值不同,手动微调使速度一致
  • 检查轮胎是否有打滑、轴是否弯曲
  • 尝试降低整体速度,提高稳定性

📏 超声波数据跳动大?

  • 避免对着吸音材料(如窗帘、毛绒玩具)
  • 多次采样取平均值:
long avg = 0; for(int i=0; i<5; i++) { avg += measureDistance(); delay(10); } distance = avg / 5;

🔌 Arduino 总是重启?

  • 电机启动瞬间耗电过大,造成电压跌落
  • 解决方案:电机和主控使用独立电源,仅共地

后续还能怎么玩?

这台基础小车只是起点。接下来你可以轻松升级:

  • 加红外传感器 → 实现自动循迹
  • 接蓝牙模块(HC-05)→ 手机遥控
  • 换编码电机 + PID算法 → 更精准的速度控制
  • 加陀螺仪(MPU6050)→ 平衡车项目
  • 换ESP32主控 → 支持WiFi联网、远程监控

每一次扩展,都是对新知识的实践。而这一切,都始于你亲手点亮的第一行代码和第一声电机嗡鸣。


现在,拿起你的 Arduino,把线插上,打开 IDE,按下上传按钮。
当那两个轮子第一次按照你的意志转动时,你会明白:
原来创造智能,并没有那么遥远。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:38:34

Capacitor Plugins扩展IndexTTS2移动设备功能

Capacitor Plugins扩展IndexTTS2移动设备功能 在一台普通安卓手机上运行一个基于深度学习的中文语音合成大模型——这听起来像是科幻小说的情节&#xff0c;但随着边缘计算能力的提升和框架工具链的成熟&#xff0c;它正逐渐成为现实。设想这样一个场景&#xff1a;一位视障用…

作者头像 李华
网站建设 2026/4/16 14:20:22

BorgBackup去重压缩保存IndexTTS2历史版本资料

BorgBackup去重压缩保存IndexTTS2历史版本资料 在AI语音合成技术飞速演进的今天&#xff0c;模型迭代的速度早已超越了传统软件更新的节奏。以开源中文情感化TTS系统IndexTTS2为例&#xff0c;其V23版本在语调自然度和情绪控制精度上的提升令人印象深刻——但随之而来的&#x…

作者头像 李华
网站建设 2026/4/23 11:36:05

如何用IndexTTS2为小程序或APP集成本地语音合成功能

如何用IndexTTS2为小程序或APP集成本地语音合成功能 在移动应用和小程序开发中&#xff0c;语音播报功能正从“锦上添花”变为“用户体验刚需”。无论是教育类APP的课文朗读、智能家居设备的状态提示&#xff0c;还是无障碍辅助阅读&#xff0c;用户对自然流畅、低延迟的语音输…

作者头像 李华
网站建设 2026/4/23 11:38:47

GitLab CI共享Runner执行IndexTTS2单元测试

GitLab CI共享Runner执行IndexTTS2单元测试 在AI语音合成技术快速演进的今天&#xff0c;文本到语音&#xff08;TTS&#xff09;系统已深度融入智能助手、有声内容生成和客服自动化等场景。随着模型复杂度提升&#xff0c;如何保障代码质量与发布稳定性&#xff0c;成为研发团…

作者头像 李华
网站建设 2026/4/19 7:15:13

Chocolatey包管理器一键安装Windows版IndexTTS2

Chocolatey包管理器一键安装Windows版IndexTTS2 在内容创作日益视频化的今天&#xff0c;越来越多的用户开始尝试为短视频、播客、课件添加语音旁白。然而&#xff0c;大多数云端语音合成服务要么费用高昂&#xff0c;要么缺乏情感表达能力——机械的“机器人音”难以打动听众…

作者头像 李华
网站建设 2026/4/23 10:46:25

提升iverilog仿真效率的五个技巧:实用操作指南

提升 iVerilog 仿真效率的五个实战技巧&#xff1a;从代码到流程的全面优化你有没有遇到过这种情况——改完一行代码&#xff0c;想跑个仿真验证一下&#xff0c;结果iverilog编译十几秒、运行几十秒&#xff0c;波形文件还动辄几个GB&#xff1f;明明设计不算复杂&#xff0c;…

作者头像 李华