Начал собирать джойстик. И куда меня это завело

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

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Вступление

Мой хороший знакомый Саня (Лосяра) поделился ссылкой на джой, проект показался интересным, да и к тому же очень не хватало РУДа для симуляторов. (играю в DCS, Ил-2 Штурмовик, War Thunder).
В основу лег вот такой проект от товарища MagniBY https://www.thingiverse.com/thing:4935709 , который в свою очередь, брал наработки пользоватей @busel и @propeler с форума "Ил-2: Штурмовик".
Отличие моей версии - буду использовать платы сдвиговых регистров.

4 оси, 2 крутилки потенциометров, 5 тумблеров, 1 джойстик (как на джойстиках от плойки/Xbox), 3 хатки (5ти позиционные кнопки), 5 кнопок.

Прошивка для платы - Freejoy

Комплектующие и цены

Общая стоимость проекта - 11 тыс. руб.
* Из них комплектующие - 4200 руб. 3д печать - 7000 руб. Заказывал у этих товарищей - https://3ddworld.ru/ Кажется, можно было найти дешевле. Если есть свой принтер, то на пластик ушло бы тысячи 2-3.

Многие лоты на Али составляли бОльшее количество деталей, нежели мне было нужно + стоимость доставки уже включена в цену.
Итак, комплектующие и инструменты:

Болты, шурупы и пр.:

  • M4 болт 20mm - 26 шт

  • M4 гайка - 32 шт

  • M3 болт 10mm - 36 шт

  • M3 болт 20mm - 8 шт

  • M3 гайка - 8 шт

  • M2 болт- 8 шт

  • M1.7 болт - 4 шт

Процесс сборки

1. Прошивка.
Первое что я сделал - подключил программатор и прошил плату. Это делается один раз. В дальнейшем при изменении конфигурации пинов - просто подлючаем по USB плату и меняем в программе что нам нужно, программатор ST-link больше не потребуется.
Ниже детали, как накатить прошивку:

Скачиваем утилиту https://www.st.com/en/development-tools/stsw-link004.html и прошивку FreeJoy (ссылка на последние релизы)

Подключаем программатор ST-Link v2 как показано на рисунке ниже (сверяйтесь с подписями контактов на программаторе и плате контроллера):

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

фотка с github freejoy

Далее Подключаем программатор ST-Link v2 к компьютеру;

Запускаем программу ST-Link;

Нажмите в программе "File->Open File" и выберите файл с расширением .hex который расположен в архиве релиза FreeJoy;

Теперь вы увидите страницу загрузки бинарных кодов:

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Нажмите "Target->Connect". После подключения устройства вы можете видеть такую информацию как ID устройства, размер флэш-памяти и семейство устройства в блоке сверху и просмотреть содержимое внутренней памяти в основном блоке:

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

На этом этапе может оказаться, что выдается такое сообщение: "STM32 cannot read memory. Disable read out protection and retry". Для того, что бы продолжить прошивку, необходимо нажать: пункты меню "Target", "Option Bytes" в окошке "Read Out Protection" (в левом верхнем углу) заменить "Enabled" на "Disabled" и нажать "Apply".

Нажмите "Targert->Erase chip" и "OK" в открывшемся окне;

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Теперь нажмите "Target->Program & Verify" и в открывшемся окне нажмите "Start". Начнется программирование контроллера:

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

После успешного программирования контроллера отключите все соединения и подключите плату контроллера к компьютеру посреством MicroUSB кабеля.

FreeJoy устройство определится в системе как игровой контроллер.


2. Пайка осей
Начал я сразу с пайки осей - в джойстике для меня это была самая главная функция.

Для проверки что у нас уже всё будет работать - спаял по схеме первый датчик.

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

схема пайки датчика Хола и назначения контакта на плате STM32

Схема поключения датчиков Хола.

Между левой и центральной ножками (если смотреть на датчик "спереди") напаиваем конденсатор.

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

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

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

Правую ножку паяем на контакт А7, а в программе FreeJoy Configurator назначаем пину А7 значение Axis_Analog.

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

на фотке - уже промеченные мной контакты платы. А7-А0 под оси и крутилки, остальное идет под кнопки (сдвиг регистры)

