Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Сборка кастомного квадранта тяг и колеса триммера для MS Flight Simulator на Arduino Leonardo и 3D-печати

Компоненты и материалы

Arduino Leonardo (или Arduino Micro) — подходит для проекта, позволяет подключить до 6 органов управления на одну плату. 1
Провода для монтажа — 3 провода на каждый модуль. 3
Поворотный потенциометр 50 кОм — 1 шт. на модуль (подробности в разделе «Сборка»). 1

Необходимые инструменты и оборудование

Приложения и онлайн-сервисы

О проекте

Введение

После обновления ПК для запуска Microsoft Flight Simulator 2020 я решил улучшить органы управления. Клавиатура не дает нужных ощущений при полёте, а полноценный кокпит или готовые приборы требуют много места и денег. Я не профессиональный симуляторщик, поэтому искал компактное и доступное решение.

Сборка кастомного квадранта тяг и колеса триммера для MS Flight Simulator на Arduino Leonardo и 3D-печати

Проектирование

Я разработал органы управления в CAD, опираясь на имеющиеся инструменты и представления о реальных авиарулях (реального опыта управления нет). Для лёгких однодвигательных самолётов, которые я чаще всего летаю в симуляторе, понадобились: отдельные рычаги для тяги, закрылков, шасси и колесо триммера руля высоты.

Колесо триммера стало самым сложным узлом — на его дизайн ушло несколько дней и множество эскизов, чтобы добиться нужного тактильного ощущения и внешнего вида.

Сборка кастомного квадранта тяг и колеса триммера для MS Flight Simulator на Arduino Leonardo и 3D-печати
Сборка кастомного квадранта тяг и колеса триммера для MS Flight Simulator на Arduino Leonardo и 3D-печати
Сборка кастомного квадранта тяг и колеса триммера для MS Flight Simulator на Arduino Leonardo и 3D-печати

Сборка

Все детали напечатаны на 3D-принтере из ABS, затем покрашены и подключены к Arduino. Сначала использовалась Leonardo, затем заменена на Micro для компактности. Итог — плаг-энд-плей устройство, которое легко убирается, когда не используется.

Список 3D-печатаемых деталей

Каждый модуль рычага требует:

Модуль колеса триммера требует:

Детали задней коробки служат для размещения Arduino и проводки.

Заключение

Сборка принесла много удовольствия. С программной стороны всё крайне просто, главная сложность — проектирование, особенно колеса триммера и достижение правильного тактильного ощущения.

Программный код

Файл: Quadrant.ino

Используйте переменную setting и монитор последовательного порта для определения крайних значений каждого потенциометра, затем введите их в массив axisLimits.

#include <Joystick.h>
Joystick_ Joystick;

// Массивы крайних значений аналоговых входов (переводятся в диапазон 0–1023)
int axisLimits0[] = {686, 338};
int axisLimits1[] = {345, 695};
int axisLimits2[] = {327, 678};
int axisLimits3[] = {342, 692};
int axisLimits4[] = {0, 1023};
int axisLimits5[] = {0, 1023};

// Включение/отключение осей
bool a0Used = true;
bool a1Used = true;
bool a2Used = true;
bool a3Used = true;
bool a4Used = false;
bool a5Used = false;

// Режим калибровки: -1 = выкл, 0–5 = вывод значений пина в Serial
int setting = -1;

void setup() {
  if(a0Used) pinMode(A0, INPUT);
  if(a1Used) pinMode(A1, INPUT);
  if(a2Used) pinMode(A2, INPUT);
  if(a3Used) pinMode(A3, INPUT);
  if(a4Used) pinMode(A4, INPUT);
  if(a5Used) pinMode(A5, INPUT);
  Joystick.begin();
  if(setting >= 0) Serial.begin(9600);
}

void loop() {
  int value = 0, pos = 0;
  if(a0Used){
    value = analogRead(A0);
    pos = translateValue(value, axisLimits0[0], axisLimits0[1]);
    Joystick.setThrottle(pos);
    if(setting == 0) settingPrint(value, pos);
  }
  if(a1Used){
    value = analogRead(A1);
    pos = translateValue(value, axisLimits1[0], axisLimits1[1]);
    Joystick.setRxAxis(pos);
    if(setting == 1) settingPrint(value, pos);
  }
  if(a2Used){
    value = analogRead(A2);
    pos = translateValue(value, axisLimits2[0], axisLimits2[1]);
    Joystick.setRyAxis(pos);
    if(setting == 2) settingPrint(value, pos);
  }
  if(a3Used){
    value = analogRead(A3);
    pos = translateValue(value, axisLimits3[0], axisLimits3[1]);
    Joystick.setRzAxis(pos);
    if(setting == 3) settingPrint(value, pos);
  }
  if(a4Used){
    value = analogRead(A4);
    pos = translateValue(value, axisLimits4[0], axisLimits4[1]);
    Joystick.setXAxis(pos);
    if(setting == 4) settingPrint(value, pos);
  }
  if(a5Used){
    value = analogRead(A5);
    pos = translateValue(value, axisLimits5[0], axisLimits5[1]);
    Joystick.setYAxis(pos);
    if(setting == 5) settingPrint(value, pos);
  }
  delay(5);
}

int translateValue(int v, int f1, int f2){
  int result = 0, start = 0;
  float range = 0;
  if(f1 < f2){ start = f1; range = f2 - f1; }
  else{ start = f2; range = f1 - f2; }
  result = (v - start) * (1023 / range);
  if(result < 0) result = 0;
  if(result > 1023) result = 1023;
  return result;
}

void settingPrint(int value, int pos){
  Serial.print(value);
  Serial.print(" ");
  Serial.println(pos);
}

3D-модели и корпус

Доступны файлы STEP со всеми деталями (released_u3k8QjPXzJ.stp) и вариант без выреза под фиксатор.

Схема подключения

Для добавления органов управления подключайте 5В и GND, используйте пины A1–A5. Файл схемы: quadrant_ZkMygPyRiE.fzz.

Производственный процесс

  1. Создание анимации и игр на LCD 16×2 с Arduino UNO
  2. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  3. Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
  4. Компактное руль-триммер для FlightGear на Arduino Nano
  5. Управление Arduino Uno из Python 3: команды через последовательный порт и демонстрация с LED
  6. Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64
  7. Сборка компактного FM-радио на Arduino Nano и RDA5807M
  8. Система учёта рабочего времени на RFID, Arduino и Google Таблицах
  9. IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
  10. Балансировка и развал-схождение колес: что нужно знать