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

【Arduboy】Arduino Leonard(Pro Micro)でArduboy互換機を自作する!

マイコンを使ったミニサイズのゲーム機を作るのに最近ハマっています!

このジャンルと言いますかマイコン(MCU)を使って動かす携帯ゲーム機は多くのプロジェクトでオープンソース化されており、詳細な回路図やゲームデータなどが公開されています。

これらを参考に本家の構成に近いものを作るのは比較的簡単で、また付加機能などをプラスしてオリジナルの互換機などを作ることも出来るので面白いと思います。

ATtiny85という8ピンしかない小型な8ビットAVRマイコンを使って動かす『Tiny Joypad』はブレッドボードでも簡単に組んで楽しむことが出来ます。

【Arduino】ATtiny85を使ったミニゲーム機『Tiny Joypad』をブレッドボードで組んで遊んでみる!

面白いミニゲーム機なので基板を製作してオリジナルのTiny Joypad互換ボードとして仕上げました。

【電子工作】ミニAVRマイコンATtiny85で動かすミニゲーム機『Tiny Joypad』互換ボードを作ってみました!【JLCPCB】

ATtinyに関しての理解が深まり、後にミニ無線コントローラーの製作へと繋がりました。

【電子工作/Arduino】ATtiny84で動かすミニ無線コントローラー『TinyPad』を作ってみました!

また、ESP8266を使って動かす『ESPboy』も作ってみました。
こちらもオープンソースプロジェクトとなり回路図等の詳細な情報が公開されています。
回路を簡略化することにより、ブレッドボードに組んで簡単に試してみることが出来ます。

【電子工作】ESP8266(WeMos D1 Mini)で動かすオープンソースの携帯ゲーム機『ESPboy』が面白い!

こちらも非常に気に入ったので基板を製作して本家ESPboyとほぼ同じ構成で組み上げました。

【ESPboy】ESP8266で動かす携帯ゲーム機ESPboy。基板を製作して完成させました!【JLCPCB】

マイコンを使ったこのようなミニゲームを動かすオープンソースプロジェクトはまだまだたくさんあります。
そして今回はミニゲーム機『Arduboy』の話となります。

Arduboyは製品版として販売されておりマイコンを使った電子工作をやられている方ならご存じの方も多いと思います。
Arduinoをベースとした非常に有名なオープンソースのプロジェクトです。

Arduboyも同様にブレッドボードやユニバーサル基板を使って簡単に組む事ができ、公開されている多くのゲームデータをインストールして遊ぶことが出来ます。

Arduboy互換機を自作する![Arduino Leonard / Pro Micro]

Arduboyとは?

ArduboyはArduinoをベースとした携帯ゲーム機で、Arduboy / Arduboy mini / Arduboy FXが製品版として既に販売されています。

マイコンを使った電子工作をやられている方なら「おっ、名前くらいは聞いたことがある」って方も多いと思います。
小さくてカッコいいですね!
見てるだけでもテンションが上ってしまうボディーです。

参考 ArduboyArduboy公式サイト

Arduinoを使った電子工作を始めた時から興味は持っていたのですが、製品版を購入するのはなかなか少しお高い印象を受けます!

ですがArduboyはオープンソースハードウェアをベースに作られているので、詳細な回路図だけではなくArduboyで動く多くのゲームデータも無料で公開されています。

まずどんなものか試してみたい場合はブレッドボードを使って簡単に組んで遊ぶことが出来ます。
気に入れば製品版を購入したり、またユニバーサル基板で操作しやすいように組み直したり基板を製作してオリジナルのArduboy互換機を作ってみるのも面白いと思います。

Arduboy互換機を作るのに最適なArduinoボードは?

本家ArduboyのプロジェクトではMCU(マイコンチップ)にATmega32U4が使われています。

ATmega32U4はArduinoではArduino LeonardArduino MicroといったLeonard系のボードに使われています。

これらArduinoボードをお持ちならArduboyはブレッドボードやユニバーサル基板を使い簡単に組むことができ、その開発環境もArduino IDEを使うことが出来ます。

今回Arduino Leonardと(Arduino)Pro Micro互換ボードを使ってArduboy互換機を作ってみました。

MEMO
Pro MicroはSparkFun社が製造するものが本家となるので正確にはArduinoではありませんが、Arduino Leonardとの互換性があります。

Arduboy互換機を作る場合、Pro Microを使えばこのように小さくまとめることが出来ます。

