オープンキャンパスの話

こんばんは!MiMi*です。
8月某日に僕の通っている学校のオープンキャンパスが2日間にわたってありました。
出し物としてゲームを作ったのでその話をしたいと思います。

何を作ったの??

4人1班になってUnityでゲームを作りました。
ゲームはメンバーの一人が頑張って作ってくれました。本人曰くフリー素材とネットの情報を駆使して3日で完成させたそうです。すごいねー
僕はゲームのコントローラ担当で、コントローラの回路とコードを作りました。

コントローラの仕様

大きいスイッチ叩いたりして操作したいよね、LED光ったら映えるよねって感じのコンセプトだったのでよくあるテレビゲームのコントローラというよりゲームセンターのイメージです。
構成図がこちらになります。

オープンキャンパスの出し物とはいえ、成績に関わる評価がつく制作だったため無駄にBluetoothとかを使ってみました。その他にも小技を色々仕込んだのですがおそらく先生は気付いていません(笑)かなしいね
先生にアピールできなかった回路については後で解説していきます。

基板発注!!

今回の基板のJLCPCBさんで基板発注をお願いしました。

JLCPCBさんは配布されるクーポンでお得に発注できるのでこちらもぜひ使ってみてください!
PCB Prototype & PCB Fabrication Manufacturer - JLCPCB
学校の課題や期末テストを挟んでの制作だったので本当に開発時間がなく、JLCPCBさんに基板発注していなければ時間が足りずに完成しなかったと思います。本当に感謝です!!
設計した回路と実際に届いた基板がこちらになります。

回路設計に1晩、発注から届くのに約1週間、回路作成に約1時間、コードを作成に1晩という超スピード制作でした。
完成した基板がこちらになります。本当は足踏みの板(ロードセル入り)と大きいスイッチ、ディスプレイにフルカラーLEDを張り付けていたのですが写真撮るの忘れてました。スミマセン
時間がなかったので配線がぐちゃぐちゃですが、完成した見た目はゲームセンターの媒体みたいでした。

機能の話

  • フルカラーLED
    光らせたらかっこいいよねってことで付けました。当初の構想ではneopixelを使うはずだったのですが、先生が間違えてフルカラーLEDを買ったのでフルカラーLEDを使いました。
    回路としては、NchMOSFETで12Vのオンオフを切り替えてる感じです。MOSFETは6つ使って、2系統のフルカラーLEDを制御しました。

  • 大きいスイッチ
    こういうやつです。これは普通にdigitalReadでよんだだけです。
    それだけのはずだったのに後々トラブルの元になりました。

  • ロードセル
    板に張り付けて踏んでもらいました。プレイヤーがジャンプするとキャラもジャンプするよってことをやりました。
    こちらは前日ぐらいに4ポイントのタイプからビーム型(僕の私物)に仕様変更がありました。
    因みにロードセルのADコンバータモジュールで使われるHX711は5V仕様なのでESP32で使うためにひと工夫しました。こちらは別の記事で紹介します。

  • Bluetooth通信
    Unityへの入力をBluetoothで行いました。
    時間がなかったのでBleKeyboard.hでキーボード入力をさせることでUnityと通信()をしています。
    例えば、センサの値の変化によってマイコンが"j"を入力したらUnityのキャラはジャンプ、"w"を入力したら攻撃みたいな動作をします。

  • UIスイッチ
    基板にはタクトスイッチが9個載っていますが、3ピンで読んでいます。
    分圧回路になっていて、通った抵抗の数によって電圧が変化するのをanalogReadで読んでいる回路になります。
    ロードセルのキャリブレーション、キーボード入力のオンオフ等に使いました。

トラブルの話

直前に動作確認ができたばかりなので当然のように不具合が発生しました。

  1. 電源の仕様変更
    本来は直流安定化電源を電源にする予定だったのが、フルカラーLEDについていた電源基板を無理矢理コントローラに繋いで電源にしました。
    何故こうなったかはちゃんと覚えていませんが、確か見栄えとかだった気がします。

  2. ロードセルが壊れた
    1日目の終盤に2つ使っていたロードセルの1つが、おかしな値しか返さなくなりました。
    1日踏まれ続けていたので無理もないかなと修復は諦めて、ロードセル1つでの動作に切り替えました。また基板外に長いコードで配線していたのでノイズの影響もあったと思います。
    コントローラだけでなくUnityのほうも仕様変更があったので大変でした。

  3. スイッチが反応しない
    大きいスイッチの反応が悪く、これは割と最初から発生していたトラブルでした。
    長押し防止のコードを入れていたのでそれが原因だと思いずっとコードを見直していたのですが、結局原因は配線不良でした。
    基板外の配線は(役割分担のため)他のメンバーがやっており、僕の管轄外だったのでなかなか気付けませんでした。単純な回路だったからと、よく確認しないまま可能性から排除していたのが仇になりました。

  4. ラグ
    ロードセルの読み取りに結構時間がかかるうえに、Bluetoothでパソコンと通信しているため、1秒ぐらいのラグがありました。頑張って改善したものの0.5秒ぐらいのラグは残りました。

沢山トラブルがありましたがオープンキャンパス中に解決していき、2日目は完全に近い状態で動かせました。
トラブル解決については基板がちゃんとしてて、基板は壊れなかったのが大きなポイントだったと思います。ユニバーサル基板で作っていたら壊れた個所から2次3次被害になっていたと思うので、基板発注していなかったら解決できなかったと思います。
お客さんにデバッグやコーディングの様子も見せれて、結果的にいいパフォーマンスだったと思います。

まとめ

行き当たりばったりな開発でしたが、2日目にはちゃんと動いてくれてうれしかったです。特に2日目のお客さんの反応はよかったので、楽しんでいただけたのではないかと思います。
基板に入れた小技が成功した一方で、基板外の配線不良や準備不足など初歩的なミスもあったので、成長と反省のどちらも得られました。

この記事が気に入ったらサポートをしてみませんか?