11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【電子工作 / ESP32】ESP32で動かすアーケードゲームエミュレーター『Galagino』。TINY ARCAD風ケースを3Dプリンタで製作しました!

80年代初頭に流行った『パックマン』や『スペースインベーダー』『ギャラガ』といったレトロアーケードゲームをESP32で動かすゲームエミュレーター(Z80)をこちらの記事でご紹介しました。

【電子工作 / ESP32】昔懐かしのレトロアーケードゲームをESP32で動かす!面白いオープンソースプロジェクトです。

ESP32-DevKitC/TFTディスプレイ/I2Sオーディオモジュール/タクトスイッチといった入手しやすいパーツ構成で組めるので、ブレッドボードで組んで動かしてみるだけでも面白いと思います。

よく出来たゲームエミュレータでブレッドボードで組んだものが面白かったので、3Dプリントパーツでレトロアーケードゲーム機風のボディーを製作し完成させました!

操作もしやすく非常にいい出来に仕上がったと思います。

ESP32で動かすアーケードゲームエミュレーター『Galagino』。TINY ARCAD風ケースを3Dプリンタで製作

Galagino – ESP32 Arcade Emulatorとは?

Galagino – ESP32 Arcade Emulator』は80年代に流行った代表的なアーケードゲームとなる『パックマン』『スペースインベーダー』『ドンキーコング』『ギャラガ』『ディグダグ』『1942』の6つのレトロゲームがプレイ出来るESP32で動かすゲームエミュレータです。

ハードウェア構成は、ESP32開発ボードを使いTFTディスプレイやI2Sオーディオモジュール、タクトスイッチといった入手しやすい汎用パーツで構成されているのでブレッドボードで簡単に組んで動かし楽しむことが出来ます。

まずこの素晴らしいプロジェクトを公開してくれた製作者のTill Harbaum氏に感謝です!
プロジェクトの詳細はGitHubに公開されているので参考にして下さい。

参考 Galagino - ESP32 Arcade EmulatorGitHub

上記GitHubページからエミュレータ本体のスケッチをダウンロードすることが出来ますが、対応するゲームROMのダウンロードやパッチ処理などESP32で動作させるまでには少し面倒な作業が必要なため、こちらの記事でその方法をまとめてみました。

【電子工作 / ESP32】昔懐かしのレトロアーケードゲームをESP32で動かす!面白いオープンソースプロジェクトです。

そしてこのプロジェクトの製作者の方はレーザーカッターを使いTINY ARCAD(タイニーアーケード)のようなレトロアーケードゲーム機の形状を模したボディーを作り完成させているようです。

今回はハードの構成を少し変え、3Dプリントパーツでこのようなボディーを作成して完成させました!

Fusion360を使ったモデリング

本家プロジェクトではレーザーカットするためのSVGファイルも提供されているので、CADを使い厚みを付ければ3Dプリンタでも出力できるパーツとして作ることは出来るのですが・・・はめ込む部分の寸法は調整しないと3Dプリントパーツではどうしても上手くはめ込むことは出来ないと思います。

そして折角ゲーム機としてボディーを製作するならバッテリーを内蔵しUSBケーブルを接続しなくても単体で駆動できる構成で作りたかったので、1からモデリングし各パーツを製作することにしました。

実は夏休みに遊びに来ていた甥っ子くんがブレッドボードで組んだものを大変気に入り、ゲームをプレイしやすいようにケースを作ってほしいというオーダーを受けてCADで製作したものです。

ボタンまわりやメインボードは基板も設計して製作した方がCADでのケースづくりは簡単なんですが・・・今回は小学生でも組みやすく製作しやすいようにユニバーサル基板を使って行うことにしました。

3Dプリントパーツ(STLファイル)はThingiverseからダウンロード出来るようにしておきます。

計11パーツ構成
(①Top.stl/②Display_Support.stl/③Front.stl/④Rear.stl/⑤LED_Panel.stl/⑥Bezel.stl/⑦Bottom.stl/⑧Side1.stl/⑨Side2.stl/⑩Key_Panel.stl/⑪Coin_Panel.stl)となっています。

参考 Retro Arcade Game Console Cabinet / ESP32 GalaginoThingiverse

