固定砲台型射的ゲームHODAI

固定砲台型射的ゲームHODAIは、砲台を操作して遊ぶ射的ゲームである。"HODAI"と書いて、"ホーダイ"と読む。

遊び方説明動画

全体構成図

全体構成図

各ユニットの説明

コントローラー

コントローラーの外観

距離センサーを使って、手が接近していることを検知するためのユニット。各コントローラーに、一つの方向が割り当てられている。4つのコントローラーを使用することで、上下左右4方向の入力を行うことができる。

主な使用部品

画像及び詳細

コントローラーの距離センサー

中央のくぼみ部分に距離センサーを搭載している。

コントローラーのLED

コントローラーのLEDの発色

赤色LEDが1個つけられており、手の接近を検知している間、光る。プラスチック板で光をうまく拡散させようと思ったのだが、あまり綺麗に拡散させられていない。

砲台

砲台

砲台は以下を行う。

  • 赤外線の出力
  • コントローラーの制御
  • サーボモーターの制御
  • カメラ映像のLCD出力

コントローラー(距離センサー)からの入力を読み取り、手が接近しているコントローラーに対応する方向にサーボモーターを動かす。この時、対応するコントローラーのLEDを点灯させる。なお、複数のコントローラーに同時に手が接近している場合、サーボモーターは動かさず、LEDも点灯させない。

赤外線の出力およびカメラ映像のLCD出力は常時行っている。

主な使用部品

写真及び詳細

Spresenseシールド

配線がめんどくさかったので、LCD及びコントローラーとの接続用にシールド基板を作成している。

赤外線発光モジュール

オペアンプを使って、赤外線を矩形波で出力している。スライドスイッチを操作することにより、50Hz〜500Hzまで矩形波の周波数が変わる。ただし、使用しているカーボン抵抗及びコンデンサーによってかなりの誤差が発生する。

照準の表示

カメラ映像をLCDに出力させる際、大体中央のところに円形の照準をカメラからの画像に重ねて出力している。カメラからの映像だけだと味気なかったので照準を追加した。

可変抵抗器

可変抵抗器が配線剥き出しで取り付けられており、これを調整することにより操作1回あたりのサーボモーターの移動量を調整できる。今回の展示では、この部分はユーザーが触れない形になっている。

Spresenseカメラ

制御用ボードとしてSpresenseを使用している。特にSpresenseでなければならない理由はなかったが、余っていたので使った。

的ユニット

的ユニットは以下を行う。

  • HODAIからの赤外線の受信
  • 中央デバイスとの通信
  • サーボモーター及びフルカラーLEDの制御

HODAIから赤外線を受信している間に、中央デバイスから発射通知を受け取った場合、サーボモーターを動かして的を倒す。この時、中央デバイスに得点したことを通知する。

主な使用部品

写真及び詳細

的ユニット受信部

上記写真の受信部はフォトトランジスター、フルカラーLED、サーボモーターが搭載されていて、それぞれの部品の配線が伸びている。

赤外線受信モジュール

フォトトランジスターから伸びている配線は、上記中央制御盤にある赤外線受信モジュールに接続する。この赤外線受信モジュールは、赤外線がOFFになっている時間を測定して、受信している赤外線の周波数を確認する。PICマイコン16F1503を使用しており、プログラムを書き換えることによって処理を変更することも可能。

フルカラー制御モジュール

フルカラーLEDから伸びている配線は、上記16×8LEDマトリクスドライバーモジュールを利用したプリント基板に接続する。16×8LEDマトリクスドライバーモジュールを、5個のフルカラーLEDを制御するために利用している。ここら辺についてはこちらの記事でも少し紹介している。

PCA9685サーボシールド

サーボモーターから伸びている配線は、PCA9685サーボシールドに接続する。サーボ用の電源はACアダプタから供給している。

全体の制御はATOM Liteで行っている。ATOM Liteは

  • ESP32を搭載している
  • USB端子がある
  • バッテリーがない

という点を満たすものの中で比較的安価なので、手軽に試す用途で好んで使っている。

ATOM Liteは中央デバイスとUSBケーブルで接続される。中央デバイスとはシリアル通信を行っている。通信内容の詳細は中央デバイスの説明に記載する。

フットスイッチユニット

フットスイッチユニット

フットスイッチが押されたら、発射音を鳴らし、中央デバイスに発射通知を送信するユニット。

主な使用部品

写真及び詳細

フットスイッチユニット分解時

本ユニットを分解すると上記写真のようになっている。中央の層にスピーカーがついており、その下の層にATOM Liteを含めた基板を配置している。

発射音はアンプボードにI2Sを入力して鳴らしている。音声データはWAVファイルをESP32のSPIFFSに保存している。

ATOM Liteは中央デバイスとUSBケーブルで接続される。中央デバイスとはシリアル通信を行っている。通信内容の詳細は中央デバイスの説明に記載する。

中央デバイス

中央デバイス

中央デバイスは以下を行う。

  • フットスイッチユニット及び的ユニットとの通信
  • スコアデータの管理
  • ゲーム画面の配信

主な使用部品

写真及び詳細

中央デバイスとフットスイッチユニットとの通信内容は以下の通り。

中央デバイスとフットスイッチユニットの通信内容

中央デバイスはフットスイッチユニットから発射通知を受け取る。この時、中央デバイスは的ユニットに被弾確認を行う。

なお、通信内容の書式は1つのデータを1行のJSONで表すJSON Linesという形式を採用している。

中央デバイスと的ユニットとの通信内容は以下の通り、2種類の通知をやり取りする。

中央デバイスと的ユニットの通信内容1 中央デバイスと的ユニットの通信内容2

中央デバイスが的ユニットに発射通知を行ったとき、的ユニットは各的の被弾状況を確認し、被弾結果を中央デバイスに返却する。

中央デバイスが的ユニットに初期化通知を行ったとき、的ユニットはサーボの位置や被弾状況を初期化し、初期化完了通知を中央デバイスに返却する。

中央デバイスはスコアデータをPostgreSQLを用いて保存している。スコアデータの追加・参照はFlaskを用いたWebAPIアプリケーションから行う。

中央デバイスではPhaserを用いて作成したゲーム画面用Webアプリケーションを稼働させている。ブラウザから対象URLにアクセスすることで、ゲーム画面を描画できる。今回の展示では、中央デバイスとPCをLANケーブルで直結し、PCのブラウザから対象URLにアクセスする形式をとっている。

ステージ

ステージ

的ユニットを配置する土台。

主な使用部品

  • 3Dプリント部品

画像及び詳細

ステージ分割

サイズの関係上、分割してプリントしてゴリ押した。最終的には輸送時のサイズの関係も考慮しつつ、3分割になるように接着剤でくっつけた。分割されている部分は的ユニットを配置することによって結合する。強度は度外視している。当日輸送時に壊れているかもしれない(これは他の部品も同様)。