Arduino UNO+L298N+HC-SR04:手把手教你组装第一台能自己躲猫猫的智能小车(附完整代码)

张开发
2026/4/16 8:54:33 15 分钟阅读

分享文章

Arduino UNO+L298N+HC-SR04:手把手教你组装第一台能自己躲猫猫的智能小车(附完整代码)
Arduino UNOL298NHC-SR04从零打造智能避障小车的完整实战指南当你第一次看到这个小车灵活地避开障碍物时那种成就感简直无法形容。作为一个从零开始接触硬件的创客我清楚地记得自己第一次成功让小车自动避障时的兴奋。本文将带你完整复现这个过程从硬件选购到代码调试甚至包括那些教程里很少提到的坑。1. 硬件准备与选购避坑指南在开始组装之前选择合适的硬件至关重要。市面上Arduino兼容板种类繁多对于初学者来说原厂Arduino UNO R3是最稳妥的选择。它稳定性好社区支持完善遇到问题容易找到解决方案。1.1 核心部件清单以下是必须的硬件组件控制核心Arduino UNO R3开发板电机驱动L298N双H桥直流电机驱动模块测距传感器HC-SR04超声波模块执行机构直流减速电机×2配轮子SG90微型舵机用于旋转超声波模块电源系统18650锂电池×2带电池盒5V稳压模块为Arduino供电结构件亚克力小车底盘万向轮作为前轮杜邦线公对公、公对母各20根提示购买电机时务必确认是减速电机普通直流电机转速太快不适合小车使用。1.2 容易被忽视的配件很多教程不会告诉你这些但它们能极大提升体验电源开关直接切断电池供电的拨动开关排针排母方便模块间的连接尼龙扎带整理线材的神器热熔胶枪固定传感器的利器我曾因为没准备热熔胶超声波模块在测试时不断脱落调试过程苦不堪言。2. 硬件连接详解与常见错误连接硬件看似简单但这里往往是新手最容易出错的地方。下面这张表格清晰地展示了各模块的连接方式模块Arduino引脚连接说明L298N ENAD6右电机PWM调速L298N IN1D7右电机方向1L298N IN2D8右电机方向2L298N ENBD5左电机PWM调速L298N IN3D12左电机方向1L298N IN4D13左电机方向2HC-SR04 TrigD2超声波触发HC-SR04 EchoD4超声波回波SG90信号线D3舵机控制最容易出错的三个地方电源接反L298N模块的12V和5V接口很容易混淆PWM冲突舵机使用的D9/D10引脚会影响其他PWM输出接地不共地所有模块的GND必须连接在一起我第一次组装时因为没共地超声波模块一直返回错误数据调试了整整一个下午。3. 代码深度解析与调参技巧下面这段代码是避障小车的核心逻辑我们逐段分析// 电机速度校准 const int speedA 80; // 右电机 const int speedB 93; // 左电机 void loop() { float frontDist getDistance(); if(frontDist 25) { stopMotors(); float rightDist scanDirection(45); // 右转扫描 float leftDist scanDirection(135); // 左转扫描 if(rightDist 25 leftDist 25) { // 三面都有障碍先后退再右转 moveBackward(250); turnRight(250); } else if(rightDist leftDist) { turnRight(250); } else { turnLeft(250); } } else { moveForward(); } }3.1 电机校准实战由于电机个体差异即使相同型号的电机转速也会有差别。校准方法将小车放在直线跑道上设置相同PWM值让小车直行观察偏向方向调整较慢一侧电机的PWM值重复测试直到能直线行驶我的小车最初右电机比左电机快约15%经过多次测试最终确定speedA80speedB93的组合最理想。3.2 超声波测距优化原始HC-SR04代码存在两个问题没有超时处理可能卡死在pulseIn函数多次测量取平均值会更稳定改进后的测距函数float getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 添加50000μs超时(约8.5米) long duration pulseIn(echoPin, HIGH, 50000); if(duration 0) return 999; // 超时返回大数 return duration * 0.017; // cm }4. 调试技巧与故障排除即使按照教程一步步来你的第一个小车很可能不会完美运行。下面是我总结的常见问题及解决方法4.1 电机不转或反转可能原因电机线接反PWM信号未使能电源供电不足解决方法交换电机两根线测试检查ENA/ENB跳线帽是否移除用万用表测量电池电压4.2 超声波数据异常典型表现返回固定值0或超大数数值波动剧烈排查步骤检查Trig和Echo线是否接反确认所有GND已共地在传感器VCC和GND间并联100μF电容4.3 舵机干扰电机这是最棘手的问题之一表现为舵机转动时电机抽搐PWM控制异常根本原因 Arduino的PWM引脚9,10与舵机库存在资源冲突解决方案将舵机接在非9,10的PWM引脚如D3修改Servo库的源码使用软PWM库控制电机5. 进阶优化与扩展思路当你的基础版小车能稳定运行时可以考虑以下增强功能5.1 增加蓝牙遥控添加HC-05蓝牙模块实现手机控制#include SoftwareSerial.h SoftwareSerial BT(10, 11); // RX, TX void setup() { BT.begin(9600); } void loop() { if(BT.available()) { char cmd BT.read(); switch(cmd) { case F: moveForward(); break; case B: moveBackward(); break; // 其他指令... } } }5.2 多传感器融合结合红外传感器提高检测精度传感器类型优点缺点超声波测距准反应慢红外响应快受环境影响大5.3 电源管理优化使用TP4056充电模块升压模块的方案两节18650并联通过TP4056充电升压至7.4V供电机降压至5V供Arduino这种方案比直接使用两节电池串联更安全续航时间也更长。

更多文章