Sunlu PLAフィラメントを今回使用しました。
PLAの試作では扱いやすいファラメントなのでよく使っています。

【SUNLU PLAフィラメント】寸法精度はバッチリ!安定して出力できる綺麗なPLAフィラメントです!

ボディーのカラーリングはお好みで決めて下さいね。
LED_Strip.stlはLEDが点灯する部分のパーツのため厚みを薄くしていますが、白色や透明フィラメントを使うと点灯が綺麗だと思います。

ケースに収めて完成させると操作性がかなりアップするので面白いと思います。
また作業デスクのインテリアにもいいかもしれませんね!

パーツ構成

使用パーツの一覧です。
基本的に以下パーツ構成でマウント出来るようにCAD設計しているので製作される方は参考にして下さい!

Lolin D32

ESP32開発ボードはLolin D32を使っています。
ブレッドボードで組んだものはESP32-DevKitCを使いましたが、Lolin D32はリポバッテリーからの駆動が可能でその充電回路もボードに内蔵されているのでこのプロジェクトには最適です。

【電子工作】技適取得済みESP32開発ボード『Lolin D32』を使ってみる!

Lolin D32は以前Amazonでも普通に入手出来ていましたが、記事掲載時(2023.09現在)は扱われていないようなので海外サイトからの入手になってしまうかもしれません。

ディスプレイ

ディスプレイは2.2インチサイズのTFTディスプレイを使います。
解像度が240×320のもので、SPI接続の制御ドライバチップにILI9341が使われているものを選択して下さい。

I2Sオーディオモジュール & スピーカー

I2SオーディオアンプモジュールはPAM8302モジュールを使います。
シングルチャンネルのD級パワーアンプモジュールです。
4~8Ωまでのインピーダンススピーカーに対応し最大2.5Wまでの出力が可能なので接続するスピーカーの選択肢は広いと思います。

ブレッドボードでのテストでは1Wのミニスピーカーを使いましたが、今回ケースを製作したものではこちらの2Wスピーカーを使いました。
かなり音質が良いスピーカーでした!

アーケードゲーム機を模した形状で作っているので、音量を高めに調整すると雰囲気が出ていいと思います。

タクトスイッチ

[COINボタン][STARTボタン][FIREボタン]の3つのタクトスイッチを使います。
サイズは6mm×6mmのもので、CADの設計上9mm以上の高さのものが必要となります。
高さ11~13mm前後のものが押しやすいと思います。
いくつかテストして私は6mm×6mm×12mmのタクトスイッチを取り付けました。

4方向タクトスイッチ

ブレッドボードで組んだものでは上下左右の方向スイッチに4つのタクトスイッチを使いましたが、こちらではゲーム機として操作しやすいように10mm×10mm×10mmの4方向タクトスイッチを使っています。

基板製作などで一般的によく使われるパーツですが、国内サイトの販売リンクがなかなか見つからず・・・

スルーホールタイプのものでユニバーサル基板の2.54mmピッチには微妙に合いませんが、少し足を曲げると綺麗に収めることが出来ます。(後述します)

5方向タッチスイッチボタン 10mmx10mmx10mm
created by Rinker

ユニバーサル基板

Lolin D32を乗せるメイン基板とスイッチ操作で使う操作基板およびCOINボタン用基板の3つのユニバーサル基板を使います。

極力加工の工程を少なく出来るように、メイン基板は以下リンクの40mm×60mmのものを使うと加工無しで使えます。

また操作基板とCOIN基板は20mm×80mmのものを分割して使っています。(加工サイズは後述します)

LEDストリップ

LEDストリップは付けなくても動作はしますがゲーム選択画面で点灯し、またプレイするゲームによって点灯色や点灯パターンが変化するので付けておくとミニアーケードゲーム機としては面白いのでオススメです。

WS2812Bチップを使ったLEDテープライトやストリップに対応しています。

GalaginoのメインスケッチではLEDの数はデフォルトで7個に設定されています。
LEDを設置するボディー幅は約47mmとなっているので1間隔が7mmほどの幅狭なLEDストリップを使えば収めることが出来ます。

1mあたり144個のLEDが使われたタイプのものを使いました。

