Trådlös styrning av legomotorer med Steam Controller

Trådlös styrning av legomotorer med Steam Controller

När jag var ung ville jag alltid ha Lego-technoset att bygga coola saker med. Autonoma stridsvagnar med snurrande torn som avfyrar legoklossar. Men då hade jag inte ett sådant set.

Och det fanns inte ens vanliga legoklossar. Jag hade bara en vän vars bror hade alla dessa dyra leksaker.

Och nu har jag en son i den åldern. Och han bygger stridsvagnar som ... dumt framåt tills de kraschar in i väggen 🙂

Och nu är det dags för ESP32 och lödkolvens magi - låt oss montera rätt fjärrkontroll för dem!

Nej, självklart vet jag om förekomsten av sådana fjärrkontroller. Men ingen av dem passar mig perfekt. De är antingen infraröda, med 80-talsteknik, eller för stora. Eller dyra. Och viktigast av allt, jag kommer inte att kunna berätta för min son om någon av dem: "Jag gjorde det speciellt för dig!"

Så låt oss skapa en ny, förbättrad fjärrkontroll som styr alla!

Trådlös styrning av legomotorer med Steam Controller

Ingredienser:

  • ESP32-WROOM-32D | WiFi, BLE och processor med I/O - tillräckligt för att styra två motorer и LED.
  • DRV8833 | dubbel H-brygga med tillräckligt med kraft för motorerna.
  • TPS62162 | minska spänningen till 17V, även för skojs skull när man löder WSON-8 2x2mm fodral
  • CP2104 | för ESP32-programmering
  • kontakter för anslutning av motorer och dioder. Klipp av ledningarna och löd dem på botten, och limma Lego-kontakten ovanpå.

Allt detta kommer att placeras på en ganska liten tavla - här är dess utseende i EasyEDA-redigeraren:

Trådlös styrning av legomotorer med Steam Controller

Kabeln, som syns på titelbilden, behövs inte för att rätta till vissa fel, utan för att förse ström från USB. Det kanske inte räcker för motorn, men tyvärr har kontakter från Kina inte kommit till mig ännu. Därför kontrollerar jag först driften av lysdioderna. För skönheten i bilden satte jag bara kontakten från motorn på kortet.

Version 1.1 av mitt kort (till skillnad från version 1.2 redan på EasyEDA) hade inga lysdioder, så jag lödde två antiparallella dioder till utgången så att jag kunde se vad som hände. Om du tittar noga visar videon den alternativa tändningen av ett par dioder 0603, vilket indikerar rörelse framåt/bakåt.

När det gäller fjärrkontrollen så ville jag först bara sätta ihop ett extra kort med knappar och ytterligare en ESP32 - en klassisk fjärrkontroll.

Men då kom jag ihåg att Steam Controllers har ett Bluetooth Low Energy (BLE) funktionsläge. Jag bestämde mig för att ta itu med det här problemet, och efter några timmar lärde jag mig hur man tar emot paket från kontrollern.

För att göra detta behöver du bara leta efter en HID-enhet som kallar sig SteamController och ansluta till den. Och använd sedan en odokumenterad tjänst från Valve och några odokumenterade kommandon, som tillåter överföring av paket.

Trådlös styrning av legomotorer med Steam Controller

Jag stötte också på ett odokumenterat rapportformat som jag analyserade manuellt.

Trådlös styrning av legomotorer med Steam Controller

Efter ungefär en timme blev betydelsen av flaggorna och värdena klar för mig, och jag lyckades blinka lysdioden med Steam-kontrollern och ESP32. ¯_(ツ)_/¯

filer

v1.0: "försöksmetod"
- det första alternativet som jag valde fel spänningsregulator för. TPS62291 tar bara spänningen upp till 6 V. Jag utvecklade flera projekt parallellt och jag glömde att enheten måste fungera med 9 V.

v1.1: "tillräckligt bra"
- det här alternativet är synligt i videorna och allt fungerar

v1.2: "slutlig"
- Lade till indikatorlampor till utgången och optimerade storleken och layouten på kortet

Följande korta video visar anslutningsfasen (1-3 sek efter start) och styrning av motorutgångarna. Connector från Lego är inte ansluten än. Den kommer att gå till det tomma utrymmet bredvid de andra kontakterna, markerat med en vit rektangel.

Min son använder nu regelbundet denna kontroll för att styra maskinerna han har monterat.

Under stresstestet stötte jag på bara ett problem: jag trodde att motorförarens "snabb förfall"-läge [snabb försvagning] skulle fungera bäst, men på grund av det, efter några sekunders drift, sjönk motorhastigheten väldigt mycket . Så jag ändrade koden så att den använder "slow decay" [slow decay].

Trådlös styrning av legomotorer med Steam Controller

Även om jag inte är säker på hur DRV fungerar och varför motorn snurrar snabbt till en början, och sedan efter 10 sekunder börjar den gradvis sakta ner. Kanske MOSFET-enheterna värms upp och deras motstånd ökar för mycket.

Jag hoppas att detta exempel på hur man använder Arduino utan ansträngning inspirerar andra människor och låter dem introducera sina barn till elektronik.

Källa: will.com

Lägg en kommentar