DIY 飞行模拟器方向舵脚踏板:分步制作指南
组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino Nano R3 | 1 | 或 Arduino UNO(模拟输出) |
| Arduino Micro | 1 | 仅需数字输出(Win 8-10) |
| Arduino UNO | 1 | 或 Arduino Nano(模拟输出) |
| MCP41050 数字电位器 (SPI) | 3 | 单/双通道 |
| SS49E 霍尔效应线性传感器 | 4 | 或 AH3503 等同类线性传感器 |
项目简介
2021 更新:新版脚踏板采用 HID 接口,设计改进,高精度霍尔传感器模块提供极佳控制手感。详情见作者网站。
各位飞行模拟爱好者好!我设计并制作了一套用于飞行模拟器的方向舵脚踏板,核心由 Arduino 控制。制作仅需两天,但文档整理花了两周。我制作了多个视频详细展示全过程。
制作方案
Arduino 与模拟器连接有两种方式:
- 数字连接:使用 ArduinoJoystickLibrary 和 Arduino Micro 板,识别为 HID 游戏手柄。
- 模拟连接:本文提供的代码采用此方式,通过数字电位器输出模拟电压信号。
两种方式的电路制作和传感器配置均在视频中演示。
传感器与电子电路
采用 4 个 SS49E 霍尔线性传感器检测踏板位置,3 个 MCP41050 数字电位器通过 SPI 接口输出模拟电压,模拟传统电位器信号。电路设计紧凑,适合集成在脚踏板内部。
代码:模拟输出(通过数字电位器)
#include <SPI.h>
#define CS_RUDDER 10
#define CS_LEFT 8
#define CS_RIGHT 9
#define SENSOR_LEFT_PEDAL A6
#define SENSOR_RIGHT_PEDAL A5
#define SENSOR_RUDDER_LEFT A0
#define SENSOR_RUDDER_RIGHT A1
int val_left, val_right, remap_left, remap_right, rudder;
int val_brake_left, val_brake_right, remap_brake_left, remap_brake_right;
int tuning_rudder = 128;
void setup() {
Serial.begin(9600);
SPI.begin();
pinMode(CS_RUDDER, OUTPUT);
pinMode(CS_LEFT, OUTPUT);
pinMode(CS_RIGHT, OUTPUT);
}
void loop() {
// -------- 方向舵 -128 ~ 128 --------
val_left = analogRead(SENSOR_RUDDER_LEFT);
if (val_left <= 950) {
remap_left = map(val_left, 30, 870, -128, 0);
} else remap_left = 0;
if (remap_left > 0) remap_left = 0;
if (remap_left <= -128) remap_left = -128;
val_right = analogRead(SENSOR_RUDDER_RIGHT);
if (val_right <= 950) {
remap_right = map(val_right, 0, 820, 132, 0);
} else remap_right = 0;
if (remap_right < 0) remap_right = 0;
if (remap_right >= 127) remap_right = 127;
rudder = remap_left + remap_right;
if (remap_left == 0) tuning_rudder = tuning_rudder + 128;
else tuning_rudder = abs(tuning_rudder - 128);
// -------- 刹车 0-255 --------
val_brake_left = analogRead(SENSOR_LEFT_PEDAL);
if (val_brake_left <= 328) {
remap_brake_left = map(val_brake_left, 200, 328, 0, 255);
} else remap_brake_left = 255;
if (remap_brake_left < 0) remap_brake_left = 0;
val_brake_right = analogRead(SENSOR_RIGHT_PEDAL);
if (val_brake_right <= 328) {
remap_brake_right = map(val_brake_right, 200, 328, 0, 255);
} else remap_brake_right = 255;
if (remap_brake_right < 0) remap_brake_right = 0;
// -------- 发送数据到数字电位器 --------
digitalWrite(CS_RUDDER, LOW);
SPI.transfer(0b00010001);
SPI.transfer(tuning_rudder);
digitalWrite(CS_RUDDER, HIGH);
delay(5);
digitalWrite(CS_LEFT, LOW);
SPI.transfer(0b00010001);
SPI.transfer(remap_brake_left);
digitalWrite(CS_LEFT, HIGH);
delay(5);
digitalWrite(CS_RIGHT, LOW);
SPI.transfer(0b00010001);
SPI.transfer(remap_brake_right);
digitalWrite(CS_RIGHT, HIGH);
delay(5);
}
原理图

制造工艺
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- DIY VR 滑板:用 Arduino、Google Cardboard 与蓝牙打造虚拟滑雪体验
- DIY Arduino 电子波疗设备 - 基于拉德尼克疗法的 EMR 治疗仪
- 校园智能体温监测系统 - 精准、实时、安全的学生健康守护方案
- Arduino 8 位并行 IO 端口库:一行代码实现 8 位数字读写
- Arduino 64 键原型键盘矩阵:用移位寄存器打造全自定义键盘
- DIY二自由度竞速模拟器:Arduino Nano驱动SG90微型舵机
- 掌握直流电机控制:PID 与 PWM 专家技巧全解析
- 低成本 Arduino 闪电探测器制作指南
- 使用 Arduino 制作便携式 RFID 门锁——分步指南
- DIY三轴CNC立式加工中心:打造精密铣床