MEMO
メートルあたりのLEDの個数がこれより少ないタイプのテープライトでは1セルの幅が広くなるため7個収めることが出来ません。
その場合は設置できるLEDの数が少なくなるのでメインスケッチの修正作業が必要となります!

電源スイッチ

電源スイッチはタミヤの6Pスライドスイッチを使います。

M2タッピングビス

基板の固定にM2×6mmのタッピングビスが計13本必要となります。
またサイドパネルの固定にはM2×10mmの皿頭タッピングビスを計20本使います。

サイドパネルは皿頭ビスが綺麗に収まるような形状で作っているので、10mmビスをカットして6mmビスとして使ってもいいと思います。

その他パーツ

その他パーツとして基板に取り付けるピンヘッダーやジャンパーワイヤが必要となります。
基板に直接ケーブルをはんだ付けしてもいいのですが、ピンヘッダーで取り外せる構成にしておくと組み立てはしやすいと思います。
ジャンパーワイヤは少し長め(15~20cm)のものを使うと組みやすいと思います。(15cmを使いました)

またケース内にはある程度の空間がありますがケーブルにより埋まってしまうので、使用するリポバッテリーのサイズは検証して下さい。
スピーカー裏やサイドパネルに貼り付けるとそこそこ大きなサイズのものも使えると思います。

全体の回路構成

全体の回路構成(接続)はこのようになります。

この後、基板へのパーツ取付のはんだ作業と組み立てを行いますが、スケッチを事前にLolin D32に書き込んでから作業を行うのがいいと思います。
ディスプレイの点灯やスイッチ動作など確認しながら作業が進められます!

基板のはんだ付け

上記接続図を参考にユニバーサル基板にパーツをはんだ付けして3Dプリントパーツに固定します。

MEMO
はんだ付けが不慣れな方は作業に入る前にLolin D32にスケッチの書き込みを行っておいた方がいいかもしれません。
ディスプレイの表示やボタン操作など1つずつ確認しながらはんだ作業を進めることが出来ます。

メイン基板

指定の40mm×60mmのユニバーサル基板を使えば3Dプリントパーツとの固定も既存のビス穴が使えます。

参考としてこのように配置しました。
組む際に他のパーツと干渉しないベストの位置になっていると思います。

ピンヘッダーは多少位置が変わってもいいのですが、Lolin D32は下記指定の位置に取り付けてください!
リアパネルのUSB端子を差し込む穴位置に合わせています。

配線が大変だと思いますが、はんだ付けが出来たらBottom.stlパーツにM2×6mmビスで固定します。(3点固定)

操作基板

操作基板は20mm×80mmのユニバーサル基板をこのサイズにカットします。(穴の数を確認して下さいね)
ユニバーサル基板なのでカッター等で何度か切れ目を入れると簡単にパキッと折ることが出来ます。

図と同じ位置にタクトスイッチを取り付け配線します。(4方向タクトスイッチの向きは要確認)

4方向のタクトスイッチは右側の足(ピッチが広くなっています)を少し内側に折り曲げると差し込むことが出来ます。
こんな感じです。

四隅の穴はビス固定用で使います。
スルーホールはM2ビスより少し穴が小さいので、丸棒ヤスリ等を使いM2ビスが入るように穴を少し大きくしておいて下さい。

配線が出来たらKey_Panel.stlにM2×6mmビスで固定します。

COIN基板

アーケードゲーム機のコイン(お金)を入れる操作をスイッチに置き換えています。

COIN基板も同様に20mm×80mmのユニバーサル基板を以下サイズにカットして使います。
先程カットしてあまった基板が使えます。

タクトスイッチの取り付けは写真の位置に合わせて取り付けてください。
同様にこちらも四隅の穴はビス固定用で使います。
配線が出来たら基板をCoin_Panel.stlにM2×6mmビスで固定します。

電源スイッチ & スピーカーの取り付け

リアパネル(Rear.stl)に電源スイッチを取り付けておきます。
6mmビスでは貫通するのでペンチ等で5mm以下にカットして使って下さい。(M2×5mm)

スピーカーは付属の両面テープで取り付けます。

LEDストリップの取り付け

トップパネル(Top.stl)にLEDストリップを取り付けます。
間隔が狭いLEDストリップだと7個収まります。(ちょっとギリですけど!)

