Arduino製ポケットゲーム機「A-Maze」:迷路自動生成で無限に遊べる
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| SSD1306 OLEDディスプレイ (128x64) | 1 | I2C接続、0.96インチ推奨 |
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | 1 | またはUno/Atmega328P単体 |
| タクトスイッチ 12mm | 7 | 十字キー+A/B/START |
| コインセル電池ホルダー (CR2032用) | 2 | 直列で6V、レギュレーター経由で5V/3.3V |
| スライドスイッチ | 1 | 電源ON/OFF |
| ユニバーサル基板 40x60mm | 1 | 実装用 |
| ピエゾブザー | 1 | 効果音用(任意) |
プロジェクト概要
Arduino Pro Miniベースの超小型ゲームコンソール「A-Maze」です。特徴は毎回異なる迷路を自動生成するため、同じマップで遊ぶことがありません。Bo-Taoshi(棒倒し)アルゴリズムをメモリー制約のあるAVRマイコン上で実装し、ICSPヘッダーを露出させることで後から別ゲームへ書き換え可能な「ポケットコンソール」として設計されています。
開発ステップ
Step 1: ブレッドボードでプロトタイピング
最初は4ボタン(十字キー)のみで迷路移動を検証。後にA/B/STARTボタンを追加し、ゲームコンソールとしての体裁を整えました。
Step 2: 部品調達
上記部品表を参照。Pro Miniの代わりにAtmega328Pチップ単体+28ピンDIPソケットでも構築可能です。
Step 3: 配線・回路図
| 機能 | Arduinoピン |
|---|---|
| 上ボタン | D7 |
| 下ボタン | D6 |
| 左ボタン | D9 |
| 右ボタン | D8 |
| Aボタン | D5 |
| Bボタン | D4 |
| STARTボタン | D2 |
| OLED SCL | A5 |
| OLED SDA | A4 |
| ブザー | D3 |
Step 4: ソースコード
GitHubリポジトリからクローンし、Arduino IDEでPro Mini (5V, 16MHz) 向けにビルド・書き込み。
git clone https://github.com/alojzjakob/A-Maze
# Arduino IDEで A-Maze.ino を開き、ボード「Arduino Pro or Pro Mini (5V, 16MHz)」を選択して書き込み
外部水晶発振子を使わない場合、内部8MHz発振で動作させる設定(フューズビット書き換え)が必要です。詳細は公式チュートリアルを参照。
Step 5: 動作確認
Step 6: ケース化・小型化
40x60mmユニバーサル基板上に全部品を実装し、3Dプリントケース(Thingiverse)に収納。ボタン配線は電池ホルダー下部に這わせ、画面下には絶縁テープを敷いてショート防止。ICSPヘッダーは基板端に露出させ、後からゲーム追加可能にしています。
アルゴリズム解説:Bo-Taoshi(棒倒し法)
グリッド上の各セルからランダムな方向に「棒」を倒して壁を作る手法で、スタックや再帰を使わないためRAM消費が極小。Atmega328Pの2KB SRAMでも快適に動作します。
今後の拡張
- 複数ゲーム切り替えメニュー(フラッシュメモリーに複数バイナリ格納)
- スコア保存用EEPROM活用
- 充電回路内蔵でLiPo電池化
- PCB化でさらなる小型化・信頼性向上
製造プロセス
- Arduino Nano RP2040で作るDIY Photoshopコントロールコンソール
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- TeleBall: 自作レトロ携帯ゲーム機 – Arduinoでブロック崩し&テニス
- Arduboyクローンで作る自作携帯ゲーム機 – PCB設計から実装まで
- Arduino UNOとOLEDディスプレイでクラシックPongゲームを自作:ステップバイステップチュートリアル
- DIY Arduino USBゲームコントローラー - 高性能ゲームパッドを自作
- Arduino NanoとMAX7219で作る24×16 LEDポングゲーム機
- Arduinoタッチブレークアウトゲーム:2.4インチTFT LCDでクラシックアーケードを再現
- 巨大レゴミニフィグ・アニマトロニクス「オペレーション」ゲームをArduinoで自作
- Pixel Chaser: Arduino Nanoで作るワンタップLEDゲーム
- Arduinoで自動化するChrome恐竜ゲーム – LDRとPythonで障害物を検知してジャンプ