
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04


Я решил переключить свой передатчик JETI DC-16 из режима 2 в режим 1, который в основном переключает газ и руль высоты слева направо и наоборот. Поскольку я не хотел разбивать одну из моих моделей из-за некоторой путаницы в левом / правом в моем мозгу, мне было интересно, можно ли немного попрактиковаться в FSX.
Я прочитал и протестировал передатчики JETI, которые действительно поддерживают режим джойстика из коробки, однако мне нужна была полная гибкость для назначения осей и переключателей и использование TX как с реальной моделью. Используя выход приемника, также можно усилить обработку сигнала в DC-16 и использовать микшеры, фазы полета, двойные скорости, все, что вы можете там запрограммировать.
Недавно я нашел хороший урок о том, как сделать устройство ввода USB HID, а именно джойстик, из дешевого Arduino, такого как Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Это сделало бы возможным все необходимое для управления самолетом / вертолетом / чем угодно в FSX! Доступно множество осей и кнопок.
Поскольку у меня только что был запасной JETI RSAT2, я решил подключить его к Arduino и попытаться реализовать небольшой анализатор PPM вместе с библиотекой Joystick.
Я предполагаю, что кто-нибудь, выполняющий эти шаги, знаком с подключением и программированием Arduino. Я не возьму на себя никаких гарантий в случае неисправности или повреждения!
Запасы
Тебе понадобится…
- любой Arduino, поддерживаемый библиотекой Joystick, я использовал Sparkfun Pro Micro 5V / 16 MHz
- последняя версия Arduino IDE
- любой RC-приемник, выводящий сигнал PPM, например JETI RSAT2
- несколько перемычек (минимум 3)
- библиотека Joystick, установленная в Arduino IDE
- библиотека таймера arduino:
Шаг 1: Подключите RX и Arduino


Подключение довольно простое. Я решил запитать Arduino только от USB, так как он должен имитировать джойстик. Это обеспечит питание Arduino напряжением 5 В, которое также можно использовать для питания RC-приемника.
Я использовал контакт VCC, который обеспечивает регулируемый выход, и ближайший контакт Gnd - просто подключите его к контактам + и - разъема PPM. Когда Arduino получает питание, теперь включается и приемник.
Для сигнала PPM я решил использовать прерывания для их анализа. Доступны прерывания, например на выводе 3, поэтому просто подключите его туда - на Arduino нет «родного RC-вывода», но, возможно, больше и разных способов считывания сигнала приемника.
Мне пришлось отключить сигнализацию напряжения RX, так как напряжение VCC с питанием USB будет всего около 4,5 В, но довольно стабильно, так что никаких проблем.
Шаг 2: получение сигналов PPM


Когда на приемник И TX подается питание, я получал сигналы PPM, как показано на изображении. 16 каналов, повторяющиеся вечно. Если отказоустойчивый на RSAT отключен и питание передатчика отключено, выход PPM будет отключен.
Более подробная информация о PPM доступна здесь:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Поскольку в данном случае я не летаю на реальных вещах, я не обращал внимания на теоретические тайминги и просто выяснил на осциллографе, что мой приемник фактически выводил при перемещении стиков из крайнего левого положения в крайнее правое (стандартные настройки в TX).. Казалось, -100% соответствует импульсам длительностью 600 мкс, а + 100% - 1600 мкс. Я также не заботился о длине импульсов паузы (400 мкс) в моем коде Arduino, но я предположил, что интервал между кадрами равен мин. 3000 мкс.
Шаг 3: Настройка передатчика



Поскольку необходимо знать только фактическое положение управляющих поверхностей, достаточно одного канала / «сервопривода» для каждой функции RC. Следовательно, можно сделать довольно простую настройку передатчика - аналогично обычной RC-модели. Для основных функций элеронов, руля высоты, руля направления и дроссельной заслонки требуется только один канал сервопривода или передатчика. Я также добавил закрылки, тормоза и редуктор, оставив пока 9 каналов свободными. Обратите внимание, что закрылки переведены в фазу полета и не управляются напрямую с помощью джойстика, ползунка или кнопки.
Шаг 4: Запуск джойстика


Библиотека джойстика довольно проста в использовании и содержит несколько примеров и тестов. Было бы полезно сначала проверить, определяется ли Arduino как правильный джойстик, инструкции, указанные в разделе ввода, и сама библиотека дают хорошее руководство.
На панели управления «Устройства и принтеры» Arduino отображался как «Sparkfun Pro Micro», а в окне тестирования джойстика отображалось 7 осей и множество поддерживаемых кнопок. При программировании в Arduino можно использовать даже переключатель шляпы.
Шаг 5: Кодирование Arduino


