使用 Arduino Leonardo 和 3D 打印为 MS Flight Simulator 自制油门象限与配平轮
核心元件与物料清单
| 元件 | 数量 | 备注 |
|---|---|---|
| Arduino Leonardo | 1 | Leonardo 或 Micro 均可,单块板最多支持 6 个控制轴 |
| 连接导线 | 3 | 每个模块需 3 根导线 |
| 旋转电位器 50kΩ | 1 | 每个模块 1 个,详情见正文选型说明 |
所需工具与设备
- 电烙铁(通用)
- 3D 打印机(通用,本项目在 UP! 打印机上用 ABS 打印)
软件与在线服务
- Arduino IDE
项目背景
最近升级了电脑以运行 MS FS2020,键盘操作缺乏真实手感,但受限于空间与预算,无法搭建完整驾驶舱或购买昂贵外设。于是决定自行设计一套 3D 打印的飞控硬件:单轴杆控制油门、襟翼、起落架,以及一个升降舵配平轮。主要针对单发活塞飞机的操作习惯设计,其中配平轮的结构设计最为耗时,经过多轮草图迭代才确定最终方案。
结构设计与 3D 打印件清单
杆类模块(油门/襟翼/起落架)每套需:
- 机身左/右各 1 件
- 带卡槽的操纵杆 1 件(提供 2~6 档位共 5 种变体)
- 杆端帽 1 件
- 旋钮 1 件(6 种造型可选)
- 摩擦片 1 件(3 种阻尼可选)
- 电位器固定座 1 件
配平轮模块需:
- 轮体左/右各 1 件
- 齿轮、轮毂、轮缘(组装版需 8 个凸耳)、单体轮(一体打印版)任选其一
- 象限支架、象限驱动齿、电位器固定座各 1 件
后箱体部件可选,用于收纳 Arduino 与走线,实现即插即用、收纳方便。
电气连接与原理图
每个电位器三脚:一端接 5V,一端接 GND,中间滑动端分别接 A0~A5。最多可级联 6 个轴。原理图文件见附件 quadrant_ZkMygPyRiE.fzz。
固件代码要点
使用 Joystick.h 库将模拟量映射为 0~1023 的游标轴输出。首次上传时将 setting 设为 0~5 打开串口监视器,转动各轴至两端记录 axisLimits 数组的最小/最大值,再改回 -1 即可正常使用。代码支持动态启用/禁用任意轴,循环周期 5 ms,延迟极低。
#include <Joystick.h>
Joystick_ Joystick;
int axisLimits0[] = {686, 338}; // 按实测填写
// ... axisLimits1~5
bool a0Used = true; // 对应 A0~A5
// ...
void loop() {
if (a0Used) {
int v = analogRead(A0);
int pos = translateValue(v, axisLimits0[0], axisLimits0[1]);
Joystick.setThrottle(pos);
}
// ... A1~A5 对应 Rx, Ry, Rz, X, Y 轴
delay(5);
}
3D 模型文件
提供 STEP 格式总装文件 released_u3k8QjPXzJ.stp,含所有零件,可直接导入 CAD 软件修改或切片打印。
总结
这是一个极具成就感的项目:编码量极小,核心难点在于机械结构的“手感”调教,尤其是配平轮的阻尼与回位机构。完成后即插即用,无需驱动,收纳时只需拔掉 USB 线即可。
制造工艺
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- 自制 FlightGear 飞行模拟升降舵配平轮:Arduino Nano + Python UDP 桥接方案
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- 基于 Arduino 与 Google Sheets 的实时 RFID 考勤系统
- IoT 集成:基于 Windows 10 UWP 应用的 Arduino 远程控制
- MKR1000 接入 Azure IoT:DHT22 温湿度实时上云监控
- Bolt IoT 结合 DHT11 与 Arduino 实现温湿度高级监测
- 轮胎动平衡 vs 四轮定位:区别、费用、周期与自查全指南