Trådløs styring av Lego-motorer med Steam Controller

Trådløs styring av Lego-motorer med Steam Controller

Da jeg var ung, ønsket jeg alltid å ha Lego-teknikere å bygge kule ting med. Autonome stridsvogner med spinnende tårn som fyrer av legoklosser. Men så hadde jeg ikke et slikt sett.

Og det var ikke engang vanlige legoklosser. Jeg hadde bare en venn hvis bror hadde alle disse dyre lekene.

Og nå har jeg en sønn på den alderen. Og han bygger stridsvogner som ... dumt fremover til de krasjer i veggen 🙂

Og nå er det tid for ESP32 og magien med loddebolten - la oss sette sammen den rette fjernkontrollen for dem!

Nei, selvfølgelig vet jeg om eksistensen av slike fjernkontroller. Men ingen av dem passer meg perfekt. De er enten infrarøde, med 80-tallsteknologi, eller for store. Eller dyre. Og viktigst av alt, jeg vil ikke kunne fortelle sønnen min om noen av dem: "Jeg gjorde det spesielt for deg!"

Så la oss lage en ny, forbedret fjernkontroll for å styre alle!

Trådløs styring av Lego-motorer med Steam Controller

Ingredienser:

  • ESP32-WROOM-32D | WiFi, BLE og prosessor med I/O - nok til å kontrollere to motorer и LED.
  • DRV8833 | dobbel H-bro med nok kraft til motorene.
  • TPS62162 | trappe ned spenningen til 17V, også for moro skyld ved lodding av WSON-8 2x2mm dekselet
  • CP2104 | for ESP32-programmering
  • kontakter for tilkobling av motorer og dioder. Klipp av ledningene og lodd dem på bunnen, og lim Lego-kontakten på toppen.

Alt dette vil bli plassert på en ganske liten tavle - her er utseendet i EasyEDA-editoren:

Trådløs styring av Lego-motorer med Steam Controller

Ledningen, som er synlig på tittelbildet, trengs ikke for å rette opp noen feil, men for å forsyne strøm fra USB. Det er kanskje ikke nok for motoren, men kontakter fra Kina har dessverre ikke kommet til meg ennå. Derfor sjekker jeg først driften av lysdiodene. For skjønnheten i bildet, satte jeg bare kontakten fra motoren på brettet.

Versjon 1.1 av kortet mitt (i motsetning til versjon 1.2 allerede på EasyEDA) hadde ingen lysdioder, så jeg loddet to antiparallelle dioder til utgangen slik at jeg kunne se hva som skjedde. Hvis du ser nøye etter, viser videoen vekselvis påslåing av et par dioder 0603, som indikerer bevegelse fremover/bakover.

Når det gjelder fjernkontrollen, ville jeg først bare sette sammen et ekstra brett med knapper og en annen ESP32 - en klassisk fjernkontroll.

Men da husket jeg at Steam-kontrollerne har en Bluetooth Low Energy (BLE) driftsmodus. Jeg bestemte meg for å håndtere dette problemet, og etter noen timer lærte jeg å motta pakker fra kontrolleren.

For å gjøre dette trenger du bare å se etter en HID-enhet som kaller seg SteamController og koble til den. Og så bruk en udokumentert tjeneste fra Valve og noen få udokumenterte kommandoer, som tillater overføring av pakker.

Trådløs styring av Lego-motorer med Steam Controller

Jeg kom også over et udokumentert rapportformat som jeg analyserte manuelt.

Trådløs styring av Lego-motorer med Steam Controller

Etter omtrent en time ble betydningen av flaggene og verdiene tydelige for meg, og jeg klarte å blinke LED-en ved hjelp av Steam-kontrolleren og ESP32. ¯_(ツ)_/¯

filer

v1.0: "prøvetilnærming"
- det første alternativet som jeg valgte feil spenningsregulator for. TPS62291 tar bare spenningen opp til 6 V. Jeg utviklet flere prosjekter parallelt, og jeg glemte at enheten må fungere med 9V.

v1.1: "bra nok"
- dette alternativet er synlig i videoene, og alt fungerer

v1.2: "endelig"
- lagt til indikatorlysdioder til utgangen og optimaliserte størrelsen og utformingen av brettet

Den følgende korte videoen viser tilkoblingsfasen (1-3 sek etter oppstart) og kontroll av motorutgangene. Connector fra Lego er ikke tilkoblet ennå. Den vil gå til det tomme rommet ved siden av de andre kontaktene, merket med et hvitt rektangel.

Sønnen min bruker nå regelmessig denne kontrolleren til å kontrollere maskinene han har satt sammen.

Under stresstesten møtte jeg bare ett problem: Jeg trodde at "rask forfall"-modus [rask forfall] til motorføreren ville fungere best, men på grunn av det, etter noen sekunders drift, falt motorhastigheten veldig mye . Så jeg endret koden slik at den bruker "slow decay" [slow decay].

Trådløs styring av Lego-motorer med Steam Controller

Selv om jeg ikke er sikker på hvordan DRV fungerer og hvorfor motoren snurrer raskt først, og deretter etter 10 sekunder begynner den å sakte ned gradvis. Kanskje MOSFET-ene varmes opp og motstanden deres øker for mye.

Jeg håper dette eksemplet på hvordan du bruker Arduino enkelt inspirerer andre mennesker og lar dem introdusere barna sine for elektronikk.

Kilde: www.habr.com

Legg til en kommentar