舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
项目概述
本项目详细介绍如何使用 Arduino UNO、SG90 微型舵机、HC-SR04 超声波传感器、2WD 机器人底盘套件及 Arduino Motor Shield Rev3 构建一款自主避障机器人。机器人通过舵机旋转超声波传感器扫描周围环境,实时测量障碍物距离,并根据预设阈值自动调整行驶路径,实现智能避障功能。
所需组件与物料
- Arduino UNO × 1
- SG90 微型舵机 × 1
- HC-SR04 超声波传感器 × 1
- 2WD 机器人底盘套件(含底盘、两个直流电机、车轮、万向轮、电池盒、开关、螺丝)× 1
- 杜邦线(公对公、公对母、母对母)若干
- Arduino Motor Shield Rev3 × 1
所需工具
- 电烙铁及焊锡
软件与在线服务
- Arduino IDE
- AFMotor 库(电机驱动库)
- NewPing 库(超声波传感器库)
制作步骤
步骤 1:组装机器人底盘
按照底盘套件说明书组装底盘,安装两个直流电机、车轮、万向轮、电池盒和开关。确保机械结构稳固,轮子转动顺畅。
步骤 2:测试核心组件
在焊接前,分别测试 Arduino UNO、Motor Shield、两个直流电机、SG90 舵机和 HC-SR04 超声波传感器,确保所有元件工作正常。然后为两个直流电机焊接红黑导线(红接正极,黑接负极)。
步骤 3:制作电池开关电路
剪断电池盒黑色导线中段,分别焊接到拨动开关的两个引脚上,红色导线直接引出。这样即可通过开关控制整车供电。
步骤 4:堆叠 Arduino 与 Motor Shield
将 Motor Shield 直接插在 Arduino UNO 顶部,引脚对齐后按下固定。注意不要弯曲引脚。
步骤 5:连接电机至 Motor Shield
Motor Shield 的 M1 接口接左电机,M3 接口接右电机。如果电机原装导线过短,需使用杜邦线延长:剥去杜邦线一端绝缘层露出铜芯,与电机导线焊接并绝缘处理。
步骤 6:连接电池开关至 Motor Shield
将电池盒红色导线接到 Motor Shield 的 "VIN" 接口,黑色导线(经开关后)接到 "GND" 接口。建议使用 7.4V~12V 电池组(如 2 节 18650 锂电池串联)。
步骤 7:准备传感器与舵机连接线
准备 4 组同色公母杜邦线(各剪半),分别对应:白色→5V、黑色→GND、棕色→A4 (Echo)、橙色→A5 (Trig)。公头焊接到 Motor Shield 对应引脚,母头用于连接超声波模块。舵机信号线接 Motor Shield 的 "Servo_2" 接口(对应 Arduino D10)。
步骤 8:安装超声波传感器与舵机
将超声波传感器固定在舵机摇臂上(可用热熔胶或双面胶),舵机本体固定在底盘前部。连接线序:VCC→白色母头、GND→黑色母头、Echo→棕色母头、Trig→橙色母头。
步骤 9:固定电路板
使用双面胶或热熔胶将 Arduino+Motor Shield 堆叠板固定在底盘上,理顺所有线材,避免干扰轮子转动。
核心代码逻辑
程序使用三个库:AFMotor.h 控制直流电机,Servo.h 控制舵机,NewPing.h 驱动超声波测距。核心流程如下:
- 初始化:舵机归中 (90°),电机停止,延时 2 秒稳定。
- 路径扫描:舵机从 144° 以 18° 步长扫描至 36°,每步调用
readPing()获取距离。 - 避障决策:
- 若距离 < COLL_DIST (20cm):后退 500ms 停止,调用
setCourse()根据最大距离角度决定左转或右转。 - 若距离 < TURN_DIST (30cm):调用
changePath()微调方向。 - 记录左、前、右三个方向最大距离及对应角度。
- 若距离 < COLL_DIST (20cm):后退 500ms 停止,调用
- 运动控制:
moveForward()渐进加速至 MAX_SPEED (150);turnLeft()/turnRight()差速转向 400ms 后恢复前进。
关键参数定义
| 常量 | 值 | 说明 |
|---|---|---|
| TRIG_PIN | A5 | 超声波 Trig 引脚 |
| ECHO_PIN | A4 | 超声波 Echo 引脚 |
| MAX_DISTANCE_POSSIBLE | 1000 | 最大测距范围 (cm) |
| MAX_SPEED | 150 | 电机最大 PWM 速度 (0-255) |
| COLL_DIST | 20 | 触发避障的临界距离 (cm) |
| TURN_DIST | 30 | 触发微调转向的距离 (cm) |
接线原理图
原理图展示了 Arduino UNO、Motor Shield、两路直流电机、舵机、超声波传感器、电池盒与开关的完整连接关系。重点注意:Motor Shield 通过 ICSP 接口从 Arduino 取电,电机独立由外部电池供电,舵机由 Motor Shield 板载稳压器供电。
调试与优化建议
- 若机器人转向不灵敏,可调大
MAX_SPEED或减小转向延时。 - 超声波测距受环境温度影响,可在
readPing()中加入温度补偿公式。 - 舵机扫描角度范围可根据实际安装位置微调(如 30°~150°)。
- 建议在底盘前端加装防撞条,保护超声波模块。
项目总结
本项目完整演示了从机械组装、电路焊接、代码编写到调试运行的全过程,适合 Arduino 入门者理解传感器融合、电机驱动、状态机编程等核心概念。通过扩展可加入蓝牙遥控、路径规划、SLAM 建图等进阶功能。
制造工艺
- Simple Pi Robot:用树莓派打造 2WD 自主巡航车
- Arduino UNO 自制循迹小车:从零构建自主巡线机器人
- Arduino + Android 蓝牙控制 Roomba Create 2 扫地机器人完整指南
- Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
- 自主家庭助理机器人 O'nine - ROS + Alexa 语音控制 + 机械臂 + 麦克纳姆轮全向移动
- DIY 手势控制机械臂:基于 Arduino + 柔性传感器 + IMU + 蓝牙的六自由度仿生臂
- 通过专用 Android App 蓝牙控制 Arduino 机械臂
- 手把手打造Arduino Nano喂食机器人
- 四轮 Arduino 机器人:Dabble App 蓝牙手柄遥控
- 适用于 Arduino 项目的智能室内导航机器人套件
- 伺服电机深度解析:工作原理、分类与核心价值
- 齿轮箱与伺服电机完美搭配:精准运动控制的黄金法则