Бесправоднае кіраванне маторчыкамі з Lego пры дапамозе Steam Controller
Калі я быў маладым, мне заўсёды жадалася мець наборы тэхнік ад 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 пакуль не падлучаны. Ён пойдзе на пустое месца побач з астатнімі канектарамі, пазначанае белым прастакутнікам.
Мой сын зараз рэгулярна карыстаецца гэтым кантролерам для кіравання сабранымі ім апаратамі.
Падчас стрэс-тэсту я сутыкнуўся толькі з адной праблемай: я думаў, што рэжым хуткага згасання драйвера матора будзе працаваць лепш за ўсё, аднак з-за яго праз некалькі секунд працы вельмі моцна падала хуткасць матора. Таму я памяняў код так, каб ён выкарыстоўваў «павольнае згасанне» [slow decay].
Пакуль я не ўпэўнены, як працуе DRV і чаму матор спачатку круціцца хутка, а потым праз секунд 10 пачынае паступова запавольвацца. Магчыма, разаграваюцца MOSFET і іх супраціў паднімаецца занадта моцна.
Спадзяюся, гэты прыклад выкарыстання Arduino без асаблівых намаганняў паслужыць натхненнем для іншых людзей і дазволіць ім далучыць іх дзяцей да электронікі.