Далее в программе на вкладке Axes Config в выпадающем списке выбираем нашу ось и пин А7. И записываем в плату (подключаем по USB и жмем Write Config to device).

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

После чего не отключая от ПК плату можем протестировать - поднести магнит к дачику на 0.5-0.7 мм и покрутить - в программе увидим что значение оси изменяется.

Мы великолепны - теперь отключаем плату от ПК и напаиваем остальные 3 датчика Хола аналогичным способом (правые ножки паяем на пины А6-А4, центральные на питание 3.3V, левые - на GND), прописываем в программе FreeJoy значения пинов, не забывая записывать наши изменения (Write config to Device).
Готово, укладываем дачики холла в джойстик. Собираем ручки осей (подшипники вставляем в пазы напечатанных деталей, наклеиваем фетр, собираем ручки).

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

ручка газа в сборе

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

фетр для "загрузки" осей, держится хорошо,+ прижимной скобой можно регулировать податливость ручки газа

Прижимаем фетр скобкой и закручиваем

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

запасайтесь цветными проводами! иначе придется клеить бумажки и нумеровать - что не так удобно (совсем не удобно)

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

3. Пайка кнопок, тумблеров, джойстика

Здесь мы имеем дело с а) платой сдвиговых регистров б) 5ти позиционными кнопками, (6 лапок) в) джойстиком. г) кнопками (4 лапки)

Первым делом разберемся и спаяем тестовый вариант, проверим что всё работает.
Берем сдвиговый регистр и припаиваем его к плате.
Сдвиговый регистр паяем так: вставляем коннектор с проводами с той стороны, где подписано DATA OUT (смотри на плату сверху). На моем фото это ряд контактов наверху.

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

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

GND припаиваем к плате STM32 на землю GND.

VCC припаиваем на 3.3V.

CS припаиваем на контакт B11 на плате STM32.

DATA припаиваем на B1.

SCK припаиваем на B10.

Теперь берем коннектор, вставляем в плату сдвигового регистра - отсюда у нас выходят 5-6 проводов. Крайние провода - земля, центральные - это питание.

Начинаем паять кнопку - нам нужно припаяться к земле и к одному из проводов в центре, паяем наискосок (замыкание идет в центре, поэтому упрощаем себе задачу):

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Готово - подключим плату STM32 по USB к ПК, в программе FreeJoy назначим контактам

B11 - ShiftReg Latch,

B1 - ShiftReg Data,

B10 - ShiftReg CLK

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

накидал себе в экселе распиновку на плате STM32 и сдвиговых регистрах, чтобы не запутаться

Соответсвие контактов на регистре пинам на плате STM32 и назначениям в программе Freejoy

На вкладке Shift Registers выбираем тип регистра CD4021 Pull Up, прописываем количество кнопок = 24 (на фото я уже припаял 2ю плату регистров)

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Записываем на устройство, открываем вкладку Button Config и проверяем что наша кнопка работает при нажатии.

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Кнопки в итоге спаиваем по схеме - Крайние провода это земля, их можно припаивать цепочкой, второй контакт паяем на провода посередине коннектора, не соединя между собой:

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

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

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Один коннектор дает возможность припаять до 4 проводов питания кнопок. Можно припаивать одну кнопку к разным коннекторам (т.е. земля от одного коннектора, а провод питания идет от другого коннектора).

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост
Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

уместить всё в ручку оказалось еще той задачей. Хорошо, что использовал сдвиговые регистры, иначе с матрицей кнопок намучился бы..

Далее я паял джойстика, тумблеры и крутилки (потенциометры).
Дальнейший процесс опишу в ближайшее время + надо схему всего этого чуда накидать.

Итоговый результат

Начал собирать джойстик. И куда меня это завело Joystick, Руд, Своими руками, Dcs, Авиасимулятор, Кокпит, 3D печать, Видео, YouTube, Длиннопост

Видео, где показываю работоспособность девайса

Спасибо за внимание. Надеюсь, статья пригодится и поможет.

Лига 3D-принтеров

2.8K постов12.5K подписчика

Правила сообщества

Запрещено хамство и оскорбления, уважайте чужой опыт и труд

Вы смотрите срез комментариев. Показать все
31
Автор поста оценил этот комментарий

Товарищ, продавший тебе три копеечных микросхемы за 2000 руб, тебе совсем не товарищ.
Сделать этот функционал на таком же STM32 - в 13 раз дешевле по твоим ценам.

