Бесправоднае кіраванне маторчыкамі з 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

Дадаць каментар