Control fără fir al motoarelor Lego cu Steam Controller

Control fără fir al motoarelor Lego cu Steam Controller

Când eram tânăr, mi-am dorit întotdeauna să am seturi de tehnologie Lego, astfel încât să pot construi tot felul de lucruri interesante cu ele. Tancuri autonome cu turnulețe rotative care împușcă cărămizi Lego. Dar atunci nu am avut un astfel de set.

Și nici măcar nu existau cărămizi Lego obișnuite. Am avut doar un prieten al cărui frate avea toate aceste jucării scumpe.

Și acum eu însumi am un fiu de această vârstă. Și construiește tancuri care... prostesc înaintează până se lovesc de perete :)

Și acum, este timpul pentru ESP32 și magia fierului de lipit - haideți să asamblam telecomanda potrivită pentru ei!

Nu, bineînțeles că știu despre existența unor astfel de telecomenzi. Dar niciunul nu mi se potrivește pe deplin. Sunt fie cu infraroșu, tehnologie anilor 80, fie prea mari. Sau cele scumpe. Și, cel mai important, nu-i voi putea spune fiului meu despre niciunul dintre ei: „Am făcut asta special pentru tine!”

Așa că haideți să facem o telecomandă nouă și îmbunătățită pentru a le conduce pe toate!

Control fără fir al motoarelor Lego cu Steam Controller

Ingrediente:

  • ESP32-WROOM-32D | WiFi, BLE și procesor cu I/O - suficient pentru a controla două motoare и LED.
  • DRV8833 | Pod dublu H cu suficientă putere pentru motoare.
  • TPS62162 | reducerea tensiunii la 17 V, precum și pentru distracție atunci când lipiți carcasa WSON-8 2x2 mm
  • CP2104 | pentru programarea ESP32
  • conectori pentru conectarea motoarelor și a diodelor. Vom tăia firele și le vom lipi în partea de jos, iar deasupra lipim conectorul Lego.

Toate acestea se vor potrivi pe o placă destul de mică - iată apariția sa în editorul EasyEDA:

Control fără fir al motoarelor Lego cu Steam Controller

Firul care poate fi văzut în fotografia din titlu nu este necesar pentru a corecta erorile, ci pentru a furniza energie de la USB. Poate că nu este suficient pentru motor, dar, din păcate, încă nu am primit contacte din China. Așa că mai întâi verific funcționarea LED-urilor. Pentru frumusețe în fotografie, am pus pur și simplu conectorul de la motor pe placă.

Pe versiunea 1.1 a plăcii mele (spre deosebire de versiunea 1.2, care este deja pe EasyEDA), nu existau LED-uri, așa că am lipit două diode anti-paralele la ieșire, ca să pot vedea ce se întâmplă. Dacă te uiți cu atenție, videoclipul arată activarea alternativă a unei perechi de diode 0603, indicând mișcarea înainte/înapoi.

Cât despre panoul de control, la început am vrut doar să asamblam o placă suplimentară cu butoane și încă un ESP32 - o telecomandă clasică.

Totuși, atunci mi-am amintit că Steam Controller-urile au un mod de funcționare Bluetooth Low Energy (BLE). Am decis să abordez această problemă și după câteva ore am învățat să primesc pachete de la controlor.

Pentru a face acest lucru, trebuie doar să căutați un dispozitiv HID care se numește SteamController și să vă conectați la el. Și apoi folosiți un serviciu nedocumentat de la Valve și mai multe comenzi nedocumentate, permițând transmiterea pachetelor.

Control fără fir al motoarelor Lego cu Steam Controller

De asemenea, am dat peste un format de raport nedocumentat, pe care l-am analizat manual.

Control fără fir al motoarelor Lego cu Steam Controller

După aproximativ o oră, sensul steagurilor și valorilor mi-a devenit clar și am reușit să clipesc LED-ul folosind controlerul Steam și ESP32. ¯_(ツ)_/¯

Fișiere

v1.0: "abordare de probă"
- prima varianta pentru care am ales regulatorul de tensiune gresit. TPS62291 ridică tensiunea doar la 6 V. Eu dezvoltam mai multe proiecte în paralel și am uitat că dispozitivul trebuie să funcționeze cu 9 V.

v1.1: "suficient de bun"
— această opțiune este vizibilă în videoclipuri și totul funcționează

v1.2: "final"
— a adăugat LED-uri indicatoare la ieșire și a optimizat dimensiunea și aspectul plăcii

Următorul videoclip scurt arată faza de conectare (1-3 secunde după pornirea alimentării) și controlul ieșirilor motorului. Conectorul Lego nu este încă conectat. Acesta va merge în spațiul gol de lângă ceilalți conectori, marcat cu un dreptunghi alb.

Fiul meu folosește acum regulat acest controler pentru a controla dispozitivele pe care le-a construit.

În timpul testului de stres am întâmpinat o singură problemă: am crezut că modul „decădere rapidă” al motorului ar funcționa cel mai bine, dar a făcut ca viteza motorului să scadă dramatic după câteva secunde de funcționare. Așa că am schimbat codul pentru a folosi slow decay.

Control fără fir al motoarelor Lego cu Steam Controller

Nu sunt încă sigur cum funcționează DRV-ul și de ce motorul se rotește repede la început, iar apoi, după 10 secunde, începe să încetinească treptat. Poate că MOSFET-urile se încălzesc și rezistența lor crește prea mult.

Sper că această utilizare fără efort a Arduino va servi ca o inspirație pentru alții pentru a-și aduce copiii în electronică.

Sursa: www.habr.com

Adauga un comentariu