Gamebuino 互換機 (Gamebuino Clone)

Gamebuino は Arduino ベースのゲーム機です。単体で持ち運べる Gamebuino 互換機は...多分作りませんが、動作検証はやってみたいと思います。



概要

ブレッドボードに実装するとこんな感じです。

ボタンを実装するスペースがなかったので、右下にピンヘッダを立ててあります。GND のワイヤーで接触させるとボタンを押した事になります (w

Gamebuino 互換機を作るのに必要な部品は以下の通りです。

用途 部品名
メインボード Arduino Pro Mini
ディスプレイ 1.8 inch LCD ディスプレイ (SPI)
MicroSD IF MicroSD ブレークアウトボード
ゲーム保存用 MicroSD カード (できれば SDHC でない小容量のものを)
スピーカー パッシブブザー
乾電池駆動 (任意) 昇圧 DCDC コンバータ
電源スイッチ (任意) スライドスイッチ
インジケーター用 LED (任意) LED, 抵抗
照度センサー (任意) CdS セル, 100kΩ抵抗
ICSP (任意) 6ピンヘッダ (2x3)
I2C (任意) 4ピンコネクタx2

Pro MinimicroSDLCD モジュール に関しては詳細な別記事があるのでそちらにも目を通しておいてください。



互換機を作らない理由

(1) メインボード

目的に一致するメインボードがないんです。

あえて言えば Nano なのですが (シャレじゃなく)、Nano では小型化できないのです。そして microSD カードLCD モジュール の記事を読んでお気付きになったでしょうか?そうなんです、Nano は 5V 駆動なので、SPI 接続の際にロジックレベル変換が必要なのです。部品点数が多くなるのは小型化の面でもコストの面でも手間の面でも嬉しくありません。

ブレッドボードに構築した Gamebuino で使われているのは、Arduino Pro Mini なのですが、無理矢理 3.3V で動作させています。何故って、本物の Gamebuino も (おそらくは) 3.3V / 16MHz というイレギュラーな構成になっているからです。また、A6 / A7 が使えないボードは使用できません (DIP 版のボードは物理的に無理)。

これらに合致するボードって...

(2) 筐体

目的に一致する筐体がないんです。

Arduboy 互換機の場合には GAME POKE MIX がありましたが、Gamebuino のハードを収めるのに丁度いい筐体がありません。LCD モジュール が、45x45mm 程ありますし、Arduboy 互換機の時にはなかった microSD もあります。フルスペックの Gamebuino を目指すなら CdS セルや ICSP 端子、I2C 端子も必要です。これらをうまく収められる筐体があるとは思えませんし、配線だけでもずいぶんかさばると思います。

(3) コスト

Gamebuino は安いんです。

ブレッドボードに構築したものは構成を簡略化しています。アレをフルスペックで作ろうと思ったらかなり高くつくと思います。



ハードウェア

それでも互換機を作りたいヒトがいらっしゃるかもしれないので、念のために配線を書いておきます。

本体

5V 版 Pro Mini を使い、電源は安定した 3.3V を VCC へ接続します。5V 版 (16MHz) を 3.3V で動作させるのが目的です。3.3V 版 Pro Mini を使うと 8MHz での動作になってしまいます。

A6 (19: ADC6) は GND に落とします。リポバッテリーを接続しない場合、起動時の LOW BATTERY エラーを黙らせるにはこれしかありません。

LCD モジュール

私が使用した LCD モジュールはコレです。

LCD Atmega328P 32pin Pro Mini
1 RST 23 PC0 (ADC0/PCINT8) A0
2 CE 24 PC1 (ADC1/PCINT9) A1
3 DC 25 PC2 (ADC2/PCINT10) A2
4 DIN 15 PB3 (PCINT3/OC2A/MOSI) D11
5 CLK 17 PB5 (SCK/PCINT5) D13
6 VCC VCC VCC
7 LIGHT 9 PD5 (PCINT21/OC0B/T1) D5*
8 GND GND GND

この LCD モジュールを素の状態で使うとアノードコモンなので、光センサーを使用して接続すると周囲が明るい程バックライトも明るい事になります。ちゃんと実装しようと思ったらカソードコモン化するか、別の LCD モジュールを使うしかありません。

* 光センサー未使用時は LIGHT ピンを GND に接続するとバックライト ON、VCC (3.3V) に接続でバックライト OFF となります。

microSD

私が使用した microSD ブレークアウトボードはコレです。

microSD Atmega328P 32pin Pro Mini
1 CD (接続しない) (接続しない)
2 DO 16 PB4 (PCINT4/MISO) D12
3 GND GND GND
4 SCK 17 PB5 (SCK/PCINT5) D13
5 VCC VCC VCC
6 DI 15 PB3 (PCINT3/OC2A/MOSI) D11
7 CS 14 PB2 (PCINT2/SS/OC1B) D10

スピーカー (パッシブブザー)

大きなスピーカーを接続しないのなら回路図に載っているようなアンプは不要でしょう。

スピーカー Atmega328P 32pin Pro Mini
+ 1 PD3 (PCINT19/OC2B/INT1) D3
- GND GND

ボタン

ボタン Atmega328P 32pin Pro Mini
BTN0 (上) 13 PB1 (PCINT1/OC1A) D9
BTN1 (右) 11 PD7 (PCINT23/AIN1) D7
BTN2 (下) 10 PD6 (PCINT22/OC0A/AIN0) D6
BTN3 (左) 12 PB0 (PCINT0/CLKO/ICP1) D8
BTNA (A) 2 PD4 (PCINT20/XCK/T0) D4
BTNB (B) 32 PD2 (INT0/PCINT18) D2
BTNC (C) 26 PC3 (ADC3/PCINT11) A3

片方は GND へ接続します。

光センサー (任意)

光センサー (CdS セル) は LCD モジュールのバックライトと連動しています。

100KΩ抵抗でプルダウンして A7 (22: ADC7) へ接続します。

ICSP (任意)

ICSP Atmega328P 32pin Pro Mini
1 MISO 16 PB4 (PCINT4/MISO) D12
2 VCC VCC VCC
3 SCK 17 PB5 (SCK/PCINT5) D13
4 MOSI 15 PB3 (PCINT3/OC2A/MOSI) D11
5 RST 29 PC6 (RESET/PCINT14) RST
6 GND GND GND

I2C1 / I2C2 (任意)

I2C の接続は Gamebuino の回路図を参照してください。

See Also:


ソフトウェア

Gamebuino は USB からスケッチをアップロードして個別にゲームを遊ぶ事もできますが、microSD からゲームファイル (*.hex) を呼び出して実行する事もできます。前者に関しては Arduino IDE からコンパイル&転送するという Arduino ではおなじみのスタイルですが、後者を実現するためには Gamebuino Bootloader が必要です。

ブートローダーの書き込み

現状で Gamebuino ブートローダーを書き込む最も簡単な方法は Arduino IDE 1.0.5 を使う事です。ここでは書き込み装置として USBasp を使います。

  1. ZIP 版の Arduino IDE 1.0.5 を DL し、適当な場所に解凍します (例: C:\arduino-1.0.5)。
  2. https://github.com/ghalfacree/Arduino-Sketches からブートローダーを入手します。
  3. アーカイブ中の /hardware-broken/arduino/bootloaders/gamebuino_boot/ フォルダ自体を C:\arduino-1.0.5\hardware\arduino\bootloaders へコピーします。
  4. C:\arduino-1.0.5\hardware\arduino\boards.txt をテキストエディタで開きます。
  5. 末尾に以下を追記します:
    ##############################################################
    
    gamebuino.name=Gamebuino
    gamebuino.upload.protocol=arduino
    gamebuino.upload.maximum_size=30592
    gamebuino.upload.speed=115200
    gamebuino.bootloader.low_fuses=0xff
    gamebuino.bootloader.high_fuses=0xda
    gamebuino.bootloader.extended_fuses=0x05
    gamebuino.bootloader.path=gamebuino_boot
    gamebuino.bootloader.file=gamebuino_boot.hex
    gamebuino.bootloader.unlock_bits=0x3F
    gamebuino.bootloader.lock_bits=0x0F
    gamebuino.build.mcu=atmega328p
    gamebuino.build.f_cpu=16000000L
    gamebuino.build.core=arduino
    gamebuino.build.variant=standard
    
  6. USBasp を ICSP 端子に配線します、Pro Mini なら以下のように配線します。
  7. USBasp を PC と接続します。
  8. Arduino IDE 1.0.5 を起動します。
  9. [ツール | マイコンボード] で Gamebuino を選択します。
  10. [ツール | 書き込み装置] で USBasp を選択します。
  11. [ツール | ブートローダーを書き込む] でブートローダーを書き込みます。

Gamebuino ブートローダーが書き込めたら、初期セットアップを行う画面になります。

初期セットアップが終わったら C ボタンを押すと microSD からゲーム一覧を読み込みはじめます。

ブートローダーの書き込み (avrdude 使用)

古い Arduino IDE を使いたくないのなら、avrdude を使ったスクリプトでもブートローダーを書き込めます。但し、将来において動作を保証するものではありません。

以下は書き込み装置として USBasp を使う場合のスクリプトです。

@echo off
SET AVRDUDE_PATH=C:\arduino-1.6.9\hardware\tools\avr


"%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -patmega328p -cusbasp -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xda:m -Ulfuse:w:0xff:m
IF %ERRORLEVEL%==0 (
  "%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -patmega328p -cusbasp -Pusb -Uflash:w:gamebuino_boot.hex:i -Ulock:w:0x0F:m
)
pause

以下は動作未保証ですが、Arduino as ISP (UNO 等をブートローダー書き込機にする) 用のスクリプトです。

@echo off
SET AVRDUDE_PATH=C:\arduino-1.6.9\hardware\tools\avr
SET COM_PORT=COM4


"%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -patmega328p -cstk500v1 -P%COM_PORT% -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xda:m -Ulfuse:w:0xff:m
IF %ERRORLEVEL%==0 (
  "%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -patmega328p -cstk500v1 -P%COM_PORT% -b19200 -Pusb -Uflash:w:gamebuino_boot.hex:i -Ulock:w:0x0F:m
)
pause

赤字の部分はご自分の環境に合わせて書き換える必要があります。これらのスクリプトと gamebuino_boot.hex を同じ場所において実行してください。

ゲーム用 microSD の準備

小容量の microSD カードを用意しましょう。microSDHC ではなく、2GB 以下の microSD がいいと思います。Gamebuino には microSD の相性問題が少なからずあるようです。

用意ができたら、以下からゲームを DL しましょう。

microSD のルートフォルダに展開しておきます。

ゲームの起動

microSD を Gamebuino に挿入して起動すれば、ゲームが読み込まれランチャー (メニュー) が起動します。初回はゲームリストの読み込みに時間が掛かります。

microSD が認識されていなければエラー画面になります。microSD の接続及び、microSD カードをもう一度確かめてみてください。

ライブラリの追加

Gamebuino のライブラリは [スケッチ | ライブラリをインクルード | ライブラリを管理] で Gamebuino を検索すれば出てくるのでこれをインストールしましょう。

他に SdFat ライブラリも必要かもしれません。

See Also:


シールド化

「後で何か確認したくなったら、またブレッドボードで作るの?かったるいなぁ」...そんな時はシールド化ですよね。

ボード選定

ブレッドボードで使った Arduino Pro Mini は...使いません。シールド化するのですから、ボードは UNO 系です。そして、シールド化するのにとても都合のいいボードがあります。

SainSmart の表面実装 (SMD) 版 UNO 互換機です。"改造バージョン" と呼ばれています。

すべて条件を満たします。UNO の SMD 版には殆どメリットがないのですが、この SainSmart の互換機はよくできていると思います。以前は Amazon で単品でも買えたのですが、最近はスターターキットと一緒のものしかないようです。

実装

シールドのベースには、買ったばかりで埃をかぶっていたバニラシールドを使いました。ボタン以外は実装してあります。C ボタンだけは右下に付けておきました。何でかというとこのボタンだけはアナログピン他のピンと距離があるのと、これさえなければ十字キーと A / B ボタンなので、いわゆる ATARI ジョイスティック (MSX ジョイスティック) で済むんですよね...最近売ってないですけど。

シールドの裏は特に何もなく、A6 / A7 ピンを引き出すためのピンソケットだけがあります。

ちょっと無理矢理ですが、本体の A6 / A7 ピンヘッダから信号を引き出せるようになっています。

バニラシールドのスルーホールグリッドと UNO 互換機の拡張ピンヘッダの位置は残念ながら一致していません...なので、現物合わせした状態でハンダ付けしてあります。ピンソケットが微妙にナナメなのはそのせいです。

Gamebuio 化の手順

Pro Mini でやった手順と特に変わりはありません。UNO 互換機には ICSP 端子があるので USBasp と接続するのが楽でいいです。

スペースの都合上、シールドには ICSP 端子を引き出していないので、ブートローダーを書き込む際には UNO 互換機からシールドを取り外しておく必要があります。


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: