Самодельные педали руля для авиасимулятора: пошаговое руководство
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Nano R3 | 1 | Или Arduino UNO для аналогового выхода |
| Arduino Micro | 1 | Если нужен только ЦИФРОВОЙ выход (Windows 8-10) |
| Arduino UNO | 1 | Или Arduino Nano для аналогового выхода |
| Цифровой потенциометр MCP41050 (SPI) | 3 | По одному на руль и два тормоза |
| Датчик Холла SS49E (линейный) | 4 | Или аналоги: AH3503 (только линейные, не ключи!) |
О проекте
Обновление 2021: Новая версия педалей имеет HID-интерфейс и улучшенный дизайн. Продвинутый модуль датчиков Холла обеспечивает очень точный контроль. Подробности на сайте автора.
Привет, любители полётов! Я изобрёл и собрал педали для авиасимулятора, где основную роль играет Arduino. Хочу поделиться этой разработкой. Собрать педали можно за два дня, но описание процесса заняло две недели. Поэтому я снял несколько подробных видео.
Варианты подключения
Arduino можно подключить к симулятору двумя способами:
- Цифровой — через ArduinoJoystickLibrary и плату Arduino Micro. Ссылка на руководство в описании видео.
- Аналоговый — используется в данном проекте. Приведённый скетч относится именно к этому методу.
Оба способа, схема подключения и настройка датчиков показаны в видео.
Датчики и электроника
Интересно ваше мнение о конструкции — оставляйте комментарии!
Программный код (аналоговый выход через digiPOT)
#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 += 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);
}
Схемы подключения
Производственный процесс
- Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- Сборка DIY VR-скейтборда на Arduino, Google Cardboard и Bluetooth
- DIY Arduino Radionics EMR Treatment Device — радионическое устройство
- Умная система мониторинга температуры для школ: точно, в реальном времени, безопасно
- Библиотека 8-битного порта ввода-вывода для Arduino — расширение цифрового управления
- Arduino 64-клавишная прототипная клавиатура: матрица на сдвиговых регистрах
- DIY 2D гоночный симулятор движения на Arduino Nano и сервоприводах SG90
- Мастерство управления двигателем постоянного тока: экспертные советы и трюки
- Создание дешевого детектора молний на Arduino Uno