Arduino 控制 3DR Solo 无人机舵机:Firmata + pyMata 实战教程
组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | |
| 3DR Solo 无人机 | 1 | |
| 舵机 (Tower Pro MG996R) | 1 | |
| Solo 附件口扩展板 | 1 | GitHub 开源设计 |
项目简介
前言
3DR Solo 开发环境完善但 I/O 有限:附件口仅引出 CAN、MAVLink 串口(接飞控)、USB(接 Sololink i.MX6)。通过 Arduino + Firmata 可扩展传感器、舵机、LED 等任意 Arduino 功能。本教程演示用 Solo 控制舵机摆动。
软件前置
- Solo 固件 ≥ 1.2.0
- Arduino IDE
- FileZilla (SFTP 传文件)
- PuTTY 或任意 SSH 客户端
步骤 1:Arduino 烧录 StandardFirmata


文件 → 示例 → Firmata → StandardFirmata,选板卡端口,上传。
步骤 2:硬件组装




注:扩展板暂未商业销售,设计文件见 GitHub
步骤 3:获取 pyMata 与示例脚本
需 pyMata 库 (Python Firmata 客户端) 与示例脚本 SoloServoSweep.py。
步骤 4:文件传输到 Solo
- 电脑连接 Solo WiFi 热点
- FileZilla 连接
sftp://10.1.1.1,用户名root,密码TjSDBkAu - 将
SoloServoSweep.py上传至/home/root/


步骤 5:SSH 登录 Solo
PuTTY 连接 10.1.1.1:22,用户 root,密码 TjSDBkAu。全程保持 WiFi 连接。



步骤 6:安装 pyMata
pip install pymata

步骤 7:运行示例
python SoloServoSweep.py

代码
SoloServoSweep.py (Python)
from PyMata.pymata import PyMata
import time
import sys
SERVO_MOTOR = 9 # 舵机信号线接 D9
END = 170 # 最大摆动角度
board = PyMata("/dev/ttyACM0") # Arduino 串口设备
board.servo_config(SERVO_MOTOR)
try:
while True:
for i in range(0, END): # 正向扫描
board.analog_write(SERVO_MOTOR, i)
time.sleep(0.015)
for i in range(END, 0, -1): # 反向扫描
board.analog_write(SERVO_MOTOR, i)
time.sleep(0.015)
except KeyboardInterrupt:
board.close()
sys.exit()
自定义零件
Solo 扩展板设计文件:GitHub
原理图

制造工艺
- DIY 蓝牙控制 Arduino 间谍小车
- FlickMote:基于手势的智能家居红外遥控器
- DIY Arduino TV-B-Gone:万能关机遥控器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- 从零构建智能 Arduino 四足机器人:完整指南
- Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
- DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
- ServoTimer2 库指南:解决 Timer1 冲突的舵机控制方案