ユニバーサル基板を使って組めばさらに小型なものが作れます。

しかしPro Microは小型なボードのためATmega32U4の全てのI/O端子が引き出されていません。
そのためArduboyを構成するのに必要な端子(特にディスプレイ接続に必要な端子)が使えないのでピンアウトの変更という作業が必要となってきます。

またArduino Leonardでは全てのI/O端子が使えるので、Arduboy互換機を作って試してみたい場合はArduino Leonardを使う方法が一番簡単だと思いますがサイズは少し大きくなってしまいます。

【Arduino IDE】Arduboyのセットアップ

Arduboy用に作られた多くのゲームデータをプレイできるArduboy互換機をArduino LeonardやPro Microを使って作っていきます。

Arduboyの開発環境にはArduino IDEを使うことが出来ます。
Arduino IDEのインストールがまだの方はこちらの記事を参考にまずインストールを行って下さい。

Arduinoの開発環境を構築する。Arduino IDEのインストール方法!

Arduino IDEではArduboyに対応したボードパッケージやライブラリが用意されているので導入は非常に簡単です。
Arduboyの導入手順は以下のようになります。

Arduboyの導入手順
  1. Arduboyに対応したボードパッケージのインストール
  2. Arduboyに必要なライブラリのインストール

①Arduboyに対応したボードパッケージのインストール

まずArduboyに対応したボードパッケージのインストールです。

Arduino IDEの[環境設定(Preferences…)]から[追加のボードマネージャのURL]に以下URLを追加します。

他のボードパッケージのURLが記載されている場合は新たな行に追加して下さい!

追加するURL
https://arduboy.github.io/board-support/package_arduboy_index.json

次に[ツール]→[ボード]→[ボードマネージャ…]に進みます。

[Arduboy]で検索すると該当するボードパッケージが見つかるので、これをインストールして完了です。

②Arduboyに必要なライブラリのインストール

次にArduboy用に公開されているゲームデータを動かすのに必要なライブラリのインストールです。

必要なライブラリは公式サイトの「Quick Start Guide」ページにGitHubのリンクページが記載されていますが、これらライブラリはArduino IDEのライブラリマネージャから検索してインストールすることが出来ます。

参考 Quick Start GuideArduboy [スケッチ]→[ライブラリをインクルード]→[ライブラリを管理…]へと進みます。

ライブラリマネージャから上記ライブラリ名で検索すると見つかるので、全てのライブラリをインストールします。

他のライブラリも同様にインストールして下さい。(ライブラリは上記名称で検索すると出てきます)

上記すべてのライブラリのインストールが出来たらArduino IDEでArduboyを扱う準備が整いました。

Arduboyの回路構成&使用するI/O端子

Arduboy公式サイトにはゲーム機本体の詳細な回路データが公開されています。

参考 Production Arduboy SchematicArduboy

マイコンチップにATmega32U4が使われ、SPI接続のOLEDディスプレイ(128×64)とUP/DOWN/LEFT/RIGHT/A/Bの6つの操作ボタン、そしてRGB LEDとスピーカーがメインとなります。

Arduino LeonardまたはPro Microを使って試してみる場合、USB端子からのプログラム書き込み部分や電源関係の回路(リポバッテリーの充電回路は省く)はボードに含まれているので不要となります。
またRGB LEDは特にゲームをプレイする際には必要ないのでカットしても問題ありません!

まとめると、MCUにATmega32U4が使われているArduino LeonardまたはPro MicroでArduboyを組む際に必要なI/O端子はこのようになります。

Arduboyの機能Arduino Leonard(Pro Micro)使用端子
ボタンUPA0
DOWNA3
LEFTA2
RIGHTA1
AD7
BD8
OLEDディスプレイGNDGND
VCCVCC(5V)
D0SCK
D1MOSI
RSTD6
DCD4
CS※D12
スピーカーピン1D5
ピン2D13
LEDBLUED9
REDD10
GREEN※D11
※Pro Microを使う場合、この端子がないためピンアウトの変更が必要です!

Arduino Leonardを使って組む時の接続

上記接続表を参考にArduino Leonardを使ってArduboyを組む場合の接続はこのようになります。
本家Arduboyより回路はかなり簡略化出来ますね!

MEMO
スピーカー接続部分はD13端子は使わず、D5-GND間にスピーカを接続しました!

今回KeyestudioさんのArduino Leonard互換ボードを使いました。
KeyestudioさんのボードはArduino関連でよく使っていますが、互換ボードとしては優秀なのでおすすめです!

