Jump to content

Самодельные MFD для F-16 (3D печать + LCD дисплеи)


Recommended Posts

Posted (edited)

Всем привет.

Некогда посетила меня идея попробовать сделать с нуля MFD панели как у F-16 с дисплеями. Хочу поделиться с сообществом результатом моих экспериментов.

Возможно этот пост вдохновит на создание подобных элементов кокпита других вирпилов или может кому-то поможет упростить этот процесс, получив большую часть необходимой информации в одном топике.

Вдохновило меня на это - видео от GENA PILOT: Настройка LCD экранов под TM COUGAR MFD для DCS.

Идея заключалась в следующем:

  • На 3D принтере сделать рамки MFD панелей с кнопками. 
  • На базе одного Arduino сделать схему джойстика на 56 кнопок под 2 MFD панели. 
  • Запрограммировать Arduino с помощью MMJoy. 
  • Разработать схему печатной платы под тактовые кнопки, которые поместятся в MFD рамки. 
  • Сделать печатную плату из фольгированного текстолита по ЛУТ-технологии. 
  • Найти подходящие LCD дисплеи на Ali Express и собрать все в кучу. 
  • Настроить кнопки и отображение MFD экранов из DCS на LCD дисплеях.

1. 3D печать рамок и кнопок.

За основу были взяты 3D модели рамок с сайта: https://www.thingiverse.com/thing:3327543/files. Однако, модель имеет не оригинальные размеры, поэтому модель пришлось подгонять под чертежи. Кроме того, в модели есть множество мелких и не очень нужных элементов и пазов, которые могут криво напечататься, а использовать мелкие сопла или более дорогие виды пластика может существенно увеличить цену изделия. Также кнопки не имеют фасок и кнопки-качалки плоские, а в реале они вогнутые.

В общем, методом тыка и с помощью какой-то матери я подогнал 3D модели под свою задачу убрав лишние и плохопечатуемые детали, а также немного улучшив модели кнопок:

Рамки решил печатать черным пластиком, а кнопки - прозрачным, с расчетом на то, чтоб сделать им еще подсветку.

Важно! 3D модели кнопок имеют размер 1 в 1 под отверстия в рамке, поэтому их нужно печатать в масштабе 95-94% от оригинала, чтоб был зазор, иначе кнопки придется долго и нудно обтачивать на этапе постобработки, чтоб они "сели" на свои места в рамке.

Результат получился таким:

photo_2021-11-04_12-30-56.jpg

2. Arduino и схема подключения

В качестве основы для контроллера джойстика решил взять Arduino Pro micro на базе чипа ATmega32U4.

image.png

Девайс вроде минимальный по размерам, а контактов достаточно для создания нужного числа кнопок.

Каждая MFD-панель имеет 28 кнопок, соответственно для двух панелей необходимо по крайней мере 56 кнопок.

В Arduino для настройки множества кнопок применяются схемы в виде матрицы состоящая из "строк" и "столбцов". Выглядит это примерно таким образом: 

image.png

Как видно из схемы для каждой кнопки также нужно подключать диод для того, чтоб Arduino смог определять какая из кнопок в "строке" нажата.

Путем нетрудных расчетов для получения 56 кнопок нам необходима матрица из 8 строк и 7 столбцов. Итоговая схема для 2 панелей у меня получилась такой:

MFD-scheme.JPG

3. Программирование контроллера с помощью MMJOY

Для программирования контроллера я использовал информацию и софт с сайта проекта mmjoy.

