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

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


У 2020-му році під час пандемії буває нудно, і відсутність можливостей творчого розвитку ускладнює життя. Однак коли у вас є набір інструментів з великою кількістю електроніки, на безліч старих речей, що лежать у вас на столі, можна поглянути по-новому. Так і сталося з моїм Nintendo Switch - адже раніше у мене не було можливості розібрати контролер Joy-Con. Прекрасна можливість поколупатися в його нутрощах.

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

Макгайвер схвалює.

Фаза 0

Я звик спочатку робити начерки в блокноті. Ось мій перший начерк того, як я представляв Joy-Con з ємнісним трекпадом замість традиційного аналогового джойстика.

Найкращий пункт з усіх переваг у списку - відсутність дрифта. Якщо ви читаєте цей текст, ви напевно, знаєте, що у деяких контролерів Joy-Con є така проблема, як дрифт джойстика [мимовільний рух керованого джойстиком курсора на екрані без фізичних переміщень самого джойстика/прим. перекл.]. А якщо його замінити, то і дрифту не буде.

Фаза 1

По-перше, навряд чи ви можете вважати себе нердом, якщо вам не здаються красивими напівпрозорі штуки отруйно-зеленого кольору. Тому пара кліків на сайті Джеффа Безоса - і до мене їде новий одяг для Joy-Con. Розібрати корпус джойстика нескладно - найскладніше це орудувати маленьким пінцетом, коли у вас великі руки.

Аналоговий джойстик - річ нескладна. Це двоканальний потенціометр і натиснута кнопка - і все це з'єднано з платою через 5-контактний FPC-роз'єм з кроком 0,5 мм. Я замовив відповідний плаский кабель, що виводить сигнали зі схеми.

Потім я знову зібрав Joy-Con і перевірив його роботу в комплекті з Switch, щоб переконатися, що все працює нормально.

Гаразд, мені потрібно замінити аналоговий потенціометр на цифровий.

Фаза 2

Щоб все було чисто і красиво, я намалював в KiCad схему для пари компонентів, завантажив їх розміри і розробив для них спеціальні плати.

Я вирішив перевірити кілька видів цифрових потенціометрів з різною вартістю і ефективністю, а також кілька роз'ємів для плоских кабелів (один для вхідних даних з аналогового джойстика, один для вихідних даних з ємнісного трекпаду).

Через тиждень я отримав посилку від улюбленого виробника друкованих плат. Розподілив паяльну пасту, попрацював паяльним феном - і плати були готові.

Настав час випробувань.

Фаза 3

Природно, для координації всього цього зоопарку мені знадобилися Arduino, макетна плата і купа монтажних проводів.

У тестах брали участь:

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

Серед усіх випробуваних мною цифрових потенціометрів я вибрав найбільш відповідний, а заодно і дешевий. Перший крок - перевірити, що всі компоненти правильно приєднані, отримують харчування і відгукуються. Я залив у плату стандартний код i2c_scanner, і все пройшло вдало.

Кілька рядків коду дозволило ініціалізувати DAC і ємнісний трекпад на шині I2C, а потім я почав підшукувати ефективну стратегію емуляції потенціометрами руху аналогового джойстика по осях X і Y.

Оскільки роздільна здатність DAC становить 12 біт, вони приймають значення від 0 до 4095, і я розбив цей діапазон на кроки по 10.

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

Місткий трекпад - цікавий електронний компонент, розташований в дуже невеликому і універсальному корпусі. Як не дивно, він володіє дивовижно великою роздільною здатністю 2048 x 1535 x 63 (X x Y x Z) - так-так, 63 рівня чутливості до натискання.

Природно, наступним кроком було налаштування відповідного відображення, щоб відповідати роздільній здатності потенціометрів. Метод map у Arduino дозволяє дуже швидко вирішити таку задачу.

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

Підсумковий результат роботи першого прототипу виглядав багатообіцяюче.

Фаза 4

Ну тепер залишилося тільки злетіти з усією цією нісенітницею. Наступним кроком я вирішив зробити більш компактне і портативне рішення порівняно з першим прототипом.

Я вирішив перейти з Uno на PRO MINI - більш дрібну версію, а також зробити друковану плату, яку можна буде розташувати поруч з усіма роз'ємами і цифровими потенціометрами. У процесі оптимізації я зрозумів, що можна замінити два одноканальних DAC одним двоканальним, і заощадити місце на платі.

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

Фаза 5

Кур'єр приніс мені все вчасно - всі ці зелені скарби і деякі інші компоненти.

Прийшов час пайки.

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

Фаза 6

Pro Mini потрібно харчування - всі міліампери я вкрав прямо з основної плати, з вільної плошадки.

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

Фаза 7

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

Нарізка на шари за допомогою Cura, чекаємо кілька хвилин, і 3D-принтер народжує нову деталь.

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

Фаза 8

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

Для безпеки я закрив всю електроніку плівкою Kapton, щоб не закоротити її потними руками.

Підсумковий результат

І ось, як це виглядає в підсумку. Джойстик вийшов портативним, тому його можна використовувати або приєднавши, або за бездротовим з'єднанням.

У роботі:

Що далі

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

І робота вже кипить:

Див. також:

  • «Nintendo безкоштовно ремонтуватиме Joy-Con з проблемою» дрейфу «»
  • «Користувач Reddit знайшов причину частої поломки Nintendo Switch»
  • "Switch Lite не врятувала від дрейфу: скарги на нову консоль додані в позов проти Nintendo "

COM_SPPAGEBUILDER_NO_ITEMS_FOUND