テストスケッチを使い動作確認

接続ができたらテストスケッチを使い動作確認を行います。
いくつかテストスケッチが用意されているので、ボタンの動作やスピーカーからの音の確認が出来ます。

Arduino IDEの[ファイル]→[スケッチ例]→[Arduboy2]の中にテストスケッチがいくつか用意されています。
まずはこれらテストスケッチを使い動作確認を行って下さい!

[Buttons]や[BeepDemo]を使って音やボタン操作の確認が出来ます。
ボタンを押した際に反応しない時や動く向きが違っている場合は接続が間違っている可能性があるのでチェックして下さい。

書き込む際のボード設定は[Arduboy]を選択します。

[Arduino AVR Boards]の中にある[Arduino Leonard]を選択しても問題ありません!

ボタン操作およびスピーカーからの音を確認して上手く動作すれば接続は問題ありません。

テストスケッチを使い動作に問題がなければArduboy公式サイトに公開されているゲームデータをインストールして遊ぶことが出来ます。

上記テストスケッチの中には[ArduBreakout]というサンプルのブロック崩しゲームが入っているので、まずはこれを書き込んで遊んでみて下さい!

(Arduino) Pro Microを使って組む場合

次にPro Microを使って組む場合の接続です。
Leonardよりもボードサイズが小さいのでコンパクトにまとめることが出来ます。

基本的に上記Leonardボードを使った時と接続は同じですが、Pro Microには必要な一部I/O端子が無いためライブラリのピンアウトの変更が必要となります。

Pro MicroはSparkfun社製が本家ボードとなり5V 16MHz動作版と3.3V 8MHz動作版がありますが、Arduboyでは5V動作版を使います。

多くの互換ボードが販売されていますが、こちらもKeyestudioのPro Micro互換ボードを今回使いました。

MEMO
Pro Microにはボードにリセットスイッチが付いていないため、上記回路図ではリセットをかけるための物理スイッチを設置しています。
後述しますが、ゲームデータ書き換えの際に必要になる場合があります!

先述のようにPro MicroはミニボードなのでArduino LeonardのようにATmega32U4の全てのI/O端子が引き出されていません。
そのため一部端子のピンアウトの変更作業が必要となってきます。

OLEDディスプレイのCS端子に接続するD12端子がないので上記回路図では空いているD3に接続しています。

MEMO
上記回路図ではLED接続はカットしています。
LEDも接続したい場合、GREEN LEDのD11端子も他の空いている端子(D2またはD14)に割り振る必要があります!

そしてライブラリのピンアウトの変更手順です。
Arduboyの使用端子は、[Arduboy2]ライブラリで定義されています。

Arduinoのライブラリフォルダ[libraries]の中にある[Arduboy2]→[src]フォルダ内の[Arduboy2Core.h]ファイルをテキストエディッタ等で開きます。

OLEDディスプレイのCS端子への接続はデフォルトでD12端子を使うように定義されていますが、Pro Microのボードではこの端子は引き出されていないので上記回路図では空いているD3端子を使ったので[3]に変更します。

ちなみにRGB LEDを使いたい場合は、Pro MicroではD11端子が無いので空いているD2またはD14端子に割り振る必要があります!

書き込む際のボード設定は先程と同じです。
あとは上記Arduino Leonardの時と手順は同じなのでテストスケッチを書き込み動作確認を行って下さい。

Pro MicroのUSB端子からの給電で動作しますが、リポバッテリーや乾電池などを使っての駆動も可能です。

こちらはユニバーサル基板を使い組み直したものですが、リポバッテリー(3.7V)をDC-DCコンバーターを使い5Vに昇圧してPro MicroのVCC端子に繋いで給電しています。

またPro Microのボードには5Vレギュレーターが搭載されているので、[RAW端子]からの7~9Vの給電にも対応しています。
例えば乾電池(1.5V)×6本をRAW端子に接続して駆動することも出来ます。

Arduboy互換機としてはこのようにバッテリーなどを用意して単独で動く形にしておくのが面白いかもしれませんね!

公開されているゲームデータをインストールする

製品版として販売されているArduboyには200以上のゲームデータがプリインストールされているようです。
これらゲームデータはArduboy公式サイトに公開されているので、自作したArduboy互換機に個別でインストールして遊ぶことが出来ます。

ゲームデータは公式サイトのコミュニティページからダウンロードすることが出来ます。
多くのゲームデータが公開されています。

