Drahtlose Steuerung von Lego-Motoren mit dem Steam Controller

Drahtlose Steuerung von Lego-Motoren mit dem Steam Controller

Als ich jung war, wollte ich immer Lego-Techno-Sets haben, mit denen ich coole Dinge bauen konnte. Autonome Panzer mit drehbaren Geschütztürmen, die Legosteine ​​abfeuern. Aber dann hatte ich kein solches Set.

Und es gab nicht einmal normale Legosteine. Ich hatte nur einen Freund, dessen Bruder all diese teuren Spielsachen hatte.

Und jetzt habe ich einen Sohn in diesem Alter. Und er baut Panzer, die ... dumm vorwärts gehen, bis sie gegen die Wand krachen 🙂

Und jetzt ist es Zeit für den ESP32 und die Magie des Lötkolbens – lasst uns die richtige Fernbedienung dafür zusammenbauen!

Nein, natürlich weiß ich von der Existenz solcher Fernbedienungen. Aber keine davon passt perfekt zu mir. Sie sind entweder Infrarot, mit 80er-Jahre-Technologie oder zu groß. Oder teure. Und das Wichtigste: Ich werde meinem Sohn nichts davon erzählen können: „Das habe ich extra für dich gemacht!“

Also lasst uns eine neue, verbesserte Fernbedienung entwickeln, um alle zu beherrschen!

Drahtlose Steuerung von Lego-Motoren mit dem Steam Controller

Zutaten:

  • ESP32-WROOM-32D | WLAN, BLE und Prozessor mit I/O – genug, um zwei zu steuern Motoren и LED.
  • DRV8833 | Doppel-H-Brücke mit ausreichend Leistung für die Motoren.
  • TPS62162 | Reduzieren Sie die Spannung auf 17 V, auch zum Spaß beim Löten des WSON-8 2x2mm-Gehäuses
  • CP2104 | für ESP32-Programmierung
  • Anschlüsse zum Anschluss von Motoren und Dioden. Schneiden Sie die Drähte ab, löten Sie sie unten an und kleben Sie den Lego-Stecker oben fest.

All dies wird auf einer eher kleinen Tafel platziert – hier ist seine Darstellung im EasyEDA-Editor:

Drahtlose Steuerung von Lego-Motoren mit dem Steam Controller

Das auf dem Titelfoto sichtbare Kabel wird nicht zur Korrektur einiger Fehler benötigt, sondern zur Stromversorgung über USB. Für den Motor reicht es vielleicht nicht, aber leider sind noch keine Kontakte aus China zu mir gekommen. Daher überprüfe ich zunächst die Funktion der LEDs. Um das Foto schöner zu machen, habe ich einfach den Stecker vom Motor auf die Platine gesteckt.

Version 1.1 meines Boards (im Gegensatz zu Version 1.2 bereits auf EasyEDA) hatte keine LEDs, also habe ich zwei antiparallele Dioden an den Ausgang gelötet, damit ich sehen konnte, was passierte. Wenn Sie genau hinsehen, zeigt das Video das abwechselnde Einschalten eines Diodenpaars 0603, das eine Vorwärts-/Rückwärtsbewegung anzeigt.

Was die Fernbedienung angeht, wollte ich zunächst nur eine zusätzliche Platine mit Tasten und einen weiteren ESP32 zusammenbauen – eine klassische Fernbedienung.

Dann fiel mir jedoch ein, dass die Steam Controller über einen Bluetooth Low Energy (BLE)-Betriebsmodus verfügen. Ich beschloss, mich mit diesem Problem zu befassen, und nach ein paar Stunden lernte ich, wie man Pakete vom Controller empfängt.

Dazu müssen Sie lediglich nach einem HID-Gerät suchen, das sich SteamController nennt, und eine Verbindung zu diesem herstellen. Und dann einen undokumentierten Dienst von Valve und einigen anderen nutzen undokumentierte Befehle, was die Übertragung von Paketen ermöglicht.

Drahtlose Steuerung von Lego-Motoren mit dem Steam Controller

Ich bin auch auf ein undokumentiertes Berichtsformat gestoßen, das ich manuell analysiert habe.

Drahtlose Steuerung von Lego-Motoren mit dem Steam Controller

Nach etwa einer Stunde wurde mir die Bedeutung der Flags und Werte klar und ich schaffte es, die LED mit dem Steam-Controller und ESP32 zum Blinken zu bringen. ¯_(ツ)_/¯

Dateien

v1.0: „Versuchsansatz“
- die erste Option, für die ich den falschen Spannungsregler gewählt habe. Der TPS62291 verträgt die Spannung nur bis 6 V. Ich habe mehrere Projekte parallel entwickelt und vergessen, dass das Gerät mit 9 V arbeiten muss.

v1.1: "gut genug"
- Diese Option ist in den Videos sichtbar und alles funktioniert

v1.2: "Finale"
- Anzeige-LEDs zum Ausgang hinzugefügt und Größe und Layout der Platine optimiert

Das folgende kurze Video zeigt die Verbindungsphase (1-3 Sek. nach dem Einschalten) und die Steuerung der Motorausgänge. Stecker von Lego ist noch nicht angeschlossen. Es wird an den leeren Platz neben den anderen Anschlüssen verschoben, der mit einem weißen Rechteck markiert ist.

Mein Sohn nutzt diesen Controller mittlerweile regelmäßig zur Steuerung der von ihm zusammengebauten Maschinen.

Während des Stresstests stieß ich nur auf ein Problem: Ich dachte, dass der „Fast Decay“-Modus [schneller Abfall] des Motortreibers am besten funktionieren würde, aber dadurch sank die Motorgeschwindigkeit nach ein paar Sekunden Betrieb sehr stark . Deshalb habe ich den Code so geändert, dass er „langsamer Zerfall“ [langsamer Zerfall] verwendet.

Drahtlose Steuerung von Lego-Motoren mit dem Steam Controller

Ich bin mir zwar nicht sicher, wie das DRV funktioniert und warum der Motor zunächst schnell dreht und dann nach 10 Sekunden allmählich langsamer wird. Möglicherweise erhitzen sich die MOSFETs und ihr Widerstand steigt zu stark an.

Ich hoffe, dass dieses Beispiel für die mühelose Verwendung des Arduino andere Menschen inspiriert und es ihnen ermöglicht, ihre Kinder an die Elektronik heranzuführen.

Source: habr.com

Kommentar hinzufügen