Wireless na kontrol ng Lego motors gamit ang Steam Controller

Wireless na kontrol ng Lego motors gamit ang Steam Controller

Noong bata pa ako, gusto ko palaging magkaroon ng mga set ng Lego techno para makabuo ng mga cool na bagay. Mga autonomous na tank na may umiikot na turret na nagpapaputok ng mga Lego brick. Ngunit pagkatapos ay wala akong ganoong set.

At wala pang regular na Lego brick. Mayroon lang akong kaibigan na ang kapatid ay may lahat ng mamahaling laruan na ito.

At ngayon may anak na ako sa ganoong edad. At siya ay nagtatayo ng mga tangke na ... stupidly forward hanggang sa sila ay bumagsak sa pader πŸ™‚

At ngayon, oras na para sa ESP32 at ang magic ng soldering iron - i-assemble natin ang tamang remote control para sa kanila!

Hindi, siyempre alam ko ang tungkol sa pagkakaroon ng mga naturang remote. Ngunit wala sa kanila ang ganap na nababagay sa akin. Ang mga ito ay alinman sa infrared, na may 80s na teknolohiya, o masyadong malaki. O mga mahal. At higit sa lahat, hindi ko masasabi sa aking anak ang tungkol sa alinman sa kanila: "Ginawa ko ito lalo na para sa iyo!"

Kaya gumawa tayo ng bago at pinahusay na remote control para mamuno sa lahat!

Wireless na kontrol ng Lego motors gamit ang Steam Controller

Mga Sangkap:

  • ESP32-WROOM-32D | WiFi, BLE at processor na may I/O - sapat na upang kontrolin ang dalawa mga motor ΠΈ LED.
  • DRV8833 | double H-bridge na may sapat na kapangyarihan para sa mga motor.
  • TPS62162 | i-step down ang boltahe sa 17V, para din masaya kapag naghihinang ng WSON-8 2x2mm case
  • CP2104 | para sa ESP32 programming
  • Mga konektor para sa pagkonekta ng mga motor at diode. Gupitin ang mga wire at ihinang ang mga ito sa ibaba, at idikit ang Lego connector sa itaas.

Ang lahat ng ito ay ilalagay sa isang medyo maliit na board - narito ang hitsura nito sa editor ng EasyEDA:

Wireless na kontrol ng Lego motors gamit ang Steam Controller

Ang wire, na makikita sa pamagat ng larawan, ay kailangan hindi upang itama ang ilang mga error, ngunit upang magbigay ng kapangyarihan mula sa USB. Maaaring hindi ito sapat para sa motor, ngunit, sa kasamaang-palad, ang mga contact mula sa China ay hindi pa dumarating sa akin. Samakatuwid, sinusuri ko muna ang pagpapatakbo ng mga LED. Para sa kagandahan sa larawan, inilagay ko lang ang connector mula sa motor sa board.

Ang bersyon 1.1 ng aking board (hindi tulad ng bersyon 1.2 na nasa EasyEDA) ay walang mga LED, kaya nag-solder ako ng dalawang anti-parallel diodes sa output para makita ko kung ano ang nangyayari. Kung titingnan mong mabuti, ipinapakita ng video ang kahaliling pag-on ng isang pares ng diode 0603, na nagpapahiwatig ng pasulong / paatras na paggalaw.

Tulad ng para sa remote control, sa una gusto ko lang mag-ipon ng isang karagdagang board na may mga pindutan at isa pang ESP32 - isang klasikong remote control.

Gayunpaman, pagkatapos ay naalala ko na ang Steam Controllers ay may Bluetooth Low Energy (BLE) mode of operation. Nagpasya akong harapin ang isyung ito, at pagkatapos ng ilang oras natutunan ko kung paano tumanggap ng mga packet mula sa controller.

Para magawa ito, kailangan mo lang maghanap ng HID device na tinatawag ang sarili nitong SteamController at kumonekta dito. At pagkatapos ay gumamit ng isang hindi dokumentadong serbisyo mula sa Valve at ilan mga hindi dokumentadong utos, na nagpapahintulot sa pagpapadala ng mga packet.

Wireless na kontrol ng Lego motors gamit ang Steam Controller

Nakakita din ako ng isang hindi dokumentadong format ng ulat na manu-mano kong na-parse.

Wireless na kontrol ng Lego motors gamit ang Steam Controller

Pagkalipas ng halos isang oras, naging malinaw sa akin ang kahulugan ng mga flag at value, at nagawa kong i-blink ang LED gamit ang Steam controller at ESP32. Β―_(ツ)_/Β―

Mga file

v1.0: "pagsubok na diskarte"
- ang unang pagpipilian kung saan pinili ko ang maling regulator ng boltahe. Ang TPS62291 ay tumatagal lamang ng boltahe hanggang 6V. Ako ay bumubuo ng ilang mga proyekto nang magkatulad, at nakalimutan ko na ang aparato ay kailangang gumana sa 9V.

v1.1: "sapat na"
- ang pagpipiliang ito ay makikita sa mga video, at lahat ay gumagana

v1.2: "pangwakas"
- Nagdagdag ng mga indicator LED sa output at na-optimize ang laki at layout ng board

Ipinapakita ng sumusunod na maikling video ang yugto ng koneksyon (1-3 seg pagkatapos ng power up) at kontrol ng mga output ng motor. Hindi pa konektado ang connector mula sa Lego. Mapupunta ito sa bakanteng espasyo sa tabi ng iba pang mga konektor, na minarkahan ng puting parihaba.

Ang aking anak na lalaki ngayon ay regular na gumagamit ng controller na ito upang kontrolin ang mga makina na kanyang binuo.

Sa panahon ng stress test, isang problema lang ang naranasan ko: Naisip ko na ang "mabilis na pagkabulok" mode [mabilis na pagkabulok] ng driver ng motor ay pinakamahusay na gagana, ngunit dahil dito, pagkatapos ng ilang segundo ng operasyon, ang bilis ng motor ay bumaba nang husto. . Kaya binago ko ang code para gumamit ito ng "slow decay" [slow decay].

Wireless na kontrol ng Lego motors gamit ang Steam Controller

Bagama't hindi ako sigurado kung paano gumagana ang DRV at kung bakit mabilis na umiikot ang motor sa una, at pagkatapos ay pagkatapos ng 10 segundo ay unti-unti itong bumagal. Marahil ang mga MOSFET ay umiinit at ang kanilang resistensya ay tumataas nang labis.

Umaasa ako na ang halimbawang ito ng kung paano gamitin ang Arduino ay walang kahirap-hirap na nagbibigay inspirasyon sa ibang tao at nagbibigay-daan sa kanila na ipakilala ang kanilang mga anak sa electronics.

Pinagmulan: www.habr.com

Magdagdag ng komento