参考 Browse, share and play games made by the community.Arduboy

こちらは[Kong]というゲームです。
昔ゲームウォッチであったドンキーコングのArduboy版ですね!

こちらは[Kung Fu Escape – Arcade game]というゲーム。

ユニバーサル基板を使えばコンパクトにまとめることが出来るので、ゲームプレイの操作性も上がって面白いと思います!

数が多いので、あとは面白そうなゲームを見つけてインストールして遊んでみて下さい!

使用パーツ一覧

Arduino LeonardまたはPro Microがあれば、あとは最低限タクトスイッチとスピーカーがあればArduboy互換機として動作させることが出来ます。
一応今回使った使用パーツをまとめておきます。

使用パーツ一覧
  • Arduino Leonardまたは(Arduino) Pro Micro
  • OLEDディスプレイ(0.96inch SPI接続タイプ)
  • タクトスイッチ(6mm or 12mm)
  • スピーカー(ピエゾブザー)
  • その他

Arduino Leonard / Pro Micro

Arduboy互換機を組む場合、Arduino LeonardまたはPro Microボードを使うのが一番簡単だと思います。
今回手元にあったKeyestudioの互換ボードを使いました。
KeyestudioのボードはArduino用途でよく使っていますが、使いやすく本家のお高いボードを買うよりコスパはいいかと思います。

OLEDディスプレイ

OLEDディスプレイはSPI接続の0.96インチ(128×64)のものを使いました。
7ピンタイプ(GND/VCC/D0/D1/RES/DC/CS)の制御チップにSSD1306が使われているものを選択して下さい。

タクトスイッチ

タクトスイッチはブレッドボードを使って組む場合は6mm角(6mm×6mm)のものが配置しやすいと思います。
またユニバーサル基板で組む場合は12mm角の大きなものも配置できるので操作はしやすくなります。

スピーカー(ピエゾブザー)

ユニバーサル基板で組み直した際に手元にあったピエゾ式のブザーを使いました。
入手しやすいパーツなので組むボードのサイズ等によりお好みで選択して下さい。

その他パーツ

その他パーツとしてブレッドボードやジャンパーワイヤーなど細かいものが必要です。
またPro Microを使った上記動画のように単体で動かしたい場合には、電源(リポバッテリーや乾電池など)やDC-DCコンバーターが必要となります。

シリアルポートが認識されない時の対処法

初めてゲームデータを書き込む際は問題ないのですが、Arduino LeonardまたはPro Microに新たにゲームデータを書き込む際に書き込みエラーが出る場合があります。

これはLeonard系のボードのリセット&ブートローダーの仕様のようです。
Leonard系のボードは、書き込まれているスケッチを動かす以外にUSBからの通信も1つのマイコンチップ(ATmega32U4)で行っています。
そのためリセットの処理が他のArduinoボードとは異なっています。

シリアルポートが認識されない場合、リセットスイッチの操作によりブートローダーモードに8秒間入りスケッチの書き込みが行える状態(シリアルポートが認識される)になります。

参考 Pro Micro & Fio V3 Hookup GuideSparkfun

8秒経過すると既に書き込まれているスケッチが実行されてしまうので、シリアルポートが認識されない場合は以下手順で進めると上手くいくと思います。

MEMO
Arduino Leonardにはボードにリセットスイッチが付いていますがPro Microには付いていないため、上記Pro Microを使った接続では物理スイッチをRESETピンに接続しています。
シリアルポートが認識されない時の対処法
  1. リセットスイッチを押す
  2. シリアルポートが現れるのでこれを選択する
  3. アップロードボタン(スケッチの書き込み)を押す
  4. コンパイルが完了し書き込みが始まる直前に再度リセットスイッチを押す
  5. 書き込み完了

【追記】基板を製作しオリジナルArduboy互換機を作ってみました!

ブレッドボードおよびユニバーサル基板で組んだArduboyが面白かったので、基板を製作してオリジナルArduboy互換機を作ってみました。

【電子工作】Arduino Pro Microで動かすArduboy互換機を作ってみる!

最後に!

このようなマイコンを使って動かす携帯ゲーム機ってほんと面白いですね!

Arduino LeonardやPro Microを使いブレッドボードやユニバーサル基板に組めばArduboy互換機は簡単に作ることが出来るのでおすすめです。

これから自作Arduboy互換機を作る方の参考になればと思います。

コメントを残す