Вкратце опишу процесс подключения, настройки и загрузки прошивки в контроллер исходя из текущей схемы.

  1. Скачай архив с актуальной версией MMJOY2 и распакуй в корень диска C (не рекомендуется, чтоб в пути к MMJOY была кириллица или пробелы). 
  2. Подключи плату контроллера Arduino к компьютеру. Устройство должно определиться как Arduino Leonardo и должны установиться драйверы. Если драйверы не установятся, то установи их вручную через диспетчер устройств (devmgmt.msc), указав папку разархивированного MMJOY2 в качестве источника драйверов. 
  3. Переведи в режим bootloader, для этого на плате ProMicro нужно кратковременно замкнуть и отпустить два контакта GND и RST. При этом в диспетчере устройств пропадет Arduino Leonardo и появится новое устройство Arduino Leonardo bootloader и в диспетчере устройств запомни номер COM порта, который отобразиться рядом с именем устройства. Через 8 сек. Arduino вернется в обычный рабочий режим. 
  4. Запусти MMJoySetup.exe из распакованного архива MMJOY2. Перейди на вкладку "Прошивка". Укажи следующие значения в полях: 
    1. Файл прошивки: C:\MMjoy2\Firmware\Firmware_lufa_[MMJOY2_ATMEGA32U4].hex 
    2. Чип: ATmega32U4 
    3. Загрузчик: Arduino 
    4. Порт: COM порт из предыдущего шага, например, COM4 (у тебя может быть другой порт!) 
  5. Теперь переведи Arduino в режим bootloader замкнув кратковременно контакты RST + GND. После того как bootloader определится в системе поле с номером порта должно стать зеленым. В этот момент нужно сразу нажать "Загрузить прошивку".
    Если все сделано верно, то появится окно с терминалом cmd.exe в котором будет отображаться процесс загрузки прошивки. 
  6. В результате в системе должно определиться новое устройство MMJOY2. 
  7. Выбери устройство в "Список устройств и конфигурация". Изображение джойстика слева должно стать синего цвета, это будет означать, что MMJoySetup определил контроллер с новой прошивкой и готов к программированию. 
  8. Перейди на вкладку "Настройка кнопок". И задай такие значения для рядов и строк, а также укажи напротив полей "Кнопка 1" - "Кнопка 56" соответствующие номера 1 - 56:
    image.png
    Ряды и колонки соответствуют таковым из принципиальной схемы, которую я приводил выше. Только название контактов несколько отличается, от их маркировки на плате. Приведу, на всякий случай, схему какому контакту на плате соответствуют адреса в конфигураторе MMJoySetup:
    image.png
  9. Нажми "Записать в контроллер". На этом программирование завершено. 

4. Разработка печатной платы

Печатную плату я решил делать сам "по старинке": фольгированный текстолит + трафарет на лазерном принтере перенесенный утюгом на плату + хлорное железо. Теплая, ламповая, Классика! Однако метод изготовления не принципиален.

У меня было несколько идей какую именно конфигурацию платы использовать. 

Сначала я хотел сделать квадратную цельную плату, которая помещалась бы полностью внутрь рамки, однако из-за того, что у меня не оказалось подходящего инструмента, чтоб аккуратно выпилить такой квадрат в текстолите, и после нескольких неудачных попыток от такой идеи я решил отказаться, а вместо этого сделать 4 отдельные платки на каждую "грань" MFD панели, которые планировал соединить друг с другом проводами. Для реализации схемы нужен двусторонний текстолит, так как схема достаточно плотной получается, и на одной стороне все контакты не помещаются.

Ближе к делу. Трафарет я нарисовал в sPlan6. На всякий случай выложу 2 варианта: 

Нужно распечатать один из вариантов (рекомендую вариант из 4 плат) в 100% масштабе, желательно, на термотрансферной бумаге. Я печатал на мелованной бумаге (тоже пригодна для ЛУТ-технологии изготовления плат).

Трафарет подготовлен таким образом, что при складывании листа одна сторона платы будет как-раз на своем месте над обратной стороной. При переносе тонера на текстолит, нужно очень точно расположить трафарет и желательно проверять "на просвет" что все дорожки на своих местах.

5. Делаем печатную плату

Печатаем трафарет, утюжим, травим платы в хлорном железе:

photo_2021-11-16_23-36-09.jpgphoto_2021-11-17_00-40-28.jpgphoto_2021-11-17_00-40-29.jpgphoto_2021-11-22_23-30-30 (3).jpgphoto_2021-11-22_23-30-30 (4).jpg

Лудим сплавом розе.

photo_2022-03-21_01-38-35.jpg

