見出し画像

究極なリモートコントローラー?(Part-3)

皆さん!
やっとYouTube動画ができました!
忙しい人は、動画を先にどうぞ!笑

今回のnoteが前回の続きになります。
動画もできたので、それまでのやったことをまとめます。


ミスと失敗

前回のnoteでもちょっと触れましたが、いくつかのバグが見つかりました。今回はミスと失敗をまとめて書きます。そのあと、成功した部分を書きます。
ボードの大きさを考慮し、私は段階的なアプローチを取ることにしました。すべてを一度にハンダ付けするのではなく、各機能ブロックを個別にハンダ付けしてテストすることにしました。
ご想像の通り、このボードにはたくさんの部品と(比較的に)複雑な回路が織り込まれており、物事は常に期待通りにまとまるわけではありませんでした。問題なくそのまま動作する部品もあれば、バグで期待通りに動作しない回路もありました。
以下は、最初のバージョンのPCBで経験したバグと失敗です。

74HC4051ピン接続エラー

回路図にミスがありました。74HC4051のコモン(Z)出力ピンを接続し忘れたため、アナログ入力を受け取ることができませんでした。また間違えて2番ピンをGNDに接続してしまったため、I2Cアドレッシングが機能しませんでした。幸い、どうにか解決できました。

USBホストが動作しない

USBホスト機能のテスト中に、USBホスト回路で壁にぶつかりました。何をやってもうまくいかなかったのです。
どうやらMISOとMOSIが逆になっていたようです。
今のPCB設計では、この問題を解決するのは難しいと考え、MAX3421Eチップを使用したUSBホスト機能のテストのみを目的とした専用ボードを設計することにしました。
これによって問題を切り分け、メインのプロジェクトに影響を与えることなく取り組むことができると考えました。
新しいボードを作り、USBホストがどのように動作するかを紹介する専用のユーチューブ・ビデオを作るかもしれません!私のYouTubeチャンネルを今登録しといたほうがいいですよ!笑 


バッテリー充電と5V供給

バッテリーの充電と5ボルト供給回路についても、予期せぬ障害が発生しました。まず、(間違った)インダクターの定格電流容量が小さいため、最初の電源投入時に焼き切れてしまいました。
いろいろ調べた結果、バッテリーの充電と5Vの供給はできるが、両方を同時に行うことはできないことが分かりました。
これもどうように、TP5400の充電と昇圧機能をテストするためだけの専用基板を作ることにしました。

LM1117のフットプリントのミス

設計の初期段階で、LM1117のTabがグランド・ピンであるという誤解が設計ミスにつながりました。電源を入れると基板が非常に熱くなり、ショートの可能性を気づきました。その後、回路図に誤りを見つかり、PCB設計にも欠陥があったことに分かりました。
その後、耐熱テープと銅線を使って半田付けを再調整しました。この回避策によって基板をなんとか破棄することなく、プロジェクトを続けることができました。

ジャイロ: KXTJ3

KXTJ3-1057はフットプリントが小さいので、はんだ付けした後、I2C経由で検出するのに苦労しました。かなり長い間デバッグしなければならない羽目になりました。
KXTJ3-1057の回路はシンプルで、周辺機器もデパスコンくらいしかなく、新品だったので部品の故障は考えにくく、ハンダ付けミスではないかと考えました。PCBから取り外してみると、案の定、4本のピンがはんだ付けされておらず、そのためI2Cデバイスとして検出できなかったわけです!
フラックスを直接ピンに塗り、まずはんだをピンにのせて、その後、ホット・ガンで基板にはんだ付けしたら、うまく行きました!

成功したもの

ハンダ付けが進むにつれて、前述のようにいくつかのバグが見つかりました。しかし、全体としては非常にうまく行きました。当初想定していた機能の8割が正常に動作したので、実験ボードとしては成功と呼べるだろう!(笑)
では、成功した機能のいくつかを見てみましょう!

I2C拡張コネクタ

