混線も怖くない! 展示会特化型ファミコン風コントローラーを作った
ものづくりをやっていると、自作のロボットを展示会で動かす機会がよくあります。私はいつもPS(プレイステーション)のコントローラーやスマホでロボットを操作するのですが、会場の通信混線問題に遭遇してしまいます。Wi-FiやBluetoothといった無線通信はほとんどの展示作品が使用していますし、来場される方々もスマホを持ち歩いているわけですから、会場では無線通信の信頼性がとても低いのです。
そんなとき、「気軽に無線から有線に通信を切り替えることができたら楽なのに」と、私はいつも思っていました。そんな問題を解決すべく、オリジナルのコントローラーを製作しました。
M5AtomController
完成したのが、M5Stackの「ATOM Matrix」を使用したシンプルなコントローラーです。レイアウトはファミコンを踏襲しており、最新型ゲームコントローラーのようにたくさんのボタンが付いているわけではありません。しかし、そのおかげで直感的な操作がしやすくなっているのではないかと思います。
ボタンを押すと、中央にあるATOM Matrixの表示が変わります。左側の十字キーを押すとその向きを示し、右側のボタンを押すとアルファベットのA・Bが表示されます。どのボタンが何を示しているか分かりやすくしています。
展示会でコントローラーを使用している様子がこちらです。
無線と有線を切り替える
コントローラーは通常時は無線モードになっています。無線は「ESP-NOW」という通信を使用しています。ESP-NOWはEspressif社が開発した通信方式で、Wi-Fiルーターを経由せず機器同士で直接、通信できるものです。このコントローラーでは、ロボットのMACアドレスを指定しての1対1の通信を行っています。
有線モードに切り替えるには、コントローラーと対象のロボットをGroveケーブルで接続します。200cmを購入しました。
すると制御がUARTシリアル通信に自動で切り替わり、「有線が優先される」仕組みになります。ケーブルを接続するだけ、というシンプルさが特徴です。
コントローラーの中身
コントローラーの通信制御はATOM Matrixで行い、電力は「ATOM TailBAT」というバッテリーから供給しています。外装は3Dプリンターで作られており、ボタンに反応する基板が内蔵されています。
ボタンと基板の間には導電パッドがあり、ボタンを押すことで基板の一部が通電し入力が受け取れる仕組みです。通電したらGNDに落ちてLOW信号、通常時はATOM MatrixでプルアップしHIGH信号になります。
よって、基板はボタン通電部の配置とATOM Matrixへの通信線のみといったシンプルな片面基板になっています。
コントローラーの作り方
コントローラー製作に必要な部品は以下の通りです。CADモデルやソースコードはGitHubで公開しています。
まずは基板にピンヘッダをはんだ付けします。
メインケースを裏面から、ボタン、導電パッド、基板の順にはめ込みます。そしてタッピングビスで基板を締結します。
カバーをスライドしメインケースに装着したら、中央もタッピングビスで締結します。
ATOM MatrixとATOM TailBATをメインケース表面から出ているピンヘッダに差し込みます。
最後にATOM Matrixにプログラムを書き込んだら完成です。
意外なところに、試作の苦労
最初、コントローラーは自宅のFDM3Dプリンターで試作し、その後JLCPCBの光造形機で製作しました。しかし、機器の違いやちょっとした寸法誤差が「ボタンの押し心地」という、コントローラーにとって大切なUX(ユーザーエクスペリエンス)を左右してしまったのです。ここの解決が、なかなか大変でした。
ボタンと基板の距離が短いと、ボタンを押してもコントローラーが反応しないので、とても力強く押し込まなければいけません。逆にボタンと基板の距離が長いと、ボタンを押してないのにコントローラーが反応してしまうことがあります。これは致命的な不具合となってしまいます。
こういった微妙な距離の変化を、大きさ違いのボタンを数種類試作し評価することで解決しました。こういったUXに関わる部分は、設計シミュレーションだけでなく、実際に作って複数のパターンを試してみるのが大事ですね。
本当に使えるのか? 展示会場での評価
Maker Faire Tokyo 2023では実際にこのコントローラーを利用した展示を行ってきました。このコントローラーは小型犬ロボットの操作に最適でした。
展示会では無線通信の状況を分かりやすくするため、LEDの色が変化するようにしました。通信成功時は青くなり、失敗時は赤くなります。
最初の方は無線モードでも安定していましたが、途中からやはり調子が悪くなってきました。そこで有線モードの出番です。ここではプログラムの書き換えや物理スイッチの切り替えは不要、ただケーブルを接続するだけです。結果は、バッチリうまくいきました。
発見、使い方の工夫
使っているうちに、開発当初は思っていなかった機能や、便利な応用の仕方に気づくことがあります。コントローラーの電源の利便性が高かったのは気付きのひとつでした。
このコントローラーはATOM TailBATバッテリーを標準装備としていますが、搭載していなくても直接USB給電で動かせます。有線接続であればコントローラーに電力がなくてもロボット側から給電ができますし、コントローラーが給電している状態であれば、その電力をロボットに送れます。あまり大きな電流は流せませんが、ロボット側のバッテリーが不要になるのです。
コントローラーの形状が便利なことにも気付きました。コントローラーが三角形なのは、バッテリーの部分に沿わせたシンプルなデザインにしたかったためです。でも使ってみると指を入れて操作しやすかったり、三角形の穴部分に、指が引っかけられるので、操作しやすく、思った以上に使いやすい形状でした。
作るのも楽しいですが、どんどん使って新たな魅力を発見していくのも面白いですね。これからもこのコントローラーを展示会で役立てていきます。