6個に減らしてもいいかもしれませんね!
スケッチ修正は面倒なんですが・・・
連続した点灯パターンなのでLEDの数が7→6個に減っても多分気付かないと思うので、使用するテープLEDによりケースへの収まりが悪くなるようならスケッチは修正せず減らしても問題ないと思います。

組み立て

それでは組み立てです。
向かって左側のサイドパネル(Side1.stl)にはパーツをはめ込むためのガイド用の溝が全て付けてあります。

そしてディスプレイ固定パーツ(Display_Support.stl/Bezzel.stl)およびLEDパネル(LED_Panel.stl)のみ両サイドに溝を作っています。
CAD設計上ビスが打てない部分となり、まずこれらパーツを両サイドのパネルにはめ込みます。

少し大変ですが、トップパネル(Top.stl)もからめて上手く接合して下さい。

この状態でトップパネルの両サイドをビス固定(M2×10mm)すれば崩れることなくこの後の作業が進められます。

MEMO
サイドパネルの固定には全てM2×10mmビスを使います。

あとは順番に操作パネル・コインパネル・フロントパネルを取り付けていきます。
片側の溝に斜めに差し込み起こす感じではめ込みます。

この時点でメイン基板との全ての配線を完了させてからボトムプレートを取り付けます。

最後にリアパネルを取り付けて完成です。

ちなみにスピーカーの接続はアンプモジュールPAM8302にターミナルブロックを取り付けて接続しました。
直接はんだ付けしても問題ありません。

また音量調整はPAM8302に付いている可変抵抗を回して行います。
今回セットで使っている2Wスピーカーでは音質も良く、かなり大きな音を出すことが出来ます。

ケース組み立て後は音量調整が出来ないので、リアパネルを閉じる前にスケッチを書き込みお好みの音量に調整してから閉じて完成させて下さい!

スケッチの書き込み

組み立てが完了したらスケッチの書き込みです。

GitHubで公開されているメインスケッチを動かすには、Z80エミュレータやゲームROMデータ、またESP32で動作するようにパッチを当てる処理が必要となります。

少し面倒な作業となりますが、下記記事で詳しく書いているので参考にして頂きスケッチ書き込みを行って下さい!
ESP32-DevKitCボードを使っていますが今回使っているLolin D32でもその方法は同じです。

【電子工作 / ESP32】昔懐かしのレトロアーケードゲームをESP32で動かす!面白いオープンソースプロジェクトです。

動作確認

無事にゲームが起動するとメニュー画面からゲームを選択し起動出来ます。

MEMO
ゲームプレイ中にメニュー画面に戻りたい場合はコインボタンを長押しすると戻れます。

USB端子を差し込むと内蔵したリポバッテリーへの充電が自動的に開始されます。

USB端子部分の穴は若干大きめに開けているので覗き込めばボードの赤色LEDが点灯しているのがなんとか分かると思います。
これが消灯すれば充電完了です。

【追記】ESP32で動かすMini RetroTVを製作しました!

今回製作したESP32を使いレトロアーケードゲームを動かす試みのコンセプトは、TINY ARCADE(タイニーアーケード)がベースとなっています。

TINYシリーズには他にもレトロな動画を再生させるTinyTV(タイニーTV)というものも販売されています。

こちらもESP32を使い再現することが出来ます。
3Dプリントパーツを設計しMini RetroTVとして製作してみました。

電子工作として面白いプロジェクトなので、興味ある方はこちらの記事も見て頂ければと思います。

【TinyTV / ESP32】ESP32で動画再生!ミニレトロテレビ(Mini RetroTV)の製作②!

最後に!

『Galagino – ESP32 Arcade Emulator』は良く出来たゲームエミュレーターだと思います。

ブレッドボードで組んでみるだけでも面白いと思いますが、このようなボディーを作っておくとゲームをプレイする際の操作性が格段にアップするのでオススメです!

一定時間放置しておくと自動的にランダムでゲームのデモプレイが始まるので、電子工作の作業デスクに置いておくだけでも面白く見ているだけでも楽しいと思います

このようなマイコンボードを使って動かすゲームプロジェクトはこれまでいろいろと挑戦してきました。

こちらでまとめているので合わせて見て頂ければと思います。

マイコンゲーム機関連の記事一覧

コメントを残す