Drahtlose Motorsteuerung von Lego mit Steam Controller



Als ich jung war, wollte ich immer Lego Technics-Kits haben, um alle möglichen coolen Sachen von ihnen zu sammeln. Autonome Panzer mit rotierenden Türmen, die Legosteine ​​abfeuern. Aber dann hatte ich kein solches Set.

Und selbst die üblichen Steine ​​von Lego waren es nicht. Ich hatte nur einen Freund, dessen Bruder all diese teuren Spielsachen hatte.

Und jetzt habe ich einen Sohn in seinem Alter. Und er baut Panzer, die ... dumm nach vorne ragen, bis sie gegen die Wand

stoßen :) Und jetzt ist die Zeit für ESP32 und die Magie des Lötkolbens gekommen - wir werden die richtige Fernbedienung für sie zusammenbauen!

Nein, natürlich weiß ich über die Existenz solcher Fernbedienungen Bescheid. Aber keiner von ihnen passt zu mir. Sie sind entweder Infrarot mit Technologie der 80er Jahre oder zu groß. Oder teuer. Und vor allem - ich kann meinem Sohn zu keinem von ihnen sagen: "Ich habe es speziell für dich getan!"

Machen wir also eine neue, verbesserte Fernbedienung, um alle zu regieren!



Zutaten:

  • ESP32-WROOM-32D | WiFi, BLE und ein Prozessor mit E / A - genug, um zwei Motoren und eine LED zu steuern .
  • DRV8833 | Doppel-H-Brücke mit genügend Leistung für Motoren.
  • TPS62162 | Senkung der Spannung auf 17 V sowie zur Unterhaltung beim Löten des Gehäuses WSON-8 2 × 2 mm
  • CP2104 | zur Programmierung von ESP32
  • . , Lego .

All dies wird sich auf einer eher kleinen Platine befinden - hier ist sein Erscheinungsbild im EasyEDA-Editor: Der



Draht, der auf dem Header-Foto sichtbar ist, wird nicht benötigt, um Fehler zu beheben, sondern um Strom über USB zu liefern. Es mag nicht genug für den Motor sein, aber leider sind Kontakte aus China immer noch nicht zu mir gekommen. Deshalb überprüfe ich zuerst die Funktion der LEDs. Für die Schönheit auf dem Foto habe ich einfach den Stecker vom Motor auf die Platine gelegt.

Auf Version 1.1 meines Boards (im Gegensatz zu Version 1.2, die bereits auf EasyEDA läuft) gab es keine LEDs, daher habe ich zwei antiparallele Dioden an den Ausgang gelötet, damit das Geschehen sichtbar war. Wenn Sie genau hinschauen, zeigt das Video die alternative Aufnahme eines Paares von 0603-Dioden, die eine Vorwärts- / Rückwärtsbewegung anzeigen.



Für das Bedienfeld wollte ich zunächst nur eine zusätzliche Karte mit Tasten und ein weiteres ESP32 - eine klassische Fernbedienung - sammeln.

Dann erinnerte ich mich jedoch daran, dass Steam Controller einen Bluetooth Low Energy Mode (BLE) haben. Ich beschloss, dieses Problem anzugehen, und lernte nach einigen Stunden, wie man Pakete vom Controller empfängt.

Suchen Sie dazu einfach nach dem HID-Gerät, das sich SteamController nennt, und stellen Sie eine Verbindung her. Verwenden Sie dann den undokumentierten Dienst von Valve und einige undokumentierte Befehle , die Paketübertragungen ermöglichen.



Außerdem bin ich auf ein undokumentiertes Berichtsformat gestoßen, das ich manuell analysiert habe.



Nach ungefähr einer Stunde wurde mir die Bedeutung der Flags und Werte klar und ich schaffte es, die LED mit dem Steam-Controller und ESP32 zu blinken. ¯ \ _ (ツ) _ / ¯

Dateien



v1.0: „Testansatz“
- die erste Option, für die ich den falschen Spannungsregler gewählt habe. TPS62291 erhöht die Spannung nur auf 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 der Werbung sichtbar und alles funktioniert

v1.2: „final“.
- Dem Ausgang wurden Anzeige-LEDs hinzugefügt und die Größe und Anordnung der Platine optimiert.

Das nächste kurze Video zeigt die Verbindungsphase (1-3 Sekunden nach dem Einschalten) und die Steuerung der Motorausgänge. Der Lego-Anschluss ist noch nicht angeschlossen. Es wird in einen leeren Bereich neben den anderen Anschlüssen verschoben, der mit einem weißen Rechteck markiert ist.



Mein Sohn verwendet diesen Controller jetzt regelmäßig, um die von ihm zusammengebauten Geräte zu steuern.

Während des Stresstests stieß ich nur auf ein Problem: Ich dachte, dass der „Fast Decay“ -Modus des Motortreibers am besten funktionieren würde, aber aufgrund dessen würde die Motordrehzahl nach einigen Sekunden Betrieb sehr stark sinken. Also habe ich den Code so geändert, dass er "Slow Decay" verwendet.



Bisher bin ich mir nicht sicher, wie das DRV funktioniert und warum sich der Motor zuerst schnell dreht und nach 10 Sekunden allmählich langsamer wird. Vielleicht erwärmen sich die MOSFETs und ihr Widerstand steigt zu stark an.



Ich hoffe, dieses Beispiel für die mühelose Verwendung von Arduino inspiriert andere Menschen und ermöglicht ihnen, ihre Kinder mit Elektronik vertraut zu machen.

All Articles