太棒了!自己动手用 Arduino 制作无人机是一个非常有趣且富有挑战性的项目,它能让你从零开始了解无人机的每一个组成部分,从硬件组装到代码控制,是一次绝佳的学习经历。

下面我为你整理一份详细的 DIY Arduino 无人机从零到一的完整指南,包含核心概念、所需组件、组装步骤和基础代码。
第一部分:核心概念与准备工作
在开始之前,你需要了解几个关键概念:
- 飞行控制器:无人机的“大脑”,它负责接收你的遥控信号,并整合来自陀螺仪、加速度计等传感器的数据,通过精确计算控制电机的转速,以保持平衡或执行你的指令,我们这里的核心就是 Arduino。
- 传感器 - MPU-6050:这是无人机的“内耳”和“平衡器官”,它是一个集成了 3 轴陀螺仪和 3 轴加速度计的模块,可以测量无人机的角速度和加速度,FCU 通过这些数据来计算无人机的姿态(是否倾斜)。
- 电机与螺旋桨:无人机的“肌肉”,通常使用无刷电机和对应的螺旋桨,注意,电机有正反转,螺旋桨也有正反桨,需要正确搭配才能产生向上的升力。
- 电调:电子调速器,它介于飞行控制器和电机之间,接收来自 FCU 的 PWM 信号,并精确控制无刷电机的转速。注意:无刷电机必须配合电调使用。
- 电池:无人机的“心脏”,通常使用 Li-Po (锂聚合物) 电池,能量密度高,但需要小心使用,避免过充过放。
- 遥控与接收:你的“指令”,遥控器发送信号,无人机上的接收机接收信号并解码后发送给 Arduino。
第二部分:所需组件清单
为了简化,我们使用一个集成度较高的方案:Arduino Uno + GY-521 (MPU-6050模块) + 无刷电调 + 电机 + 螺旋桨 + 遥控接收机。
| 组件名称 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| 主控板 | Arduino UNO R3 | 1 | 也可以使用 Arduino Nano,体积更小 |
| 姿态传感器 | GY-521 (MPU-6050) | 1 | 必须包含 0x68 地址的版本 |
| 无刷电机 | 2212 或 2208KV980 | 4 | 四轴常用,KV值影响转速 |
| 电调 | 30A 四合一电调 或 4个独立 20A 电调 | 1 或 4 | 四合一更简洁,节省空间和线材 |
| 螺旋桨 | 1045 或 1047 正反桨 | 各2对 | 2个正桨(CW),2个反桨(CCW) |
| 电池 | 3S 11.1V 2200mAh Li-Po 电池 | 1 | 3S表示3节电池串联,电压约12.6V |
| 遥控接收机 | PWM 接收机 (如 Flysky FS-iA6B) | 1 | 必须支持PWM信号输出 |
| 遥控器 | 6通道或以上遥控器 | 1 | 如 Flysky FS-i6 |
| 机架 | 250mm 或 280mm 四轴机架 | 1 | 碳纤维或玻璃纤维材质 |
| 电源分布板 | PDB (可选) | 1 | 用于分配电池电压,简化接线 |
| 其他 | 杜邦线、热缩管、扎带、螺丝等 | 若干 | 用于固定和连接 |
第三部分:硬件组装步骤
- 组装机架:将电机臂用螺丝固定在机架中心板上。
- 安装电机:将无刷电机固定在电机臂的末端,注意电机轴的方向。务必拧紧螺丝,否则飞行中电机脱落非常危险。
- 安装电调:
- 如果使用四合一电调,直接将其用魔术贴或扎带固定在机架中心板下方。
- 如果使用独立电调,将它们分别固定在电机臂上。
- 连接电机与电调:
- 无刷电机有三根线,任意连接到电调的三根输出线上即可,如果电机反转,只需交换其中任意两根电机线即可。
- 重要:四轴无人机的电机旋转方向必须是 对角同向,即,1号和3号电机同向,2号和4号电机同向,且与1、3号相反,这样才能产生旋转力矩来控制偏航。
- 连接电调与Arduino/接收机:
- 信号线:将电调的信号线(通常是白色或黄色)连接到 Arduino 的 PWM 引脚上,我们需要3个以上的PWM引脚。
- 电调1 -> Arduino D9
- 电调2 -> Arduino D10
- 电调3 -> Arduino D11
- 电调4 -> Arduino D6 (或其他可用PWM引脚)
- 电源线:将电调的输入线(红色和黑色)连接到电池和电源分布板。注意: 电调输入是高压电,接线时务必断开电池!
- 信号线:将电调的信号线(通常是白色或黄色)连接到 Arduino 的 PWM 引脚上,我们需要3个以上的PWM引脚。
- 连接MPU-6050:
- MPU-6050 模块通过 I2C 协议与 Arduino 通信,接线非常简单:
- VCC -> Arduino 5V
- GND -> Arduino GND
- SCL -> Arduino A5
- SDA -> Arduino A4
- MPU-6050 模块通过 I2C 协议与 Arduino 通信,接线非常简单:
- 连接接收机:
- 将接收机连接到 Arduino 的另外几个 PWM 引脚。
- 油门通道 -> Arduino D2
- 副翼通道 (Roll) -> Arduino D3
- 升降通道 (Pitch) -> Arduino D4
- 偏航通道 (Yaw) -> Arduino D5
- 将接收机连接到 Arduino 的另外几个 PWM 引脚。
- 连接电池:将电池连接到电调的输入端。这是最后一步,确保所有接线无误后再连接!
第四部分:软件与代码 (最核心的部分)
DIY 无人机最复杂的就是软件部分,它包含姿态解算、PID 控制算法等,这里我们提供一个简化版的代码框架,让你能理解基本原理。

准备 Arduino IDE
- 安装 Arduino IDE。
- 安装 MPU-6050 的库:
Sketch->Include Library->Manage Libraries...,搜索并安装Adafruit MPU6050和Adafruit Unified Sensor。
核心算法简介
- 姿态解算:读取 MPU-6050 的原始数据,通过融合算法(如互补滤波或卡尔曼滤波)计算出无人机当前的俯仰角、横滚角和偏航角,这是 PID 控制的基础。
- PID 控制器:这是实现自稳飞行的关键。
- P (Proportional - 比例):误差越大,修正力越大,无人机向右倾斜了10度,P项就会产生一个向左的巨大力矩来修正它。
- I (Integral - 积分):消除稳态误差,因为风的原因,无人机总是微微向右飘,I项会慢慢累积这个小误差,并产生一个持续的修正力。
- D (Derivative - 微分):抑制震荡,增加稳定性,它根据误差变化的速度来调整,防止无人机修正过度。
- 混合控制:将来自遥控器的指令(油门、俯仰、横滚、偏航)和来自PID的修正指令,计算出四个电机最终应该输出的转速。
示例代码框架
这是一个非常基础的框架,直接上传是无法飞行的,你需要根据你的硬件和实际情况进行大量的调试,特别是PID参数。
#include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <Wire.h> // 创建 MPU6050 对象 Adafruit_MPU6050 mpu; // 定义电机引脚 (根据你的接线修改) #define M1_PIN 9 #define M2_PIN 10 #define M3_PIN 11 #define M4_PIN 6 // 定义接收机引脚 (根据你的接线修改) #define THROTTLE_PIN 2 #define ROLL_PIN 3 #define PITCH_PIN 4 #define YAW_PIN 5 // --- PID 变量 (需要你手动调试!) --- float pid_p_roll = 1.0; // 滚转P float pid_i_roll = 0.01; // 滚转I float pid_d_roll = 0.1

