Steam コントローラーを使用したレゴモーターのワイヤレス制御

Steam コントローラーを使用したレゴモーターのワイヤレス制御

子供の頃、クールなものを作るためにレゴテクノセットが欲しいといつも思っていました。 レゴブロックを発射する回転砲塔を備えた自律型戦車。 しかし、当時はそのようなセットはありませんでした。

そして、通常のレゴブロックさえありませんでした。 私には、これらの高価なおもちゃをすべて持っている兄弟を持つ友人しかいませんでした。

そして今、私にはその年齢の息子がいます。 そして彼は戦車を建造します...壁に激突するまで愚かにも前進します 🙂

そして今、ESP32 とはんだごての魔法の出番です。ESPXNUMX に適したリモコンを組み立てましょう。

いや、もちろんそのようなリモコンの存在は知っています。 しかし、どれも私にぴったり合うものはありません。 それらは 80 年代のテクノロジーを使用した赤外線であるか、大きすぎるかのいずれかです。 または高価なもの。 そして最も重要なことは、私はこれらのことについて息子に「私は特別にあなたのためにやったのです!」と言うことができなくなるということです。

それで、みんなを支配するために、新しく改良されたリモコンを作りましょう!

Steam コントローラーを使用したレゴモーターのワイヤレス制御

成分:

  • ESP32-WROOM-32D | WiFi、BLE、I/O を備えたプロセッサー - XNUMX つを制御するのに十分 モーター и 導かれた.
  • DRV8833 | モーターに十分な電力を備えたダブル H ブリッジ。
  • TPS62162 | 電圧を 17V に下げます。WSON-8 2x2mm ケースをはんだ付けするときにも楽しめます。
  • CP2104 | ESP32プログラミング用
  • コネクター モーターとダイオードの接続用。 ワイヤーを切って底部にはんだ付けし、上にレゴコネクタを接着します。

これらすべてはかなり小さなボード上に配置されます。EasyEDA エディターでの外観は次のとおりです。

Steam コントローラーを使用したレゴモーターのワイヤレス制御

タイトル写真に見えるワイヤーは、エラーを修正するためではなく、USB から電源を供給するために必要です。 モーターには十分ではないかもしれませんが、残念ながら中国からの連絡はまだ来ていません。 そこで、まずはLEDの動作を確認します。 写真の美しさのために、モーターからのコネクタを基板に置いただけです。

私のボードのバージョン 1.1 (EasyEDA にすでに搭載されているバージョン 1.2 とは異なります) には LED がなかったため、何が起こっているかを確認できるように 0603 つの逆並列ダイオードを出力にはんだ付けしました。 よく見ると、ビデオでは一対のダイオード XNUMX が交互にオンになり、前進/後進の動きを示しています。

リモコンに関しては、最初はボタンを備えた追加のボードと、古典的なリモコンであるもう 32 つの ESPXNUMX を組み立てたいと思っていました。

しかし、Steam コントローラーには Bluetooth Low Energy (BLE) 動作モードがあることを思い出しました。 私はこの問題に対処することに決め、数時間後にコントローラーからパケットを受信する方法を学びました。

これを行うには、SteamController と呼ばれる HID デバイスを探して接続するだけです。 そして、Valve の文書化されていないサービスといくつかのサービスを使用します。 文書化されていないコマンド、パケットの送信を許可します。

Steam コントローラーを使用したレゴモーターのワイヤレス制御

また、手動で解析した文書化されていないレポート形式も見つけました。

Steam コントローラーを使用したレゴモーターのワイヤレス制御

約 32 時間後、フラグと値の意味が明確になり、Steam コントローラーと ESPXNUMX を使用して LED を点滅させることができました。  ̄_(ツ)_/ ̄

ファイル

v1.0: 「トライアルアプローチ」
- 最初のオプションでは、間違った電圧レギュレータを選択しました。 TPS62291 は最大 6V までの電圧しか受け付けませんが、いくつかのプロジェクトを並行して開発していたのですが、デバイスが 9V で動作する必要があることを忘れていました。

v1.1: 「十分です」
- このオプションはビデオに表示されており、すべて機能します。

v1.2: "最後の"
- 出力にインジケーター LED を追加し、ボードのサイズとレイアウトを最適化しました。

次の短いビデオは、接続段階 (電源投入後 1 ~ 3 秒) とモーター出力の制御を示しています。 レゴのコネクタはまだ接続されていません。 白い長方形でマークされた、他のコネクタの隣の空きスペースに移動します。

私の息子は現在、このコントローラーを定期的に使用して、組み立てたマシンを制御しています。

ストレス テスト中に、私は XNUMX つだけ問題に遭遇しました。モーター ドライバーの「高速減衰」モードが最適に機能すると考えていましたが、そのせいで、数秒の動作後にモーター速度が大幅に低下してしまいました。 。 そこで、「slowdecay」[遅い減衰]を使用するようにコードを変更しました。

Steam コントローラーを使用したレゴモーターのワイヤレス制御

DRV がどのように機能するのか、なぜ最初はモーターが速く回転し、10 秒後に徐々に速度が低下し始めるのかはわかりません。 おそらく MOSFET が加熱し、抵抗が上昇しすぎている可能性があります。

Arduino の簡単な使い方の例が他の人たちにインスピレーションを与え、子供たちに電子機器を紹介できるようになれば幸いです。

出所: habr.com

コメントを追加します