Далее нужно аккуратно распилить плату на 4 отдельные, просверлить отверстия сверлом в 1 мм. Я использовал такую микродрель с цанговым патроном (на фото установлена фреза вместо сверла 🙂).

photo_2022-03-21_01-42-45.jpg

Отверстия в плате рассчитаны под тактовые кнопки TACT 6x6-4.3, высотой в 4,3 мм:

image.png

Запаиваем кнопки и диоды по схеме. Диоды желательно использовать минимального размера. Впихнуть на плату их не просто. (Фото итогового результата распаянных элементов, к сожалению, я не сделал).

6. Подбираем LCD дисплеи

Здесь я пытался найти 5-дюймовые квадратные дисплеи, чтоб максимально уменьшить колхоз, и приблизиться к оригиналу, однако ничего подобного я найти так и не смог. Поэтому остановился на аналогичном варианте на AliExpress, который предлагал GENA PILOT в своем видео (спасибо ему) в полной комплектации.

LCD приехали ко мне за месяц:

photo_2022-03-21_01-58-23.jpg

Робит!

Убедись, что у тебя найдется 2 лишних HDMI порта на видеокарте :music_whistling:

7. Сборка, настройка, проверка

Платы спаиваем по схеме тонкими проводами. Фиксируем их на плате спермотермоклеем, так как они легко отрываются от посадочных мест. Проверяем, что все кнопки работают, и нигде не ошиблись на этапе пайки/прогроммирования. Тестировать удобно в MMJoySetup, выбрав контроллер из списка и перейдя на вкладку "Настройка кнопок". Нажми также "Считать из контроллера". Нажатие кнопок будет отображаться красным цветом. 

Подгоняем пластиковые кнопки и устанавливаем их в корпус MFD-панели. Если нужно дорабатываем их напильником надфилем и наждачкой. 

Устанавливаем платы в корпус MFD рамки. Фиксируем немного термоклеем по краям. Нужно убедиться, что кнопки встали ровно и нормально нажимаются. Если необходимо, "подравниваем" кнопки на плате, особенно это касается кнопок под "качалками", если впаять кнопки криво, то они могут плохо нажиматься. 

Если все ок - приклеиваем термоклеем основательно. 

LCD дисплеи я также аккуратненько по краям посадил на термоклей. Плату управления и контроллер LCD с обратной стороны экранов прикрепил на толстый двусторонний скотч. По 4 "жвачки" по углам платы, чтоб был зазор и плата как бы висела в воздухе (тут желательно под плату положить еще диэлектрик, так как корпус LCD металлический и можно легко замкнуть что-то на плате). 

Подключаем USB + HDMI к компу.

Теперь нужно настроить расположение LCD экранов в конфигурации мониторов DCS. 

Для этого в папке DCS World\Config\MonitorSetup необходимо создать новый файл конфигурации мониторов. Здесь все индивидуально и зависит от разрешения и конфигурации ваших мониторов. В моем случае конфигурация такая (маленькие LCD в настройках Windows я развернул в вертикальное "книжное" положение, по умолчанию они используют "альбомное" отображение).

image.png

Глобальные координаты рендера в DCS отсчитываются из верхнего левого угла самого левого дисплея. Поэтому необходимо подгадать координаты таким образом, чтоб каждый дисплей ровно отображал информацию и "вписывался" в свое место.

В моем случае координаты получились такими:

_  = function(p) return p; end;
name = _('Camera + LMFCD + RMFCD + Custom');
Description = 'Left MFCD on the left, Right MFCD on the right and camera on the center'
Viewports =
{
     Center =
     {
          x = 768;
          y = 0;
          width  = 1920;
          height = 1080;
          viewDx = 0;
          viewDy = 0;
          aspect = 1920 / 1080;
     }
}

LEFT_MFCD =
{
     x = 60;
     y = 280;
     width = 688;
     height = 688;
}

RIGHT_MFCD =
{
     x = 2748;
     y = 280;
     width = 688;
     height = 688;
}

UIMainView = Viewports.Center
GU_MAIN_VIEWPORT = Viewports.Center