Чего еще не хватает, так это фактического анализа сигнала PPM и назначения осям и кнопкам джойстика. Я выбрал следующее отображение:
Назначение канала / функции / джойстика:
- Дроссельная заслонка -> Ось дроссельной заслонки
- Элероны -> ось X
- Лифт -> ось Y
- Руль направления -> ось вращения X
- Закрылки -> ось вращения Y
- Тормоз -> ось Z
- Шестеренка -> Кнопка 0
Когда передача понижена, должна быть нажата первая кнопка джойстика и будет отпущена при поднятии передачи. Однако для этого потребуется FSUIPC для FSX, из коробки FSX будет принимать только кнопку для переключения передач, что не совсем то, что происходит с моими моделями.
Я снабдил свою текущую версию кода множеством комментариев, которые мне очень подходят - не стесняйтесь изменять свое назначение или добавлять новые функции. Последние 9 каналов RC в настоящее время не используются.
Для настройки необходимо инициализировать класс Joystick, в основном путем определения диапазонов числовых осей:
/ * Устанавливаем диапазон осей (определяется в заголовке, 0 - 1000) * /
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Используя значения от 0 до 1000, можно напрямую сопоставить длительность импульса (600 - 1600 мкс) значениям джойстика без изменения масштаба.
DIN 3 инициализируется как цифровой вход, подтяжки включены и прерывание присоединено:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
В целях отладки я добавил несколько распечаток через последовательный интерфейс через регулярные промежутки времени, используя библиотеку arduino-timer:
если (SERIAL_PRINT_INTERVAL> 0) {
scheduler.every (SERIAL_PRINT_INTERVAL, (void *) -> bool {SerialPrintChannels (); return true;}); }
Прерывание вывода будет вызываться всякий раз, когда логическое значение вывода изменится, то есть для каждого фронта сигнала PPM. Оцените длину импульса с помощью простого тайминга с помощью micros ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Новые импульсы можно классифицировать, оценивая текущее состояние вывода и комбинируя его с длиной импульса и прошедшими импульсами. Следующее условное выражение обнаружит разрыв между кадрами:
if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
Для последующих импульсов длина импульса будет отображаться в состояние оси путем ограничения и смещения длительности импульса, чтобы соответствовать диапазону оси джойстика:
uint16_t rxLength = pulseLength;
rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxLength - 600;
В конечном итоге массив rxChannels содержит 16 значений от 0 до 1000, указывающих положение стика / ползунка и кнопки.
После приема 16 каналов выполняется сопоставление с джойстиком:
/ * оси * /
Joystick.setThrottle (каналы [0]); Joystick.setXAxis (каналы [1]); Joystick.setYAxis (1000 - каналы [2]); Joystick.setRxAxis (каналы [3]); Joystick.setRyAxis (каналы [4]); Joystick.setZAxis (1000 - каналы [5]); / * кнопки * / Joystick.setButton (0, (каналы [6] <500? 1: 0)); / * обновление данных через USB * / Joystick.sendState ();
Я инвертировал некоторые оси в коде, что не является абсолютно необходимым, поскольку ось также может быть инвертирована путем изменения направления сервопривода или назначения в FSX. Однако я решил сохранить направление сервопривода, а также исходное назначение FSX.
Кнопка включается или выключается пороговым каналом 7.
И не забудьте поставить галочку в планировщике… иначе отладочные отпечатки не будут видны.
void loop () {
scheduler.tick (); }
На скриншоте, который я прикрепил, вы можете видеть, что канал 1 был перемещен с 1000 (полный газ) на 0 (холостой ход).
FSX обнаружит Arduino так же, как любой другой джойстик, поэтому просто назначьте кнопку и оси и получайте удовольствие от взлета!
Что мне действительно нравится в этом подходе, так это то, что вы можете просто использовать свой передатчик, как с реальной моделью, например с использованием фаз полета и т. д.
Рекомендуемые:
Блок расширения джойстика для клавиатуры Arduino и устройство звукового контроллера с использованием Deej: 8 шагов

Arduino Keyboard Joystick Extender Box и Sound Controller Thing с использованием Deej: Почему Некоторое время я хотел добавить к моей клавиатуре небольшой джойстик для управления элементами интерфейса или других небольших задач в играх и симуляторах (MS Flight Sim, Elite: Dangerous, Звездные войны: эскадрильи и т. Д.). Кроме того, для Elite: Dangerous я был
БУСТ-КОНВЕРТЕР С ИСПОЛЬЗОВАНИЕМ ЯЧЕЙКИ ДЛЯ МОНЕТ: 4 шага

ПРЕОБРАЗОВАТЕЛЬ ПОВЫШЕНИЯ С ИСПОЛЬЗОВАНИЕМ МОНЕТНОЙ ЯЧЕЙКИ: Привет, ребята … Вот мой новый инструктаж. Батарейные элементы используются в повседневной жизни в качестве источников энергии для портативной электроники. Основным недостатком ячеек является рабочее напряжение. Типичная литиевая батарея имеет нормальное напряжение 3,7 В, но
Коробка передач для компьютера, сделанная из старого джойстика (H-shift): 8 шагов

Коробка передач для компьютера, сделанная из старого джойстика (H-shift): Вам нравятся машины? Вам нравится настоящее вождение? У вас есть старый джойстик? Это вам инструкция:) Я покажу вам, как сделать коробку передач для компьютера из старого джойстика.- --------------------------------------------------
Дополнение для джойстика Thrustmaster Warthog: 5 шагов (с изображениями)

Дополнение для джойстика Thrustmaster Warthog: здравствуйте, пожалуйста, будьте осторожны со мной .. это мой первый инструктаж. Мне нужно было еще несколько кнопок и топоров на моем " warthog " джойстик, для игры в опасную элиту. переключаться между джойстиком и клавиатурой с "трещиной" - неинтересно. на твоем он
Недорогая подставка для ноутбука / конвертер ноутбука в настольный: 3 шага

Недорогая подставка для ноутбука / преобразователь ноутбука в настольный: Я часто использую свой ноутбук. Через некоторое время это действительно становится некомфортно. В идеале клавиатура и экран должны быть разделены, чтобы снизить нагрузку на шею при длительном использовании. Если вы постоянно пользуетесь ноутбуком, я предлагаю вам создать