I2Cを使用するコネクターは、電源に5V入力を必要とするM5Stack I2Cモジュールを接続してテストする際にも問題なく動作しました。このPCBでは、2つのI2Cコネクタに5Vの電源が供給されているので、M5Stack I2Cモジュールも問題なく使用できます。
そのほか、3.3Vを電源とするI2Cモジュール用のI2Cコネクタも2つ用意しています。
今回のテストには、M5StackのQMP6988を搭載したMini BPSユニットをつかいました。

I2Sインターネットラジオ

I2S関連の回路をハンダ付けした後、以前作ったインターネットラジオのソースコードをほぼ修正なしでコードをESP32にアップロードすると、インターネットラジオが流れ始めました!
I2Sとその出力アンプ回路が含まれており、2つの小型表面実装スピーカーまで実装されているので、インターネットラジオは簡単に実装できたわけです。
過去に集めてテスト済みの回路のおかげです。
また、リモコンとしてプログラムすると、操作音を鳴らすこともできそうですね!
ハンダ付けもかなり終わり、ツマミなどを取り付ければほぼ完成。見た目はリモコンらしくなりました!

リモコン用プログラミング

ハードウェアの準備がほぼ整ったので、次はプログラミングです。
まず、ESP32が使える最速のグラフィック・ライブラリであるlovyanGFXを使ってディスプレイをテストします。複数のディスプレイを使用することも可能です。

GUI

GUIのプログラミングにはかなり時間が掛かりました。
比較的完成度の高い素敵なGUIを作ったのはこれが初めてかもしれません。大変な作業だが、作ったものは将来のプロジェクトにも使えるので、無駄にはなりません。
ジョイスティックの動きを視覚化して「見る」のはとても楽しいです。
次はジャイロセンサーの動きを可視化します。
左右、前後の傾きで円の位置が変わるので、視覚的にとてもわかりやすいです。円の大きさも上下に動くと変わるので、高さの変化も表現されます。
これでジョイスティックとエンコーダがGUIプログラムで可視化されました。
その後も、何日もかけてプログラミングした結果、GUIでオンボードの入力コンポーネントのすべての操作を視覚的にフィードバックできるようになりました!

受信機へのデータ送信

ESP-NOWでデータを送受信するには、データ構造をうまく整理する必要があります。これができれば、データの送受信は比較的簡単です。
受信機がデータを受信できるようになると、そのデータを使ってモーターやサーボなど、受信機側のものを制御することが可能になります。
動画の中でお見せするのは1つはジョイスティックを使ってロボットアームを制御する例です。もう1つは、ジャイロセンサーからのデータを使ってロボットアームを制御するものです。
ほかに例えば、ハスキーレンズを使っておもちゃの車をコントロールしたり、顔の位置や方向を使っておもちゃの車をコントロールしたりすることも作られそうですね。
ハスキーレンズでおもちゃの車をコントロールしたり、顔の位置や方向を使っておもちゃの車をコントロールしたり、またはマイクを通して声を使っておもちゃの車やロボットにコマンドを送ったりすることも考えられますね。
この20分以上の動画を見ていただければ、私の”究極”のリモートコントローラーがどのようなものかはご理解いただけたと思います。

今後の予定

というわけで、今日のnoteはここまで!
今後の作業としては、以下の内容を続けるかもしれない。

  • USB HOST機能をテストするための小さなPCBを作る。

  • TP5400をテストするために小さなPCBを作る。

  • バグを修正して、ESP32リモートコントロール用のメインPCBをアップデートする。

まとめ

今回のプロジェクトがとても長かったです。
アイディアが浮かんで、回路を描き始めたのは4月で、”本業”もしながら、「完了」まではだいたい4ヶ月が掛かりました。
もしこのプロジェクトの動画が何かの参考になることがあれば、ぜひチャンネル登録をお願いします!
それではまた次回のnoteまで!

ここから先は

0字

¥ 300

株式会社虹賢舎 CEO 著書:https://amzn.to/39KwlE4 技術ブログ:https://kokensha.xyz 機械学習 深層学習 Python /JS IoT Raspberry Pi ロボット TOEIC950 https://gosen.world