太棒了!做一个机器人是一个非常有趣且有成就感的项目,我会为你提供一个从零开始的、详细的、分步的指南,专注于制作一个“入门级”的简单机器人。

(图片来源网络,侵删)
这个机器人将具备以下功能:
- 自动避障:能通过传感器检测前方是否有障碍物。
- 自主转向:遇到障碍物时,会自动后退并向左或向右转,然后继续前进。
- 易于编程和扩展:使用非常流行的Arduino平台。
核心思路:一个简单的避障机器人
这个机器人的基本逻辑就像一个非常简单的生物:
- 前进:一直向前走。
- 检测:用“眼睛”(超声波传感器)看前面有没有东西。
- 判断:如果距离太近(有障碍物),就执行“后退+转向”的动作。
- 循环:重复以上步骤。
第一步:准备工作(你需要什么?)
我们将使用“Arduino”作为机器人的“大脑”,因为它非常容易上手,社区庞大,教程丰富。
核心组件
| 组件名称 | 功能 | 中文别名 | 数量 |
|---|---|---|---|
| Arduino UNO R3 | 机器人的“大脑”,负责处理所有指令和逻辑。 | Arduino主控板 | 1 |
| L298N 电机驱动模块 | Arduino的“肌肉”,直接控制电机的转动和方向,Arduino本身电流很小,无法直接驱动电机。 | 电机驱动板 | 1 |
| TT减速电机 + 轮子 | 机器人的“腿”,提供前进的动力,通常买两个,配轮子和万向轮。 | 减速电机、车轮 | 2套 |
| 超声波传感器 (HC-SR04) | 机器人的“眼睛”,用来测量前方障碍物的距离。 | 超声波模块 | 1 |
| 电池盒 | 提供移动所需的电源,推荐使用4节AA电池盒或18650锂电池组。 | 电池盒 | 1 |
| 面包板 + 杜邦线 | 用于在搭建原型时,无需焊接即可连接各个组件。 | 面包板、杜邦线 | 1套 |
| 机器人底盘套件 | 一个包含底盘、螺丝、电机支架、轮子和万向轮的套件,能大大简化机械部分的搭建。 | 底盘套件 | 1套 |
工具
- 螺丝刀:用于组装底盘。
- 剪线钳:用于剪掉杜邦线多余的长度。
- 热熔胶枪:可选,用于固定一些松动的部件(如电池盒)。
第二步:组装机械部分
- 搭建底盘:根据你购买的底盘套件的说明书,将两个电机固定在底盘的两侧,并装上轮子。
- 安装万向轮:在底盘的后部(或前部,取决于设计)安装一个万向轮,这样机器人就能平稳地移动了。
- 固定“大脑”和“肌肉”:
- 用双面胶或螺丝将Arduino UNO固定在底盘的某个位置(通常是中间)。
- 将L298N电机驱动模块也固定在Arduino旁边。
- 固定“眼睛”:
将超声波传感器固定在底盘的最前端,确保它能“看”到正前方的路。
(图片来源网络,侵删) - 安装电池盒:
将电池盒固定在底盘的合适位置,注意重心平衡。
现在你的机器人看起来应该像这样: 一个底盘,前面有两个驱动轮,后面有一个万向轮,上面“趴着”Arduino和电机驱动板,前面还“长着”一个超声波传感器。
第三步:连接电路(这是最关键的一步)
我们将使用面包板和杜邦线来连接所有组件。在连接前,请务必断开所有电源!
下面是详细的引脚连接对照表,请仔细核对,接错可能会导致元件损坏。

