Bezprzewodowe sterowanie silnikami Lego za pomocą Steam Controllera

Bezprzewodowe sterowanie silnikami Lego za pomocą Steam Controllera

Kiedy byłem młody, zawsze chciałem mieć techników Lego, z którymi mógłbym budować fajne rzeczy. Autonomiczne czołgi z obracającymi się wieżami strzelającymi klockami Lego. Ale wtedy nie miałem takiego zestawu.

I nie było nawet zwykłych klocków Lego. Miałem tylko przyjaciela, którego brat miał te wszystkie drogie zabawki.

A teraz mam syna w tym wieku. I buduje czołgi, które... głupio do przodu, aż rozbiją się o ścianę 🙂

A teraz czas na ESP32 i magię lutownicy – ​​złóżmy do nich odpowiedni pilot!

Nie, oczywiście wiem o istnieniu takich pilotów. Jednak żaden z nich nie pasuje mi idealnie. Są albo na podczerwień, z technologią lat 80., albo są za duże. Albo drogie. A co najważniejsze, o żadnym z nich nie będę mogła powiedzieć synowi: „Zrobiłam to specjalnie dla Ciebie!”

Stwórzmy więc nowy, ulepszony pilot, który będzie rządził wszystkimi!

Bezprzewodowe sterowanie silnikami Lego za pomocą Steam Controllera

Składniki:

  • ESP32-WROOM-32D | WiFi, BLE i procesor z wejściami/wyjściami - wystarczy do sterowania dwoma Motoryzacja и PROWADZONY.
  • DRV8833 | podwójny mostek H zapewniający wystarczającą moc dla silników.
  • TPS62162 | obniżyć napięcie do 17V, także dla zabawy przy lutowaniu obudowy WSON-8 2x2mm
  • CP2104 | do programowania ESP32
  • Złącza do podłączenia silników i diod. Przetnij przewody i przylutuj je od dołu, a na górze przyklej złącze Lego.

Wszystko to zostanie umieszczone na dość małej planszy – oto jej wygląd w edytorze EasyEDA:

Bezprzewodowe sterowanie silnikami Lego za pomocą Steam Controllera

Przewód widoczny na zdjęciu tytułowym nie jest potrzebny do skorygowania niektórych błędów, ale do zasilania z USB. Na silnik może to nie wystarczyć, ale niestety kontakty z Chin jeszcze do mnie nie dotarły. Dlatego najpierw sprawdzam działanie diod LED. Dla urody na zdjęciu po prostu włożyłem złącze od silnika na płytkę.

Wersja 1.1 mojej płytki (w przeciwieństwie do wersji 1.2 już na EasyEDA) nie miała diod LED, więc przylutowałem do wyjścia dwie diody antyrównoległe, aby zobaczyć, co się dzieje. Jeśli przyjrzysz się uważnie, film pokazuje naprzemienne załączanie pary diod 0603, sygnalizujących ruch do przodu / do tyłu.

Jeśli chodzi o pilota to na początku chciałem po prostu złożyć dodatkową płytkę z przyciskami i jeszcze jeden ESP32 - klasyczny pilot.

Jednak potem przypomniałem sobie, że kontrolery Steam mają tryb działania Bluetooth Low Energy (BLE). Postanowiłem uporać się z tym problemem i już po kilku godzinach dowiedziałem się jak odbierać pakiety ze sterownika.

Aby to zrobić, wystarczy poszukać urządzenia HID, które nazywa się SteamController i połączyć się z nim. A następnie skorzystaj z nieudokumentowanej usługi Valve i kilku nieudokumentowane polecenia, umożliwiając transmisję pakietów.

Bezprzewodowe sterowanie silnikami Lego za pomocą Steam Controllera

Natknąłem się także na nieudokumentowany format raportu, który przeanalizowałem ręcznie.

Bezprzewodowe sterowanie silnikami Lego za pomocą Steam Controllera

Po około godzinie znaczenie flag i wartości stało się dla mnie jasne i udało mi się mrugnąć diodą za pomocą kontrolera Steam i ESP32. ¯_(ツ)_/¯

Pliki

v1.0: „podejście próbne”
- pierwsza opcja dla której wybrałem zły regulator napięcia. TPS62291 pobiera napięcie tylko do 6 V. Pracowałem równolegle nad kilkoma projektami i zapomniałem, że urządzenie musi pracować z napięciem 9 V.

v1.1: "wystarczająco dobry"
- ta opcja jest widoczna na filmach i wszystko działa

v1.2: "finał"
- dodano diody sygnalizacyjne na wyjściu oraz zoptymalizowano rozmiar i układ płytki

Poniższy krótki film przedstawia fazę podłączenia (1-3 sekundy po włączeniu zasilania) i sterowanie wyjściami silnika. Złącze z Lego nie jest jeszcze podłączone. Trafi w puste miejsce obok pozostałych złączy, oznaczone białym prostokątem.

Mój syn obecnie regularnie używa tego sterownika do sterowania złożonymi przez siebie maszynami.

Podczas testu obciążeniowego napotkałem tylko jeden problem: myślałem, że najlepiej sprawdzi się tryb „szybkiego zaniku” [szybkiego zaniku] sterownika silnika, ale z tego powodu po kilku sekundach pracy prędkość silnika bardzo spadła . Zmieniłem więc kod tak, aby używał „powolnego zaniku” [powolnego zaniku].

Bezprzewodowe sterowanie silnikami Lego za pomocą Steam Controllera

Chociaż nie jestem pewien jak działa DRV i dlaczego silnik na początku kręci się szybko, a potem po 10 sekundach zaczyna stopniowo zwalniać. Być może tranzystory MOSFET nagrzewają się i ich rezystancja zbytnio rośnie.

Mam nadzieję, że ten przykład bezproblemowego wykorzystania Arduino zainspiruje innych ludzi i pozwoli im zapoznać swoje dzieci z elektroniką.

Źródło: www.habr.com

Dodaj komentarz