Запусти DCS:

  • Установи разрешение экрана исходя из суммы ширины всех дисплеев и высоты самого высокого. В моем случае это 768+1920+768 = 3456x1080. Выбери конфигурацию мониторов.
  • Назначь кнопки OSB1 - OSB20 а также GAIN +-, SYM +-, BRT +-, CON +-.

Результат

photo_2022-03-21_03-03-29.jpgphoto_2022-03-21_02-55-02.jpg

Также записал коротенькое видео (снимал на кусок текстолита, за качество сорян)

Имеющиеся косяки и планы

  • На текущий момент я сделал только 1 MFD (для второго жду необходимые материалы, текстолит и прочую мелочь).
  • Нет крепления, его я не продумывал и поэтому пока колхоз.
  • Дисплеи не всегда с первого подключения определяются в системе (возможно у меня плохой кабель).
  • В корпусе не предусмотрены нормальные посадочные места для платы, поэтому все держится на термоклее.
  • Подсветку планирую сделать, но пока не знаю как. Внутри все довольно плотно, но что-то придумаю.
  • На кнопках нет символики. Я планировал сделать трафарет и покрасить кнопки серой краской поверх трафарета, чтоб прозрачными были только символы и при наличии подсветки все было бы аутентичненько, но я пока не знаю как сделать такой мелкий трафарет с буквами SYM, GAIN и т.д.
  • Внутри текущей рамки, есть посадочные места и отверстия под крепление, которые видимо планировал использовать автор 3D модели, однако мне они помешали и мне пришлось их спилить фрезой. Поэтому 3D модель, вероятно, придется оптимизировать с учетом этого недостатка.

Расходы

  1. 3D печать 2 рамок с кнопками - $ 35
  2. 2 x LCD панели - $ 78
  3. Текстолит, хлорное железо, диоды (FR207), кнопки (TACT 6x6-4.3) прочая мелочь ~ $ 10
  4. Arduino Pro Micro - $ 8

Ссылки на файлы одним архивом:

Пост писал на одном дыхании, так что мог что-то забыть/упустить.

Задавайте свои ответы если что, буду рад ответить :joystick:

Edited by Martyr
  • Like 6
  • Thanks 2

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

Posted

Солидно выглядит. Единственное, я слышал, что вместо диодных матриц удобней и выгодней использовать сдвиговые регистры. Сам не электронщик, просто что-то осело в голове :)

  • Like 1

AMD Ryzen 7900 / 64 GB / 4070

----

Вы знаете сколько я слышал разных идеологий? И все они были прекрасны и убедительны. Коммунизм, толерантность, демократия, равноправие, капитализм, свободный рынок. А побеждает всегда почему-то информированность, точность прицела и масса секундного залпа. © bash.org.ru (чуть поправлено)

  • 2 years later...
Posted (edited)

Привет! Подскажи, а кнопки Gain и Brt работают? меняется ли яркость на самом lcd? 
Заметил ли какие-то особенности за 2 года, на которые стоит обратить внимание?
Например, интересно понять как будет выводитсья изображение на LCD, когда в игре на этот экран в кабине падает свет. В ДКС зачастую плохо бывает видно, если солнце начинает отсвечивать в МФД. В этом случае игра на LCD выводит этот засвет или транслируется чистая картинка?
Спасибо заранее за ответ)

Edited by rozjkeee
  • 3 months later...
  • ED Team
Posted
В 21.03.2022 в 05:38, Martyr сказал:

Трафарет я нарисовал в sPlan6

Маленькое замечание. sPlan - это программа рисования электрических схем, а печатные платы у Вас сделаны (судя по расширению файлов) в другой программе - Sprint Layout.

Очень хорошо выполнено и описано!

  • Like 1

Men may keep a sort of level of good, but no man has ever been able to keep on one level of evil. That road goes down and down.  
Можно держаться на одном уровне добра, но никому и никогда не удавалось удержаться на одном уровне зла. Эта дорога ведёт вниз и вниз.

G.K. Chesterton

DCS World 2.5: Часто задаваемые вопросы

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...