(图片来源网络,侵删)
| Arduino UNO 引脚 | 连接到组件的引脚 | 功能说明 |
|---|---|---|
| 5V | L298N的 +12V 和 +5V |
为L298N模块提供电源 |
| GND | L298N的 GND、超声波传感器的 GND、电池盒的负极 |
共地,所有组件的负极都连接到这里 |
| 数字引脚 7 | 超声波传感器的 Trig |
触发超声波测距 |
| 数字引脚 6 | 超声波传感器的 Echo |
接收回波,计算距离 |
| 数字引脚 5 | L298N的 IN1 |
控制电机A(左轮)方向 |
| 数字引脚 4 | L298N的 IN2 |
控制电机A(左轮)方向 |
| 数字引脚 3 | L298N的 IN3 |
控制电机B(右轮)方向 |
| 数字引脚 2 | L298N的 IN4 |
控制电机B(右轮)方向 |
| 数字引脚 9 | L298N的 ENA |
控制电机A(左轮)速度 |
| 数字引脚 10 | L298N的 ENB |
控制电机B(右轮)速度 |
电机连接:
- 将左边的电机连接到L298N模块的
OUT1和OUT2接口。 - 将右边的电机连接到L298N模块的
OUT3和OUT4接口。
电源连接:
- 将电池盒的正极连接到L298N模块的
+12V接口。 - 将电池盒的负极连接到面包板的蓝色负极轨,然后从负极轨连接到Arduino的
GND和L298N的GND。
连接示意图:
+-----------------+
| Arduino UNO |
| |
5V -------> L298N +5V/+12V
GND -------> L298N GND
7 -------> HC-SR04 Trig
6 -------> HC-SR04 Echo
5 -------> L298N IN1
4 -------> L298N IN2
3 -------> L298N IN3
2 -------> L298N IN4
9 -------> L298N ENA
10 -------> L298N ENB
+-----------------+
| 电池盒 |
| |
正极 -----> L298N +12V
负极 -----> (面包板GND) -----> Arduino GND & L298N GND
+-----------------+
| HC-SR04 |
| |
VCC -------> (面包板5V) (可选,如果5V不够用)
GND -------> (面包板GND)
Trig -----> Arduino 7
Echo -----> Arduino 6
第四步:编写代码
- 安装Arduino IDE:如果你还没有,请从 Arduino官网 下载并安装。
- 连接Arduino:用USB线将Arduino连接到你的电脑。
- 选择开发板和端口:
- 打开Arduino IDE,点击
工具->开发板->Arduino UNO。 - 点击
工具->端口,选择你的Arduino连接的COM口。
- 打开Arduino IDE,点击
- 复制并上传代码:将下面的代码复制到Arduino IDE中,然后点击“上传”按钮。
// 定义引脚
const int trigPin = 7; // 超声波传感器Trig引脚
const int echoPin = 6; // 超声波传感器Echo引脚
// 定义电机控制引脚
const int ENA = 9; // 左电机使能
const int ENB = 10; // 右电机使能
const int IN1 = 5; // 左电机方向1
const int IN2 = 4; // 左电机方向2
const int IN3 = 3; // 右电机方向1
const int IN4 = 2; // 右电机方向2
// 定义避障距离阈值 (单位: 厘米)
const int obstacleDistance = 20;
void setup() {
// 初始化串口通信,用于调试
Serial.begin(9600);
// 设置引脚模式
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// 设置初始速度 (0-255)
analogWrite(ENA, 200);
analogWrite(ENB, 200);
}
// 获取距离函数
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
// 计算距离 (声速 = 340m/s = 0.034cm/μs)
// 距离 = (时间 * 声速) / 2 (因为一来一回)
long distance = duration * 0.034 / 2;
return distance;
}
// 电机控制函数
void moveForward() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void moveBackward() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void turnLeft() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
void turnRight() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
void stopMotors() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void loop() {
// 1. 获取前方距离
long distance = getDistance();
// 2. 通过串口打印距离,方便调试
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// 3. 判断并执行动作
if (distance < obstacleDistance && distance > 0) {
// 如果距离小于阈值,说明有障碍物
Serial.println("Obstacle detected!");
// 1. 停止
stopMotors();
delay(200);
// 2. 后退
moveBackward();
delay(500);
// 3. 停止
stopMotors();
delay(200);
// 4. 随机选择向左或向右转
if (random(2) == 0) {
turnLeft();
} else {
turnRight();
}
delay(800); // 转向时间
// 5. 停止,准备前进
stopMotors();
delay(200);
} else {
// 如果没有障碍物,就前进
moveForward();
}
// 短暂延时,避免过于频繁地读取传感器
delay(100);
}
第五步:测试与调试
- 安全第一:确保机器人已经离开地面,比如用书本垫高轮子,以防它突然冲出去。
- 上电测试:将电池盒接上电源。
- 观察现象:
- 机器人应该会向前移动。
- 当你用手在它面前晃动时,它应该会停下来,后退,然后转向。
- 使用串口监视器:将Arduino通过USB线连上电脑,在Arduino IDE中打开
工具->串口监视器(波特率选9600),你会实时打印出它检测到的距离,这非常有助于调试。 - 调整参数:
- 如果转弯不够灵活,可以增加
turnLeft()或turnRight()函数中的delay()时间。 - 如果速度太快或太慢,可以调整
analogWrite(ENA, 200)和analogWrite(ENB, 200)中的值(0-255)。 - 如果避障距离不合适,可以修改
obstacleDistance的值。
- 如果转弯不够灵活,可以增加
进阶与扩展
恭喜!你已经完成了你的第一个机器人!接下来可以尝试以下事情让它变得更酷:
- 添加蓝牙模块:让你的机器人可以通过手机App远程控制。
- 增加巡线功能:添加一个红外巡线传感器,让它能沿着地上的黑线行走。
- 增加舵机:在超声波传感器上安装一个舵机,让它的“头”可以左右摆动,实现更大范围的扫描。
- 制作外壳:用3D打印、亚克力板或卡纸为你的机器人设计一个酷炫的外壳。
- 学习PID控制:让机器人走直线更精确。
从简单开始,一步步来,你会发现创造的乐趣无穷!祝你玩得开心!
标签: 自制机器人新手教程 简易机器人制作方法 机器人DIY入门指南
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。