Categories: 工作・開発

ESP32とカメラモジュールで作るレーザー射的ゲーム、60fpsで着弾点を検出しWebブラウザーにスコア表示

市販のおもちゃのレーザーポインターでは物足りない。そんな電子工作愛好家のために、ESP32とカメラモジュールを使った自作レーザー射的システムが公開された。

ある開発者が公開した「ESP32LaserRange」は、ESP32マイコンとOV2640カメラモジュールを組み合わせたレーザー射撃ゲームシステムだ。壁に貼った的紙をカメラで撮影し、レーザーポインターの光点を検出してスコアを計算する。検出結果はWebブラウザー上にリアルタイムで表示され、PCを介さずESP32単体で動作する。

カメラは240×240ピクセルの解像度で約60fpsの撮影が可能で、レーザー光点の高速な検出に対応する。フレームはJPEG形式で取得し、ESP32上でデコード処理を実行する。非圧縮モードではフレームレートが約15fpsまで低下するため、JPEG形式を採用したという。

カメラを斜めに設置しても正確な着弾位置を算出できる点が特徴となっている。4点のマーカーをクリックしてキャリブレーションを実行すると、ホモグラフィ(射影変換)による透視補正が適用される。キャリブレーション設定はESP32のフラッシュメモリーに保存され、電源を切っても再設定は不要となる。

必要なハードウェアはPSRAM搭載のESP32(開発者はFreenove ESP32 Wrover CAMモジュールを使用)、OV2640カメラモジュール、レーザーポインターの3点とWi-Fi環境のみ。ファームウェアはArduino IDEで開発されており、ESPAsyncWebServer、AsyncTCP、ArduinoJson、JPEGDECの各ライブラリを使用する。

Webインターフェースは2種類用意されている。メインページでは的の図と着弾マーカー、累計スコアを表示し、射撃音の再生にも対応する。キャリブレーションページでは、カメラ画像上の4点をクリックして透視補正の設定を実行できる。

開発者によると、ゲームを壁にプロジェクターで投影し、ESP32のUSB HID機能と組み合わせれば、検出したレーザー光点をマウスクリックとしてPCに送信する「バーチャルライトガン」としても応用できるという。ソースコードはMITライセンスで公開されている。

関連情報

ESP32LaserRange(GitHub)

FabScene編集部

FabScene編集部