Arduino 在机器人中的角色:机器人的“大脑”
你可以把一个机器人想象成一个生物:

- Arduino:就是机器人的大脑,它负责思考、决策和发出指令。
- 传感器:就是机器人的眼睛、耳朵、皮肤,它们负责感知外部环境(如光线、距离、颜色、声音等)。
- 执行器:就是机器人的手、脚、嘴巴,它们负责执行大脑的指令(如转动马达、发光、发声等)。
核心任务: Arduino 的核心任务是读取传感器的数据,根据预设的逻辑进行处理,然后控制执行器做出相应的动作,这个过程被称为控制循环。
机器人系统的核心组件
一个基于 Arduino 的机器人通常由以下几个部分组成:
核心控制器
- Arduino 主板:这是整个系统的核心。
- 入门首选:Arduino UNO R3,它有足够的 I/O 口、社区支持广泛、教程丰富。
- 进阶选择:Arduino Mega(更多I/O口,适合复杂机器人)、Arduino Nano(体积小巧,适合空间有限的机器人)。
执行器
让机器人动起来的部件。
- 直流减速电机:最常见,用于驱动轮子,实现移动,通常需要配合电机驱动板使用,因为 Arduino 的 I/O 口电流太小,无法直接驱动电机。
- 舵机:可以精确控制旋转角度(如0-180度),常用于机械臂、云台、头部转动等。
- 步进电机:可以精确控制转动的步数,适用于需要高精度定位的场景(如 3D 打印机、绘图仪)。
- 其他:LED灯、蜂鸣器、振动马达等。
传感器
让机器人感知世界的部件。

- 避障传感器:超声波传感器(最常用,通过发射和接收超声波来测量距离)、红外避障传感器。
- 巡线传感器:红外对管(通过检测地面黑白线的反射光差异来巡线)。
- 环境传感器:光线传感器、温湿度传感器。
- 姿态传感器:陀螺仪/加速度计(用于保持平衡、测量姿态,如自平衡车)。
结构与底盘
机器人的“骨架”。
- 可以购买现成的机器人底盘套件,通常包含电机、轮子、螺丝和亚克力/金属底盘。
- 也可以使用 3D 打印自己设计的外壳,或者用乐高、亚克力板等材料DIY。
电源
为所有部件提供能量。
- 电池盒:最常用的是使用 6节AA电池盒 提供 9V 电压,或者使用 4V 的锂电池组。
- 注意:电源的功率要足够驱动电机,否则会导致机器人“动力不足”或 Arduino 重启。
Arduino 如何控制机器人:工作流程
一个典型的机器人程序(Sketch)会遵循以下流程:
-
包含库:如果使用了复杂的模块(如舵机、超声波传感器),需要先包含对应的库文件。
(图片来源网络,侵删)#include <Servo.h> // 包含舵机库 #include <NewPing.h> // 包含超声波传感器库
-
定义引脚:声明 Arduino 的哪个引脚连接到了哪个传感器或执行器。
#define ECHO_PIN 2 #define TRIG_PIN 3 #define SERVO_PIN 9 #define MOTOR_SPEED_A 5
-
初始化:在
setup()函数中,设置引脚模式(输入/输出)、启动串口通信、初始化传感器和执行器。void setup() { Serial.begin(9600); // 启动串口,用于调试 pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); myServo.attach(SERVO_PIN); // 将舵机连接到9号引脚 } -
主循环:在
loop()函数中,这是机器人持续执行的核心逻辑。void loop() { // 1. 读取传感器数据 int distance = readUltrasonicDistance(); // 2. 处理数据并做出决策 if (distance < 20) { // 如果距离小于20cm // 遇到障碍物,执行避障动作 avoidObstacle(); } else { // 没有障碍物,直行 moveForward(); } // 可以加一个短延时,防止循环太快 delay(50); }
一个经典入门项目:避障小车
这是一个几乎每个 Arduino 爱好者都会做的项目,它能帮助你理解所有核心组件如何协同工作。
所需组件:
- Arduino UNO R3
- L298N 电机驱动板
- 超声波传感器 (HC-SR04)
- TT 减速电机 + 轮子
- 机器人底盘套件
- 电池盒(6节AA或7.4V锂电池)
连接方式:
- 超声波传感器:
- VCC -> Arduino 5V
- GND -> Arduino GND
- Trig -> Arduino 数字引脚 3
- Echo -> Arduino 数字引脚 2
- L298N 电机驱动板:
- 控制信号:
- IN1 -> Arduino 数字引脚 4
- IN2 -> Arduino 数字引脚 5
- IN3 -> Arduino 数字引脚 6
- IN4 -> Arduino 数字引脚 7
- 电源:
- +12V (或 VMS) -> 电池盒正极
- GND -> 电池盒负极 和 Arduino GND (共地非常重要!)
- +5V -> 可以不接,从外部取电,如果需要给 Arduino 供电,可以接 Arduino 的 5V 和 VIN。
- 电机:
- OUT1, OUT2 -> 接左轮电机
- OUT3, OUT4 -> 接右轮电机
- 控制信号:
示例代码:
// 定义引脚
const int trigPin = 3;
const int echoPin = 2;
// 电机控制引脚
const int motorA1 = 4; // 左电机 IN1
const int motorA2 = 5; // 左电机 IN2
const int motorB1 = 6; // 右电机 IN3
const int motorB2 = 7; // 右电机 IN4
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 设置引脚模式
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
}
// 读取超声波距离
long readUltrasonicDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// pulseIn 函数会等待高电平并返回其持续时间(微秒)
long duration = pulseIn(echoPin, HIGH);
// 声速 = 340m/s = 0.034cm/μs
// 距离 = (时间 * 声速) / 2 (因为一来一回)
long distance = duration * 0.034 / 2;
return distance;
}
// 控制电机函数
void moveForward() {
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, HIGH);
digitalWrite(motorB2, LOW);
}
void moveBackward() {
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, HIGH);
}
void turnLeft() {
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
digitalWrite(motorB1, HIGH);
digitalWrite(motorB2, LOW);
}
void turnRight() {
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, HIGH);
}
void stopMotors() {
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, LOW);
}
void loop() {
long distance = readUltrasonicDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < 20 && distance > 0) { // 检测到障碍物且读数有效
stopMotors();
delay(500);
turnRight(); // 遇到障碍物,向右转
delay(1000); // 转向1秒
} else {
moveForward(); // 否则,前进
}
delay(50); // 短暂延时,稳定控制
}
进阶方向
当你掌握了基础后,可以探索更复杂的机器人项目:
- 蓝牙/WiFi 机器人:添加蓝牙模块(如 HC-05)或 WiFi 模块(如 ESP8266),可以用手机 App 或网页远程控制机器人。
- 循迹机器人:使用红外巡线传感器,让机器人沿着地上的黑线行走。
- 机械臂:使用 2-4 个舵机来控制机械臂的关节,实现抓取和放置物体的功能。
- 自平衡车:这是最经典也最具挑战性的项目之一,需要使用 MPU-6050 陀螺仪/加速度计,并运用复杂的控制算法(如 PID 算法)来保持车身平衡。
Arduino 是进入机器人世界的绝佳平台,它成本低、易于上手、社区庞大、资源丰富,从最简单的避障小车开始,你可以一步步学习硬件连接、编程逻辑、传感器融合和控制算法,最终创造出属于你自己的、功能强大的机器人。
祝你玩得开心!
标签: arduino机器人制作教程 arduino机器人编程入门 arduino机器人项目案例