Ну и кстати. На твоей же плате процессорной - больше 24-х пинов свободных. Зачем регистры сдвига?

раскрыть ветку (17)
14
Автор поста оценил этот комментарий

И опять же, датчики холла и магниты обошлись тебе в 380 руб
Трёхосевой акселерометр ST-LIS2D - такой или такой:
https://www.chipdip.ru/product0/8001776355
https://www.chipdip.ru/product0/8001781692
даст тебе 3 проекции ускорения свободного падения на три оси и в результате - ориентацию чипа относительно вертикали. Лепишь его на нижний конец актуатора и знаешь куда его наклонили и на какой угол.

UPD: Ой сорри. Я думал у тебя это самое, которое по всем направлениям наклоняется.

раскрыть ветку (7)
9
Автор поста оценил этот комментарий

акселерлметры шумят как черти, шумы програмно давить надо, не факт, что stmка потянет

раскрыть ветку (5)
3
Автор поста оценил этот комментарий

Чего там тянуть? Считай среднее в окне и всё. Хранишь например 32 значения АЦП. К значению выхода фильтра каждый раз добавляешь 1/32 самого нового значения, вычитаешь 1/32 самого старого. Деление выполняется тупо сдвигом вправо. Нет места хранить старые значения - вычитай вместо них 1/32 последнего выхода фильтра (экспоненциальное сглаживание)

PS: Ему не надо акселерометр у него 4 отдельных рычага.

раскрыть ветку (3)
3
Автор поста оценил этот комментарий

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

раскрыть ветку (2)
Автор поста оценил этот комментарий

BNO080, можно программировать сам акселерометр и менять чувствительность.

1
Автор поста оценил этот комментарий

Абсолютно без разницы. Если износ смещает акселерометр, то он и датчик Холла сместит. Другое дело, что калибровка нуля станет обязательной при каждом включении, если не чаще, т.к. сам девайс установят с наклоном, а акселерометр покажет наклон рычага.

Автор поста оценил этот комментарий

stmка потянет на ура прям.

Автор поста оценил этот комментарий

Да, это РУД.

3
Автор поста оценил этот комментарий

А об этом я не подумал 🤔 спасибо за идею, добавлю в пост ремарку

раскрыть ветку (8)
2
Автор поста оценил этот комментарий

Конденсаторы, которые давят шумы на аналоговых входах - лучше разместить у входов, т.е. на контактах STM32-платы, а не на контактах датчика. Будет меньше шумов. Хотя эта разница может оказаться для тебя несущественной.

раскрыть ветку (7)
2
Автор поста оценил этот комментарий

Хмм, на сайте freejoy приведена обратная информация: "Сглаживающий конденсатор рекомендуется располагать как можно ближе к датчику." https://github.com/FreeJoy-Team/FreeJoyWiki/blob/master/rus/Подключение-датчиков-Холла.md

раскрыть ветку (3)
1
Автор поста оценил этот комментарий

Помехи наводятся на провод. Это приводит к тому, что напряжения с разных сторон одного и того же провода - разные. Т.е. датчик выдаёт одно напряжение, а на другом конце - получается напряжение+помеха. Представь, что это очень большой конденсатор и делает напряжение абсолютной константой. Если он будет размещён на АЦП, то константа будет на АЦП, а если у датчика - константа будет на датчике.

У тебя же есть паяльник. Пересадить конденсатор на другой конец и сравнить плёвое дело.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Тоже верно🙂 займусь при случае, как раз скоро новая плата приедет, хочу экран с кнопками попробовать собрать

раскрыть ветку (1)
Автор поста оценил этот комментарий

Можешь не пробовать. На питании - возле сенсора. Правильно.
Я подумал он на сигнальной цепи и морочу тебе голову совершенно напрасно.

2
Автор поста оценил этот комментарий

Но вообще да, шумы не критичные получились, программно пороги выставил и получилось неплохо

2
Автор поста оценил этот комментарий
Так здесь кондер на питании датчика, а не на сигнале, все правильно. Нам и надо сделать стабильное питание датчика
раскрыть ветку (1)
Автор поста оценил этот комментарий

На питании?
Тогда - ой. Тогда у сенсора, конечно.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку