Бездротове керування моторчиками з Lego за допомогою Steam Controller

Бездротове керування моторчиками з Lego за допомогою Steam Controller

Коли я був молодим, мені завжди хотілося мати набори "технікс" від Lego, щоб збирати з них усілякі круті штуки. Автономні танки з турелями, що обертаються, що стріляють цеглою Lego. Але тоді такого набору я не мав.

І навіть звичайної цегли від Lego не було. У мене був тільки друг, брат якого мав усі ці дорогі іграшки.

А тепер у мене самого син такого віку. І він будує танки, які… тупо пруть вперед, доки не вріжуться в стіну 🙂

І ось, настав час для ESP32 та магії паяльника – зберемо для них правильний пульт дистанційного керування!

Ні, я, звісно, ​​знаю про існування таких пультів. Але жоден із них мені не підходить повністю. Вони або інфрачервоні, з технологією 80-х років, або надто великі. Або дорогі. А головне – про жодне з них я не зможу сказати синові: «Я зробив це спеціально для тебе!»

Тож давайте зробимо новий, покращений пульт, щоб правити всіма!

Бездротове керування моторчиками з Lego за допомогою Steam Controller

Інгредієнти:

  • ESP32-WROOM-32D | WiFi, BLE та процесор з I/O – достатньо для управління двома моторами и світлодіодом.
  • DRV8833 | подвійний Н-мост із потужністю, достатньою для моторів.
  • TPS62162 | зниження напруги до 17 В, а також для розваги при паянні корпусу WSON-8 2×2 мм
  • CP2104 | для програмування ESP32
  • Р Р ° Р · СЉС'РјС < для приєднання моторів та діодів. Дріт відріжемо і припаяємо їх знизу, а конектор Lego приклеїмо зверху.

Все це розміститься на досить невеликій платі – її зовнішній вигляд у редакторі EasyEDA:

Бездротове керування моторчиками з Lego за допомогою Steam Controller

Провід, який видно на великому фото, необхідний не для виправлення якихось помилок, а для подачі живлення з USB. Його, можливо, не вистачить для двигуна, але, на жаль, контакти з Китаю досі не прийшли. Тому я спочатку перевіряю роботу світлодіодів. Для краси на фотографії я просто поклав конектор від двигуна на плату.

На версії 1.1 моєї плати (на відміну від версії 1.2, яка вже лежить на EasyEDA), не було світлодіодів, тому я припаяв два антипаралельні діоди на вихід, щоб було видно те, що відбувається. Якщо придивитися, відео видно поперемінне включення пари діодів 0603, що позначають рух вперед/назад.

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

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

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

Бездротове керування моторчиками з Lego за допомогою Steam Controller

А ще мені потрапив недокументований формат звіту, який я розібрав вручну.

Бездротове керування моторчиками з Lego за допомогою Steam Controller

Десь через годину сенс прапорців і значень став мені зрозумілим, і я зумів поблимати світлодіодом за допомогою контролера Steam і ESP32. ¯_(ツ)_/¯

Файли

v1.0: «пробний підхід»
- Перший варіант, для якого я вибрав неправильний регулятор напруги. TPS62291 піднімає напругу лише до 6 Ст. Я розробляв кілька проектів паралельно, і забув, що пристрою потрібно працювати з 9 Ст.

v1.1: «досить хороша»
— цей варіант видно у роликах, і все працює

v1.2: «остаточна»
- Додав індикаторні світлодіоди на вихід і оптимізував розмір і розкладку плату

На наступному короткому відео показана фаза з'єднання (1-3 сек. після включення живлення) та керування виходами двигуна. Конектор від Lego поки що не підключений. Він піде на порожнє місце поряд з рештою конекторів, позначене білим прямокутником.

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

Під час стрес-тесту я зіткнувся тільки з однією проблемою: я думав, що режим «швидкого згасання» драйвера мотора працюватиме найкраще, проте через нього через кілька секунд роботи дуже сильно падала швидкість мотора. Тому я змінив код так, щоб він використовував "повільне згасання" [slow decay].

Бездротове керування моторчиками з Lego за допомогою Steam Controller

Поки я не впевнений, як працює DRV і чому двигун спочатку обертається швидко, а потім через секунд 10 починає поступово сповільнюватися. Можливо, розігріваються MOSFET і їхній опір піднімається надто сильно.

Сподіваюся, цей приклад використання Arduino без особливих зусиль стане натхненням для інших людей і дозволить їм долучити їхніх дітей до електроніки.

Джерело: habr.com

Додати коментар або відгук