- PVSM.RU - https://www.pvsm.ru -

Как я хакнул контроллер Nintendo Joy-Con

Хирургическая имплантация ёмкостного трекпада с технологией 3D-Touch на место оригинального аналогового джойстика

Как я хакнул контроллер Nintendo Joy-Con - 1

В 2020-м году во время пандемии бывает скучно, и отсутствие возможностей творческого развития усложняет жизнь. Однако когда у вас есть набор инструментов с большим количеством электроники, на множество старых вещей, лежащих у вас на столе, можно взглянуть по-новому. Так и произошло с моим Nintendo Switch – ведь раньше у меня не было возможности разобрать контроллер Joy-Con. Прекрасная возможность поковыряться в его внутренностях.

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

Макгайвер [1] одобряет.

Фаза 0

Я привык сначала делать наброски в блокноте. Вот мой первый набросок того, как я представлял Joy-Con с ёмкостным трекпадом вместо традиционного аналогового джойстика.

Лучший пункт из всех преимуществ в списке – отсутствие дрифта. Если вы читаете этот текст, вы наверное, знаете, что у некоторых контроллеров Joy-Con есть такая проблема, как дрифт джойстика [2] [самопроизвольное движение управляемого джойстиком курсора на экране без физических перемещений самого джойстика / прим. перев.]. А если его заменить, то и дрифта не будет.

Как я хакнул контроллер Nintendo Joy-Con - 2

Фаза 1

Во-первых, вряд ли вы можете считать себя нёрдом, если вам не кажутся красивыми полупрозрачные штуки ядовито-зелёного цвета. Поэтому пара кликов на сайте Джеффа Безоса – и ко мне едет новая одёжка для Joy-Con. Разобрать корпус джойстика несложно [3] – самое сложное это орудовать маленьким пинцетом, когда у вас большие руки.

Как я хакнул контроллер Nintendo Joy-Con - 3

Аналоговый джойстик – вещь несложная. Это двухканальный потенциометр и нажимающаяся кнопка – и всё это соединено с платой через 5-контактный FPC-разъём [4] с шагом в 0,5 мм. Я заказал подходящий плоский кабель [5], выводящий сигналы со схемы.

Потом я снова собрал Joy-Con и проверил его работу в комплекте со Switch, чтобы убедиться, что всё работает нормально.

Как я хакнул контроллер Nintendo Joy-Con - 4

Ок, мне нужно заменить аналоговый потенциометр на цифровой.

Фаза 2

Чтобы всё было чисто и красиво, я нарисовал в KiCad [6] схему для пары компонентов, загрузил их размеры [7] и разработал для них специальные платы.

Как я хакнул контроллер Nintendo Joy-Con - 5

Я решил проверить несколько видов [8] цифровых потенциометров с разной стоимостью и эффективностью, а также несколько разъёмов для плоских кабелей (один для входящих данных с аналогового джойстика [9], один для выходящих данных с ёмкостного трекпада [10]).

Как я хакнул контроллер Nintendo Joy-Con - 6

Через неделю я получил посылку от любимого производителя печатных плат [11]. Распределил паяльную пасту, поработал паяльным феном – и платы были готовы.

Настало время испытаний.

Как я хакнул контроллер Nintendo Joy-Con - 7

Фаза 3

Естественно, для координации всего этого зоопарка мне понадобились Arduino [12], макетная плата и куча монтажных проводов.

В тестах участвовали:

  • Микроконтроллер.
  • Два 12-битных цифро-аналоговых преобразователя (подключаются через I2C).
  • 5-контактный FPC-разъём с шагом 0,5 мм для аналогового джойстика.
  • Гибкий плоский кабель для 5-контактного FPC-разъёма с шагом 0,5 мм.
  • 12-контактный FPC-разъём с шагом 0,5 мм для ёмкостного трекпада.
  • Гибкий плоский кабель для 12-контактного FPC-разъёма с шагом 0,5 мм.
  • Цифровой ёмкостной трекпад с технологией 3D-Touch (подключаются через I2C).

Среди всех испытанных мною цифровых потенциометров я выбрал наиболее подходящий, а заодно и дешёвый [13]. Первый шаг – проверить, что все компоненты правильно подсоединены, получают питание и отзываются. Я залил в плату стандартный код i2c_scanner, и всё прошло удачно.

Как я хакнул контроллер Nintendo Joy-Con - 8

Несколько строк кода позволило инициализировать DAC и ёмкостной трекпад на шине I2C, а потом я начал подыскивать эффективную стратегию эмуляции потенциометрами движения аналогового джойстика по осям X и Y.

Поскольку разрешение DAC составляет 12 бит, они принимают значения от 0 до 4095, и я разбил этот диапазон на шаги по 10.

Как я хакнул контроллер Nintendo Joy-Con - 9

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

Ёмкостной трекпад – интересный электронный компонент, расположенный в очень небольшом и универсальном корпусе. Как ни странно, он обладает удивительно большим разрешением 2048 x 1535 x 63 (X x Y x Z) — да-да, 63 уровня чувствительности к нажатию.

Естественно, следующим шагом была настройка подходящего отображения, чтобы соответствовать разрешению потенциометров. Метод map [14] у Arduino позволяет очень быстро решить такую задачу.

Как я хакнул контроллер Nintendo Joy-Con - 10

Метод pushStick() эмулирует нажатие кнопки, пользуясь тем, что соответствующий контакт на Joy-Con работает по замкнутому циклу.

Как я хакнул контроллер Nintendo Joy-Con - 11

Итоговый результат работы первого прототипа выглядел многообещающе.

Фаза 4

Ну теперь осталось только взлететь со всей этой ерундой. Следующим шагом я решил сделать боле компактное и портативное решение по сравнению с первым прототипом.

Я решил перейти с Uno на PRO MINI – более мелкую версию, а также сделать печатную плату, которую можно будет расположить рядом со всеми разъёмами и цифровыми потенциометрами. В процессе оптимизации я понял, что можно заменить два одноканальных DAC одним двухканальным [15], и сэкономить место на плате.

Нарисовал в KiCad новую схему, и тщательно разместил все компоненты.

Как я хакнул контроллер Nintendo Joy-Con - 12

Фаза 5

Курьер принёс мне всё вовремя – все эти зелёные сокровища и некоторые другие компоненты.

Как я хакнул контроллер Nintendo Joy-Con - 13

Как я хакнул контроллер Nintendo Joy-Con - 14

Пришло время пайки.

Как я хакнул контроллер Nintendo Joy-Con - 15

Проверка мультиметром.

Как я хакнул контроллер Nintendo Joy-Con - 16

Фаза 6

Pro Mini нужно питание – все миллиамперы я украл прямо с основной платы, со свободной плошадки.

Как я хакнул контроллер Nintendo Joy-Con - 17

Идея была в том, чтобы приклеить мою плату прямо на заднюю часть Joy-Con при помощи двустороннего скотча, сделать отверстие в пластиковом корпусе и пропустить через него провода.

Как я хакнул контроллер Nintendo Joy-Con - 18

Как я хакнул контроллер Nintendo Joy-Con - 19

Фаза 7

У ёмкостного трекпада не было корпуса, поэтому мне пришлось разработать для него корпус. Для таких случаев отлично подходит Tinkercad – добавляем и вычитаем простейшие геометрические фигуры, и задача решается без лишних проблем.

Как я хакнул контроллер Nintendo Joy-Con - 20

Нарезка на слои при помощи Cura [16], ждём несколько минут, и 3D-принтер рожает новую деталь.

Как я хакнул контроллер Nintendo Joy-Con - 21

Подошла идеально с первого раза. Выбранный мною пластик FILOALFA [17] отлично сохранил механические свойства.

Фаза 8

Поскольку Pro Mini питается напрямую от батарейки Joy-Con, я решил добавить переключатель, который может отключать мой имплантат, когда он не используется, экономя немного энергии.

Как я хакнул контроллер Nintendo Joy-Con - 22

Для безопасности я закрыл всю электронику плёнкой Kapton, чтобы не закоротить её потными руками.

Как я хакнул контроллер Nintendo Joy-Con - 23

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

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

Как я хакнул контроллер Nintendo Joy-Con - 24

В работе:

Что дальше

Планирую дальнейшую миниатюризацию всей схемы, чтобы сделать плату меньшего размера, и разместить её прямо внутри контроллера Joy-Con вместо небольшой коробочки аналогового джойстика размерами в 19×16×4 мм.

И работа уже кипит:

Как я хакнул контроллер Nintendo Joy-Con - 25

Автор: Вячеслав Голованов

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/354134

Ссылки в тексте:

[1] Макгайвер: https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B3%D0%B5%D0%BD%D1%82_%D0%9C%D0%B0%D0%BA%D0%B3%D0%B0%D0%B9%D0%B2%D0%B5%D1%80

[2] дрифт джойстика: https://www.youtube.com/watch?v=rUTuOOZlX9w

[3] несложно: https://www.ifixit.com/Device/Joy-Con

[4] 5-контактный FPC-разъём: https://www.mouser.it/datasheet/2/276/2/5034800500_sd-1387327.pdf

[5] подходящий плоский кабель: https://www.amazon.co.uk/sourcing-map-Flexible-Ribbon-Player/dp/B07S19M3X9/ref=sr_1_1?dchild=1&keywords=5+pins+0.5+fpc&qid=1589706784&sr=8-1

[6] KiCad: https://kicad-pcb.org/

[7] загрузил их размеры: https://www.samacsys.com/library-loader/

[8] несколько видов: https://www.mouser.it/Search/Refine?N=7283852

[9] входящих данных с аналогового джойстика: https://www.google.com/search?q=nintendo+joy-con+analog+joystick&source=lnms&tbm=isch&sa=X&ved=2ahUKEwi_8b6Ly7rpAhWJqIsKHaKXDxsQ_AUoAXoECAwQAw&biw=1754&bih=1018

[10] выходящих данных с ёмкостного трекпада: https://www.cirque.com/glidepoint-circle-trackpads/

[11] производителя печатных плат: https://jlcpcb.com/

[12] Arduino: https://www.arduino.cc/

[13] наиболее подходящий, а заодно и дешёвый: https://www.microchip.com/wwwproducts/en/en532229

[14] map: https://www.arduino.cc/reference/en/language/functions/math/map/

[15] одним двухканальным: https://www.microchip.com/wwwproducts/en/en541737

[16] Cura: https://ultimaker.com/software/ultimaker-cura

[17] FILOALFA: https://www.filoalfa3d.com/gb/

[18] Источник: https://habr.com/ru/post/506892/?utm_source=habrahabr&utm_medium=rss&utm_campaign=506892