Хирургическая имплантация ёмкостного трекпада с технологией 3D-Touch на место оригинального аналогового джойстика
![](https://habrastorage.org/getpro/habr/post_images/4e5/e46/160/4e5e46160fc4b3bdc8a1b93895617311.jpg)
В 2020-м году во время пандемии бывает скучно, и отсутствие возможностей творческого развития усложняет жизнь. Однако когда у вас есть набор инструментов с большим количеством электроники, на множество старых вещей, лежащих у вас на столе, можно взглянуть по-новому. Так и произошло с моим Nintendo Switch – ведь раньше у меня не было возможности разобрать контроллер Joy-Con. Прекрасная возможность поковыряться в его внутренностях.
Дайте-ка я сначала посмотрю в интернете, не возникло ли у кого безумной идеи заменить старый добрый аналоговый джойстик ёмкостным трекпадом? Не возникло.
Макгайвер одобряет.
Фаза 0
Я привык сначала делать наброски в блокноте. Вот мой первый набросок того, как я представлял Joy-Con с ёмкостным трекпадом вместо традиционного аналогового джойстика.
Лучший пункт из всех преимуществ в списке – отсутствие дрифта. Если вы читаете этот текст, вы наверное, знаете, что у некоторых контроллеров Joy-Con есть такая проблема, как дрифт джойстика [самопроизвольное движение управляемого джойстиком курсора на экране без физических перемещений самого джойстика / прим. перев.]. А если его заменить, то и дрифта не будет.
![](https://habrastorage.org/getpro/habr/post_images/426/acc/acd/426accacd6c808082598d902b8a8ce93.jpg)
Фаза 1
Во-первых, вряд ли вы можете считать себя нёрдом, если вам не кажутся красивыми полупрозрачные штуки ядовито-зелёного цвета. Поэтому пара кликов на сайте Джеффа Безоса – и ко мне едет новая одёжка для Joy-Con. Разобрать корпус джойстика несложно – самое сложное это орудовать маленьким пинцетом, когда у вас большие руки.
![](https://habrastorage.org/getpro/habr/post_images/22d/31f/abb/22d31fabb2589d3275a10f5179eca119.jpg)
Аналоговый джойстик – вещь несложная. Это двухканальный потенциометр и нажимающаяся кнопка – и всё это соединено с платой через 5-контактный FPC-разъём с шагом в 0,5 мм. Я заказал подходящий плоский кабель, выводящий сигналы со схемы.
Потом я снова собрал Joy-Con и проверил его работу в комплекте со Switch, чтобы убедиться, что всё работает нормально.
![](https://habrastorage.org/getpro/habr/post_images/2db/c0f/daf/2dbc0fdafba5b4da294eecd1f469260f.jpg)
Ок, мне нужно заменить аналоговый потенциометр на цифровой.
Фаза 2
Чтобы всё было чисто и красиво, я нарисовал в KiCad схему для пары компонентов, загрузил их размеры и разработал для них специальные платы.
![](https://habrastorage.org/getpro/habr/post_images/e22/0c4/db2/e220c4db2b7bc9a03c87da55a8073ff2.png)
Я решил проверить несколько видов цифровых потенциометров с разной стоимостью и эффективностью, а также несколько разъёмов для плоских кабелей (один для входящих данных с аналогового джойстика, один для выходящих данных с ёмкостного трекпада).
![](https://habrastorage.org/getpro/habr/post_images/295/bbb/784/295bbb784926d9739163231c0c5fd9c9.jpg)
Через неделю я получил посылку от любимого производителя печатных плат. Распределил паяльную пасту, поработал паяльным феном – и платы были готовы.
Настало время испытаний.
![](https://habrastorage.org/getpro/habr/post_images/2d2/007/e99/2d2007e990a345984876b727cf06df11.jpg)
Фаза 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, и всё прошло удачно.
![](https://habrastorage.org/getpro/habr/post_images/41b/bb3/3c2/41bbb33c21642fd4ce4ef8b9aee6a0bd.png)
Несколько строк кода позволило инициализировать DAC и ёмкостной трекпад на шине I2C, а потом я начал подыскивать эффективную стратегию эмуляции потенциометрами движения аналогового джойстика по осям X и Y.
Поскольку разрешение DAC составляет 12 бит, они принимают значения от 0 до 4095, и я разбил этот диапазон на шаги по 10.
![](https://habrastorage.org/getpro/habr/post_images/3ea/b9a/06a/3eab9a06a65be23ad99b57536181d9ad.png)
На консоли Switch я запустил утилиту калибровки джойстика из настроек, чтобы посмотреть, произойдёт ли что-нибудь.
Ёмкостной трекпад – интересный электронный компонент, расположенный в очень небольшом и универсальном корпусе. Как ни странно, он обладает удивительно большим разрешением 2048 x 1535 x 63 (X x Y x Z) — да-да, 63 уровня чувствительности к нажатию.
Естественно, следующим шагом была настройка подходящего отображения, чтобы соответствовать разрешению потенциометров. Метод map у Arduino позволяет очень быстро решить такую задачу.
![](https://habrastorage.org/getpro/habr/post_images/433/957/5ae/4339575ae59cc470a0f3554fa1f4f72f.png)
Метод pushStick() эмулирует нажатие кнопки, пользуясь тем, что соответствующий контакт на Joy-Con работает по замкнутому циклу.
![](https://habrastorage.org/getpro/habr/post_images/113/38a/153/11338a153d64ad50ff208f651dbfcc22.png)
Итоговый результат работы первого прототипа выглядел многообещающе.
Фаза 4
Ну теперь осталось только взлететь со всей этой ерундой. Следующим шагом я решил сделать боле компактное и портативное решение по сравнению с первым прототипом.
Я решил перейти с Uno на PRO MINI – более мелкую версию, а также сделать печатную плату, которую можно будет расположить рядом со всеми разъёмами и цифровыми потенциометрами. В процессе оптимизации я понял, что можно заменить два одноканальных DAC одним двухканальным, и сэкономить место на плате.
Нарисовал в KiCad новую схему, и тщательно разместил все компоненты.
![](https://habrastorage.org/getpro/habr/post_images/219/7db/f38/2197dbf386405656384763435d9ac7aa.jpg)
Фаза 5
Курьер принёс мне всё вовремя – все эти зелёные сокровища и некоторые другие компоненты.
![](https://habrastorage.org/getpro/habr/post_images/c28/571/bcb/c28571bcb55dbe539b78aa95548bb272.jpg)
![](https://habrastorage.org/getpro/habr/post_images/1f9/961/809/1f9961809420ba1404f0bcc62a1ccc13.jpg)
Пришло время пайки.
![](https://habrastorage.org/getpro/habr/post_images/928/3c6/1e3/9283c61e3b2db484585b5db722a517cd.jpg)
Проверка мультиметром.
![](https://habrastorage.org/getpro/habr/post_images/c85/d7a/a1b/c85d7aa1bb88d7688a82db37986686bc.jpg)
Фаза 6
Pro Mini нужно питание – все миллиамперы я украл прямо с основной платы, со свободной плошадки.
![](https://habrastorage.org/getpro/habr/post_images/1de/2b2/e37/1de2b2e3775200e1f88ef1ffef1b93e2.jpg)
Идея была в том, чтобы приклеить мою плату прямо на заднюю часть Joy-Con при помощи двустороннего скотча, сделать отверстие в пластиковом корпусе и пропустить через него провода.
![](https://habrastorage.org/getpro/habr/post_images/749/325/b39/749325b395be8b611b14f0e99ad60865.jpg)
![](https://habrastorage.org/getpro/habr/post_images/33c/07d/4bd/33c07d4bd3d651f8555f13e120d6b412.jpg)
Фаза 7
У ёмкостного трекпада не было корпуса, поэтому мне пришлось разработать для него корпус. Для таких случаев отлично подходит Tinkercad – добавляем и вычитаем простейшие геометрические фигуры, и задача решается без лишних проблем.
![](https://habrastorage.org/getpro/habr/post_images/319/539/3d9/3195393d9dc72771b04b36656a93ff41.jpg)
Нарезка на слои при помощи Cura, ждём несколько минут, и 3D-принтер рожает новую деталь.
![](https://habrastorage.org/getpro/habr/post_images/907/5ac/0de/9075ac0de5da9f168d663efab7ed8ef4.jpg)
Подошла идеально с первого раза. Выбранный мною пластик FILOALFA отлично сохранил механические свойства.
Фаза 8
Поскольку Pro Mini питается напрямую от батарейки Joy-Con, я решил добавить переключатель, который может отключать мой имплантат, когда он не используется, экономя немного энергии.
![](https://habrastorage.org/getpro/habr/post_images/098/63c/454/09863c4545a5da7a7d66240703744137.jpg)
Для безопасности я закрыл всю электронику плёнкой Kapton, чтобы не закоротить её потными руками.
![](https://habrastorage.org/getpro/habr/post_images/b52/162/a41/b52162a4167a620b56c85b001aa44a01.jpg)
Итоговый результат
И вот, как это выглядит в итоге. Джойстик получился портативным, поэтому его можно использовать либо присоединив, либо по беспроводному соединению.
![](https://habrastorage.org/getpro/habr/post_images/99f/134/e3f/99f134e3ff0dfdee38dea53bcd29fd9b.jpg)
В работе:
Что дальше
Планирую дальнейшую миниатюризацию всей схемы, чтобы сделать плату меньшего размера, и разместить её прямо внутри контроллера Joy-Con вместо небольшой коробочки аналогового джойстика размерами в 19?16?4 мм.
И работа уже кипит:
![](https://habrastorage.org/getpro/habr/post_images/b14/548/015/b145480157352157d59b6e5347dabfce.png)
XLOR
Это восхитительно. Я как пользователь Свича переодически ловящий дрифт, купил бы такую реализацию, пусть даже джойконы разряжались бы в два раза быстрее. Отличная работа.
Простите, пишу комментарием так как не могу поставить плюс, нет кармы.
anonymous
Не дрифт, а дрейф.