Модифицировал контроллер для DJ Hero, чтобы тебе не пришлось этого делать
А может всё-таки стоит сделать, штука весёлая и недорогая, заодно хорошая практика в паяльном деле! Но обо всём по порядку. Начну, пожалуй, с того, что такое вообще DJ Hero.
Это такая ритм-игра, в которой вам нужно крутить DJ-диск (который можно назвать английским словом turntable, я буду использовать его в дальнейшем, русские аналоги звучат не очень) и двигать энкодер-ручку эффектов (effects knob) и кроссфейдер, имитируя таким образом работу диджея. По сути вам нужно нажимать кнопки на самом turntable (их всего три) в зависимости от того, какая из них достигает горизонтальной полосы. Вертикальных полос также три. Боковые кнопки могут содержать секции скретчинга, где вам нужно крутить диск определённым образом, а у центральной бывают секции со спамом кнопки для вызова диджейских эффектов. Энкодер отвечает за бонусные секции, а кроссфейдером нужно пользоваться, если вертикальная полоса смещается. Так и вы смещаете положение энкодера. Также существует и кнопка Euphoria, как и у игр серии Guitar Hero, при нажатии которой можно получать больше очков определённое время. Есть ещё некоторые особенности геймплея, но ограничимся базовыми знаниями. Я плохо описываю геймплей, поэтому лучше взглянуть на видео.
Вы уже могли догадаться, что серия DJ Hero связана с Guitar Hero, ведь по сути у них один издатель - Activision. Серия игр не была такой успешной, как GH, поэтому продержалась довольно недолго. Всего вышло две части, планировалась версия для 3DS, но по итогу разработку свернули. Я думаю, что игре не повезло выйти в 2009 году (вторая часть была уже через год), поскольку популярность EDM и диджеинга в целом тогда была не такой высокой, как сейчас. В любом случае, у игры до сих пор есть небольшое сообщество, где фанаты разрабатывают свои чарты (уровни) и моддят игру.
В своё время я мечтал поиграть в такое, поскольку был фанатом электронной музыки, но стоимость этой штуки была для меня большой и я отложил мечту в долгий ящик. Хотя в ритм-игры впоследствии я вошёл совсем с другой игры - Project DIVA. Игре не требовался специальный контроллер, что являлось для меня тогда плюсом. За длительный период с 2017 года я попробовал множество других ритм-игр, хотя окончательно пересел на игры с контроллерами только в 2023 году. А затем уже и про DJ Hero вспомнил.
Собственно, перейду к самому процессу создания, то, ради чего и писалась статья. Началось всё с раздумий, в какую ритм-игру ещё стоит попробовать поиграть. Я листал Авито в поисках интересных объявлений. В основном искал какие-нибудь контроллеры для BEMANI игр (beatmania, SOUND VOLTEX и т.д.), пока на глаза не попалось объявление с DJ Hero контроллером всего за 300 рублей. Но у него был один нюанс - в комплекте не было приёмника для подключения к PS3. Я думал, что соображу по ходу, как быть с этим, поэтому быстро договорился с продавцом и заказал себе это чудо через доставку DPD. Ужасный сервис, кстати, везли мне его две недели. Забрал, принёс домой, проверил - всё в порядке.
Это первая версия контроллера для первой части игры. На задней части имеется наклейка, которая это подтверждает. У контроллера для DJ Hero 2 отличается картинка на диске, а также указывается, что он только для PlayStation 3. Но так или иначе, данные контроллеры работают и на PlayStation 2 в первой части игры. Диск с кнопками съёмный - его можно переместить в левую часть, если вам так удобнее играть. Как я понял, что-то типа опции для левши.
Да, на диске имеются три мембранные кнопки, сам диск крутится, достаточно свободно… Я бы сказал даже слишком, у него вообще нет никакого сопротивления! В тот момент я начал сомневаться, что такую штуку можно использовать для игры в beatmania. Но я всё равно испытал её там, но об этом чуть позже. А на центральной панели имеется кнопка для вызова Euphoria, effects knob и ниже кроссфейдер, как на настоящем DJ-пульте, только не сильно фиксирующимся везде, кроме центра. Сверху располагаются привычные кнопки навигации PlayStation. У контроллера есть и версия для Xbox, там кнопки отличаются. Особенно выделяется версия для Wii, в ней вместо кнопок размещён слот для вставки Wii Remote. Сама панель также немного шире.
На следующий день я полез разбирать контроллер. Внутри всё было достаточно хорошо организовано.
Сразу бросается в глаза зелёная плата сверху. Это и есть мозг контроллера. Он разработан не только для DJ Hero, такой же установлен в гитару для Guitar Hero 5. Остальные штуки подключаются к основной плате через шлейфы и прямые подпайки. Питание через батарейки подключается отдельно. Первым делом я отключил его и убрал подальше, благо это довольно легко. Качество внутренностей оставляет желать лучшего. Компоненты используются крайне дешёвые и у многих людей при активной игре могут быстро выходить из строя. Я знаю, что механические энкодеры быстро портятся. Здесь как раз такой стоит. Для подключения диска Turntable к основе используются проприетарные разъемы, ими стоит дорожить, замену найти сложновато. Ещё одна причина отказаться от совместной реализации с beatmania.
Через пару дней я решил заняться выпаиванием основной платы. Как видно по фото, точек пайки довольно много, пришлось изрядно повозиться. Я лишь любитель, поэтому поначалу было сложно. Что-то не очень удачно отпаялось, но я всё же добился своего. Ушёл где-то вечер на это дело. И вот, перед нами обратная сторона. Маленькая плата в плате отвечает за беспроводную связь, что видно по наличию антенны.
Плата с кнопками не отличается сложным устройством. Типичные контакты под мембраны, а также места для подключения других элементов управления.
Кнопка Euphoria же включает в себя зачем-то две мембраны и небольшой светодиод, подключаемый отдельным пином.
Что ж, теперь нам нужно дать этому телу новый мозг! Выбор пал на Raspberry Pi Pico, как самый дешёвый вариант. Где-то в районе 200 рублей на AliExpress вполне реально найти подходящий клон со всем необходимым. Бонусом взял проводочки. И вот, спустя ещё пару-тройку недель ожидания детали приходят.
Теперь пора присоединить плату. Используя паяльник и припой, я соединял проводами нужные контакты. Но сначала я не знал, что к чему подключать. Параллельно я думал над программной начинкой. Изначально хотел писать код с помощью Arduino IDE, изучил ещё существующий CircuitPython, но не понимал, как именно работает подключаемый Turntable. Немного изучил в Интернете, что вообще делают люди и выяснил, что это обычное устройство I2C, у которого есть свой метод обмена информацией. К счастью, нашлись люди, которые это дело расшифровали. Нашёл точки подключения I2C на Pico (благо их там много) и припаял. Кнопки это обычные пины, поэтому нет особой разницы куда их подключать. Энкодер и кроссфейдер необходимо подключать к аналоговым пинам. Пайка была тяжкой, из-за неумения очень тяжело было припаять всё аккуратно. Решил разместить плату справа от контактов. По итогу получилось как-то так.
Да, получилось не очень красиво. Теперь пора это тестировать! Но я так и не разобрался с прошивкой. В Интернете нашёл прошивку для Guitar Hero, там же, где и информацию про методы передачи данных с I2C устройства Turntable. Я скачал её и о чудо! Я увидел в списке доступных устройств мой контроллер.
Да, это целая программа, где можно настроить тип контроллера, кнопки назначить под пины, а затем прошить готовую прошивку в микроконтроллер. Правда, после прошивки работало далеко не всё. Кнопка Euphoria всегда светилась (кстати, в настройках кнопка Triangle и Euphoria раздельны, но по факту они идентичны даже на плате), кроссфейдер и энкодер не работали корректно, а на PS3 контроллер вообще не определялся. Я не потянул бы написание даже такой прошивки с нуля, поэтому подумал, что было бы неплохо написать автору прошивки и спросить у него, почему это всё не работает должным образом. Так началось моё небольшое сотрудничество с sanjay900, автором прошивки Ardwiino или будущей Santroller. Первым делом, я указал на проблемы прошивки. Он мне сообщил, что как бы поддержки DJ Hero и нет, но делается в другом проекте (собственно Santroller). Проблемы аналоговых частей были связаны с плохим заземлением. Но оказалось, что это не так, и я узнаю об этом сильно позже, чем нужно было.
Переписка шла достаточно, я по сути тестировал прошивку, помогал с какой-то информацией. Поведение Turntable было непредсказуемым, резким. Так, спустя время sanjay900 добавил смягчение ввода, управлять стало более приятно и в самой игре. Поначалу я тестировал это в эмуляторе, но затем уже перешёл на реальную PS3. Долго возились со странным поведением аналоговых пинов. Они выдавали странные значения. Так, спустя много проверок и замеров я отчаялся и сдался. Увы, в этот раз ничего у меня не вышло. Я подумал, что во время болезненной отпайки ножек с пинов я повредил плату. Что ж, мне оставалось только отпаять всё, что я долго припаивал, и взять за основу другую плату. Выбор пал на Pro Micro. Одна такая плата была у меня вставлена в старый DIY проект по превращению синтезатора в MIDI-клавиатуру. Я решил поменять местами платы. Также я поменял её положение с правой части на левую, так как узнал, что корпус просто не закрывался, если справа что-то было.
Да, я вообще не занимался модификацией корпуса в моей первой “итерации” (назовём её так), ведь по сути и смысла не было, контроллер не работал до конца. Я, к слову, забыл рассказать ещё кое-что интересное про данную “итерацию”. Я тестировал Turntable в другой игре, у которой есть такой элемент управления. И, конечно, я говорю про beatmania IIDX. Я взял свою MIDI-клавиатуру, расположил её слева, а TT справа. Из последней октавы получились кнопки, а TT выполнял роль самой себя. Так получился импровизированный метод управления. И он также показал, что диск не подходит для этой игры.
Ах да, это годилось только для P2 стороны (диск справа), а я играю обычно на P1 (диск слева). Но про beatmania и свои весёлые опыты с контроллерами для неё я расскажу уже в отдельной статье. Но по итогу с друзьями повеселились, а потом я вернул прошивку на место. Да, только один вариант прошивки подошёл для такого сценария использования, поскольку алгоритмы считывания немного отличаются. Возвращаюсь к созданию второй “итерации” DJ Hero. Теперь за основу взята Pro Micro. Количество аналоговых пинов на плате в разы больше, но появилась новая проблема - плата питается от 5V, тогда как начинка контроллера, а точнее Turntable, требует 3V3. Если бы я подключил всё как есть, мог бы произойти небольшой пожар. Я написал единственному человеку, который мог помочь - sanjay900. Он сообщил мне о существовании конвертеров питания. Я купил в ближайшем магазине радиодеталей AMS1117. Эта маленькая штучка превращает напряжение 5V в 3V3. После покупки я приступил к соединению всех контактов друг с другом. Получилось это.
Снова не очень аккуратно, но работоспособно. Хотя и контакты с крестовиной были едва рабочими. Регулятор питания я разместил на весу. К нему подключены те жёлтый и оранжевый проводочки, который отвечали за питание Crossfader и Effects knob (энкодер), а также красный - питание для Turntable. От него шёл коричневый провод, который подключался уже к Pro Micro - пин VCC с питанием 5V.
Мне не нравилось, что плата перекрывает один из болтов для доступа к плате с кнопками управления, но места было не так много, я не мог двинуть плату правее. Для LED огоньков указания игрока места не нашлось, уж слишком мало пинов у Pro Micro. Да, я не паял их и в первой “итерации”, поскольку не знал, что даже это реализовано в прошивке Santroller.
Вы также могли заметить, что у платы есть прозрачное нечто внизу и по бокам. Я использовал для фиксации платы обычный клей-пистолет. Я использовал его в первый раз именно в этом проекте. И, кажется, я нашёл своего лучшего друга в DIY. Клей очень часто меня выручал и стал много чего фиксировать в моих будущих проектах! Меня навела на эту мысль моя подруга-косплеер, спасибо ей!
Теперь мне оставалось лишь загрузить прошивку в Pro Micro и… Очередная ошибка. Конечно же, я сообщил о ней sanjay900 и он её оперативно исправил. После чего я повторно загрузил и получилось! Теперь аналоговые входы работали исправно! Я долго настраивал значения Poll rate и Multiplier и нашёл более-менее рабочие с игрой значения. Не забыл поставить и опцию смягчения ввода. Так, контроллер наконец стал пригодным для игры в DJ Hero! Но не были решены некоторые проблемы. Мы оба не знали, как на самом деле должен вести себя настоящий контроллер. К тому же, режим PS3 всё ещё часто глючил. Приставка зависала после отключения контроллера или выхода из игры. Спустя долгую дискуссию оказалось, что она зависала и с оригинальным контроллером. Это так и не удалось исправить до сих пор.
Что ж, контроллер работает, теперь надо привести в порядок корпус. Я попытался закрыть крышку, но не получалось. Чуток подпилил верхнюю часть и он влез. Теперь нужно было выяснить, что делать с отверстием под разъем Micro USB. Я подставил крышку другой стороной к разъему и начертил карандашом примерное расположение. Затем нужно было убрать эту часть пластика. Сначала пытался нагреть иглу и ей всё это разрезать, но это было слишком долго и неэффективно. Затем меня осенило использовать обычный паяльник. Вонь на всю комнату была обеспечена! Я “разрезал” паяльником пластик по линиям, что наметил. Я немного перестарался, но вышло неплохо.
Исправить и уменьшить дыру я решил, используя тот же клей-пистолет. Я аккуратно им прошёлся по пустотам. Прозрачность клея я исправил чёрной акриловой краской. Получилось не идеально, но вполне аккуратно и функционально - провод фиксировался без проблем.
Я начал использовать контроллер для игры, потихоньку осваивал, мои друзья тоже играли. Но, конечно, не могло всё так гладко быть. Произошла проблемка, которая затянула проект до третьей “итерации”.
Я брал контроллер в Москву для демонстрации тамошним друзьям и заметил, что как-то далеко не всегда он опознается компьютером. Я смог дать поиграть другу, кое-как подключив его в определённом положении. Вернувшись домой, я снял крышку, чуток пошевелил разъём… И он отвалился. Мой самый большой просчёт в надёжности таких плат с Pro Micro на борту. Сразу же могу вам сказать, что если вы собираетесь использовать такую штуку, то подключите к разъёму удлинитель и больше не трогайте! Используйте удлинитель. Причина такой хрупкости была в том, что у разъёма всего лишь две небольшие контактные площадки с одной стороны, никакой фиксации с другой не имеется.
Впрочем, я не сдавался и купил парочку таких разъёмов для перепаивания. К сожалению, ничего толкового у меня не вышло, да и у меня по итогу полностью отвалились остальные дорожки, которые ведут к разъёму. Можно было почти что похоронить Pro Micro, но, к счастью, я смог спасти плату. Уже не в том виде, теперь от неё идёт обычный USB-A кабель и используется она в моём маленьком проекте по созданию GIMX переходника. Полезная в хозяйстве штука, позволяющая играть в игры на приставках, используя любой ввод с компьютера.
Но вернёмся к нашему несчастному DJ Hero. Проект был немного заброшен на 2-3 месяца, пока я не нашёл небольшую сумму денег и купил ещё одну плату. Снова на основе Raspberry Pi Pico. Так как теперь у меня есть отверстие для разъема на корпусе, менять расположение платы я не могу. Я еле-еле смог расположить её слева, поскольку она примерно в полтора раза больше Pro Micro. Часть проводов я заменил жёсткими проводами из старого медного кабеля для Интернета, который был демонтирован после обновления линий. Я также припаял провода и к LED индикаторам игрока. Получилось что-то типа такого.
Регулятор питания снова больше не требовался и ушёл в другой проект, остальное всё осталось на месте. Третья “итерация” контроллера готова!
Снова возникли маленькие проблемы с обновлением прошивки, которые sanjay900 оперативно исправил. Но есть ещё кое-что.
Вы же помните, что при разработке первой "итерации" контроллера у меня были проблемы с аналоговыми пинами? Да, они вернулись! Теперь я точно был убеждён в том, что проблема не в поломанной плате, она была исправна. И эта, получается, тоже исправна. Так что же было не так? Оказывается, у китайского клона существует определённый переключатель, с помощью которого необходимо активировать аналоговые пины - VREF. Внимательные уже могли заметить, что я это сделал, соединив VREF и 3V3 на плате. Есть способ ещё проще - просто пропаять два контакта на площадке VREF. Если бы я знал это раньше, сколько бы я времени и нервов сэкономил?.. Небольшой недостаток в том, что аналоговый сигнал достаточно шумный и не такой точный, как у Pro Micro, но для нашего контроллера это особо не мешает.
Кстати, можно также заметить, что LED индикатор для Euphoria перекочевал в аналоговый пин. Оказалось, что он умеет принимать такой ввод. Хотя при этом мой контроллер не мигал так плавно, как в теории должен был. Оказалось, что в версии для Xbox светодиод действительно аналоговый и плавный, а вот на PlayStation он может только светиться и не светиться.
И вот, передо мной полноценно рабочий контроллер для игры в DJ Hero. Единственный нюанс в том, что индикаторы некорректно показывают номера игроков с 5 по 7. Да, в PlayStation 3 по сути заложена поддержка достаточно большого количества одновременно подключенных контроллеров. Эта вещь до сих пор не исправлена, хотя по сути это лишь небольшая косметическая проблемка. Периодически выходили обновления для Santroller прошивки, я ставил некоторые. В одном из них немного поломался ввод, но я немного подустал от проекта и оставил его в покое. В декабре 2023 года в группе Discord по DJ Hero появилась информация о том, что sanjay900 сделал релизную версию своей прошивки для DJ Hero. Также были указаны технические особенности, как в идеале надо настроить прошивку для корректной игры. Так, оказалось, что функция сглаживания сигнала некорректно обрабатывается игрой, поскольку в ней самой находились такие алгоритмы. Multiplier тоже нужно выставлять по-минимуму. Такие тонкости получилось узнать благодаря парочке активных ребят из самого сообщества. В одну из переписок с sanjay900 я затянул его в этот Discord сервер, а впоследствии он стал работать с сообществом. Я уже не особо знаю деталей, что именно происходило там после создания моего контроллера, но один человечек с никнеймом Crafty реализовал интересный проект - собственная PCB плата, которая позволяет заменить мембранные кнопки Turntable на механические. Разумеется, контроллер также переведён с батареек на провод. Как я понимаю, это небольшой коммерческий проект, и sanjay900 также помогал с прошивкой.
Кстати, задержек по проводу в разы меньше и он работает даже лучше оригинала. Ещё одним неоспоримым плюсом является то, что контроллер работает не только с PS3, но и с Xbox 360. Я был лишь первопроходцем, до меня в сообществе особо никто и не занимался переносом начинки на другу плату. Теперь это поставлено на поток. Я сыграл лишь маленькую роль в этом.
По итогу я довольно редко запускаю игру и играю под настроение в разные треки, обычно кастомные. Но и с этого проекта у меня началась небольшая мания по другим подобным вещам. Так, я сделал после этого ещё парочку контроллеров для разных игр.
Если вдруг кто-то всё же захочет повторить мой опыт, я могу поделиться нужной информацией. Ниже я привожу картинку с пинами, которые я соединил между оригинальной платой управления и Pi Pico. Именно так сейчас подключено у меня самого.
А здесь вы можете скачать прошивку для контроллера. Как я и говорил, она подходит и для множества других вещей, в том числе для гитар Guitar Hero.
А вот и фанатский Discord-сервер. Фанаты делают множество неплохих кастомных чартов для игры, а также там можете найти всевозможные гайды по настройке. На английском языке, конечно.
Такие вот дела. Я надеюсь, что вам понравилась статейка. Я не очень опытен, буду рад видеть любые ваши отзывы. Они будут меня мотивировать писать ещё. Из других готовых контроллеров у меня есть для игр beatmania IIDX и Chunithm. Если я смогу набраться сил, я сделаю статьи и про них! У них обоих куда более интересная разработка, больше труда вложено. Спасибо вам за внимание и до встречи! 😊