Беспроводное управление моторчиками из Lego при помощи Steam Controller

Автор оригинала: g3gg0
  • Перевод


Когда я был молодым, мне всегда хотелось иметь наборы «техникс» от Lego, чтобы собирать из них всякие крутые штуки. Автономные танки с вращающимися турелями, стреляющими кирпичиками Lego. Но тогда такого набора у меня не было.

И даже обычных кирпичиков от Lego не было. У меня был только друг, у брата которого были все эти дорогие игрушки.

А теперь у меня самого сын такого возраста. И он строит танки, которые… тупо прут вперёд, пока не врежутся в стену :)

И вот, настало время для ESP32 и магии паяльника – соберём для них правильный пульт дистанционного управления!

Нет, я, конечно, знаю о существовании таких пультов. Но ни один из них мне не подходит полностью. Они либо инфракрасные, с технологией 80-х годов, либо слишком крупные. Или дорогие. А главное – ни об одном из них я не смогу сказать сыну: «Я сделал это специально для тебя!»

Так давайте же сделаем новый, улучшенный пульт, чтобы править всеми!



Ингредиенты:

  • ESP32-WROOM-32D | WiFi, BLE и процессор с I/O – достаточно для управления двумя моторами и светодиодом.
  • DRV8833 | двойной Н-мост с мощностью, достаточной для моторов.
  • TPS62162 | понижение напряжения до 17 В, а также для развлечения при пайке корпуса WSON-8 2×2 мм
  • CP2104 | для программирования ESP32
  • Разъёмы для подсоединения моторов и диодов. Провода отрежем и припаяем их снизу, а коннектор Lego приклеим сверху.

Всё это разместится на довольно небольшой плате – вот её внешний вид в редакторе EasyEDA:



Провод, который видно на заглавном фото, нужен не для исправления каких-то ошибок, а для подачи питания с USB. Его, возможно, не хватит для мотора, но, к сожалению, контакты из Китая до сих пор мне не пришли. Поэтому я сначала проверяю работу светодиодов. Для красоты на фотографии я просто положил коннектор от мотора на плату.

На версии 1.1 моей платы (в отличие от версии 1.2, которая уже лежит на EasyEDA), не было светодиодов, поэтому я припаял два антипараллельных диода на выход, чтобы было видно происходящее. Если присмотреться, на видео видно попеременное включение пары диодов 0603, обозначающих движение вперёд/назад.



Что до пульта управления, то сначала я просто хотел собрать дополнительную плату с кнопочками и ещё одним ESP32 – классический ПДУ.

Однако потом я вспомнил, что у контроллеров Steam Controller есть режим работы Bluetooth с низким энергопотреблением (BLE). Я решил заняться этим вопросом, и через несколько часов научился принимать пакеты от контроллера.

Для этого нужно просто поискать HID-устройство, называющее себя SteamController, и подключиться к нему. А потом использовать недокументированный сервис от Valve и несколько недокументированных команд, позволяющих передачу пакетов.



А ещё мне попался недокументированный формат отчёта, который я разобрал вручную.



Где-то через часик смысл флажков и значений стал мне понятен, и я сумел помигать светодиодом при помощи контроллера Steam и ESP32. ¯\_(ツ)_/¯

Файлы



v1.0: «пробный подход»
— первый вариант, для которого я выбрал неправильный регулятор напряжения. TPS62291 поднимает напряжение лишь до 6 В. Я разрабатывал несколько проектов параллельно, и забыл, что устройству нужно работать с 9 В.

v1.1: «достаточно хорошая»
— этот вариант виден в роликах, и всё работает

v1.2: «окончательная»
— добавил индикаторные светодиоды на выход и оптимизировал размер и раскладку плату

На следующем коротком видео показана фаза соединения (1-3 сек. после включения питания) и управление выходами мотора. Коннектор от Lego пока не подключен. Он пойдёт на пустое место рядом с остальными коннекторами, отмеченное белым прямоугольником.



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

Во время стресс-теста я столкнулся только с одной проблемой: я думал, что режим «быстрого затухания» [fast decay] драйвера мотора будет работать лучше всего, однако из-за него через несколько секунд работы очень сильно падала скорость мотора. Поэтому я поменял код так, чтобы он использовал «медленное затухание» [slow decay].



Пока я не уверен, как работает DRV и почему мотор сначала вращается быстро, а потом через секунд 10 начинает постепенно замедляться. Возможно, разогреваются MOSFET и их сопротивление поднимается слишком сильно.



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

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 9

    +1
    Возможно, разогреваются MOSFET и их сопротивление поднимается слишком сильно

    У DRV8833 срабатывает thermal shutdown.
    Интересно, а то же самое можно провернуть с контроллером Xbox?
      0

      Тоже интересно про контроллер от Xbox. И Nintendo Switch Pro Controller. И DualShock от PlayStation.

      0
      Вроде в App Store всяких есть куча прог, позволяющих делать из телефона BT пульт управления — интересно заработало бы с этой платой?
        0
        Один вопрос — где взять таких китайских проводочков с коннекторами для power-function моторов? Желательно пачками по N*10 штук)
          0

          В статье в разделе ингредиенты есть разъёмы. Это?

            0
            Но у них просто «аховое» качество. Много игрался с китайскими этюдами типа lepin и компании — вечно надо было подгибать контакты + порой они вообще ломались.
              0
              И альтернатив не нашли оригиналу? 3 бакса за штуку оригинала как то жаба давит покупать на детали…
                0
                Нет, всё, что было на ali я перепробовал — всякие «technichian» на замену родного техникса брать можно, детали там приемлимого качества, но вот электрика… моторчики разбери и пересмажь, плюс у подделки больше обороты и меньше мощность, что портит весь кайф. Провода тоже те ещё — пару пришлось переобжать, поскольку там было КЗ. Единственное, что из электрики порадовало — пульты, т.к. родные леговские на ИК, и всего 4 канала, а китайцы сделали на 2.4Ghz и снова 4 канала, соответственно в MOC-е можно соорудить адский пульт на 8 каналов.
              0
              Да, это, спасибо.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое