DIY 비행 시뮬레이터 러더 페달 제작: 단계별 완벽 가이드
부품 및 소모품
| 부품 |
수량 |
비고 |
| Arduino Nano R3 |
1 |
아날로그 출력용 (또는 Arduino UNO) |
| Arduino Micro |
1 |
디지털 출력용 (Windows 8-10 HID 지원) |
| MCP41050 디지털 포텐셔미터 (SPI) |
3 |
러더, 좌/우 브레이크용 |
| SS49E 홀 이펙트 선형 센서 |
4 |
AH3503 등 유사 선형 센서 사용 가능 (스위치/디지털 타입 불가) |
프로젝트 소개
업데이트 (2021)
새 버전은 HID 인터페이스와 향상된 설계를 적용했습니다. 고급 홀 이펙트 센서 모듈로 매우 정밀한 제어가 가능합니다. 상세 내용은 제작자 웹사이트 참조.
제작 개요
비행 시뮬레이터용 러더 페달을 Arduino로 직접 제작했습니다. 이 페달은 두 가지 방식으로 시뮬레이터와 연결 가능합니다:
- 디지털 연결: ArduinoJoystickLibrary + Arduino Micro 보드 사용 (HID 장치로 인식)
- 아날로그 연결: 디지털 포텐셔미터(MCP41050)를 통해 조이스틱 포트 에뮬레이션 (본 가이드는 이 방식 설명)
센서 장착, 회로 구성, 설정 과정은 제작자의 유튜브 영상에서 자세히 확인할 수 있습니다.
센서 및 전자 회로
홀 이펙트 센서(SS49E)는 페달의 움직임을 비접촉식으로 감지하여 마모 없이 오래 사용할 수 있습니다. 센서 4개는 각각 러더 좌/우, 브레이크 좌/우에 배치됩니다. 디지털 포텐셔미터 3개는 아날로그 조이스틱 신호를 생성하여 PC의 게임 포트에 입력됩니다.
소스 코드 (아날로그 출력 방식)
#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;
remap_left = constrain(remap_left, -128, 0);
// 우측 러더 센서 읽기 및 매핑
val_right = analogRead(SENSOR_RUDDER_RIGHT);
if (val_right <= 950) {
remap_right = map(val_right, 0, 820, 132, 0);
} else remap_right = 0;
remap_right = constrain(remap_right, 0, 127);
rudder = remap_left + remap_right;
tuning_rudder = (remap_left == 0) ? tuning_rudder + 128 : abs(tuning_rudder - 128);
// ===== 브레이크 페달: 0 ~ 255 범위 =====
val_brake_left = analogRead(SENSOR_LEFT_PEDAL);
remap_brake_left = (val_brake_left <= 328) ? map(val_brake_left, 200, 328, 0, 255) : 255;
remap_brake_left = max(remap_brake_left, 0);
val_brake_right = analogRead(SENSOR_RIGHT_PEDAL);
remap_brake_right = (val_brake_right <= 328) ? map(val_brake_right, 200, 328, 0, 255) : 255;
remap_brake_right = max(remap_brake_right, 0);
// ===== 디지털 포텐셔미터로 데이터 전송 (SPI) =====
// 러더
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);
}
회로도
회로도 이미지 3장이 제공됩니다: 전체 배선도, 센서 연결부, 디지털 포텐셔미터 SPI 연결부. 제작자 웹사이트에서 고해상도 버전 다운로드 가능.
팁 및 주의사항
- 센서 캘리브레이션: 코드 내
map() 함수의 입력 범위(30~870, 0~820 등)는 실제 센서 출력에 맞춰 조정 필요
- 홀 센서는 자석과 함께 사용하며, 거리에 따라 선형적으로 전압 변화
- 아날로그 조이스틱 포트 핀아웃 확인 필수 (일반적으로 X/Y 축 + GND + VCC)
- 디지털 방식(HID) 선호 시 Arduino Micro + ArduinoJoystickLibrary 사용 권장