Arduboy

Arduboy に関する記事です。



Arduboy

Arduboyはカードサイズのゲーム機です。MCU に Arduino LEONARDO と同じ Atmel ATmega32U4 が採用されている事からも判る通り、Arduino ベースのゲーム機です。

See Also:


購入

以下から購入できます。

白以外のカラーは公式からでないと購入できないようです。価格は 6,000円前後ですね...って、ちょっと待って。ゲームを遊ぶだけなら Nintendo 2DS が一万円前後で、ニンテンドークラシックミニ ファミリーコンピュータが 5,980円ですよ?よーく考えましょうね。

なお、互換機なら 2,000円程度で作る事ができます。そんなに難しい作業はありませんので、興味がある方はチャレンジしてみてはいかがでしょうか?


各部詳細

私の個体は電源を入れると MYSTIC BALLOON が起動しました。

箱書きによるとスペックは以下のようになっています。

MCU ATmega32U4 (16MHz)
Display 1.3inch OLED 128x64 SSD1306 (SPI)
Speaker Piezo Speaker (Mono)
Battery Lithium Polymer Battery 180mAh

Arduboy を単なる Arduino LEONARDO として使うには以下を参考にしてください (定義は Arduboy Library の core.h より)。

Function Definition Arduboy DevKit
LED R RED_LED 10 17
LED G GREEN_LED 11 17
LED B BLUE_LED 9 17
LED TX TX_LED / LED_BUILTIN_TX 30 17
LED RX RX_LED / LED_BUILTIN_RX 17 17
Button UP UP_BUTTON A0 8
Button DOWN DOWN_BUTTON A3 10
Button LEFT LEFT_BUTTON A2 9
Button RIGHT RIGHT_BUTTON A1 5
Button A A_BUTTON 7 A0
Button B B_BUTTON 8 A1
Reset RESET
Speaker 1 (-) PIN_SPEAKER_1 5 A2
Speaker 2 (+) PIN_SPEAKER_2 13 A3
Display Reset RST 6 12
Display D/C DC 4 4
Display SPI CS CS 12 6
Display SPI SCLK (CLK) PIN_SPI_SCK / SCK 15 (SCK) 15 (SCK)
Display SPI Data In (MOSI) PIN_SPI_MOSI / MOSI 16 (MOSI) 16 (MOSI)

LED を点灯させる場合には digitalWrite() ではなく analogWrite() による PWM でないと眩しすぎて目が焼けますのでご注意を。私は LED 部分に光拡散キャップ (3mm) の先端をカットしたものをセットしています (要分解)。既に 5mm の光拡散キャップをお持ちなら 5mm でもいいと思います。

See Also:


分解

分解してみました。

内部のハンダ跡はあまり綺麗じゃないですね。ゴムワッシャーが何で二か所にしか入っていないのだろう?

リチウムポリマー電池の下には落書きされた基板が。画像左下には NyanCat がいますね。絶縁とスピーカーの固定に紙テープが使われていますが、折角ならポリイミド (カプトン) テープがよかったかも。裏側は各種検査のためだと思われる端子が出ています。リチウムポリマー電池がちょっと心配ですが、膨らんできたら取り外してモバイルバッテリー等で遊べばよさそうです。

開発版 (DevKit) はボタン部がタクトスイッチだったので「それは操作性どうなの?」と思っていましたが、量産型は導電スナップドームが使われています。導電ラバードームに比べるとペコペコ感が強いので好みはあるかもしれませんが、本体を薄くするにはこれしかなかったのかもしれません。


セットアップ

Arduino IDE をインストールし、Arduino IDE インストールフォルダの library サブフォルダに Arduboy Library を入れるだけです。

Arduino IDE を既にインストールしている方は、ZIP でダウンロードし、Arduboy 用のクリーンな環境を用意しておいた方がいいかもしれません。

初期設定

Arduino IDE を起動したら、Arduboy の電源を入れた状態で PC と接続し、[ツール | ボード] でボードを Arduino Leonardo に設定し、

[ツール | シリアルポート] でポートを Arduino Leonardo が出ているものに変更します。

これで準備完了です。

ボードの追加 (任意)

ボードマネージャで Arduboy を追加する事もできます。

  1. [ファイル | 環境設定] の "追加のボードマネージャの URL" に https://arduboy.github.io/board-support/package_arduboy_index.json を追加。
  2. [ツール | ボード | ボードマネージャ...] でボードマネージャを開き "ARDUBOY" を検索。
  3. 出てきたボードをインストール。
  4. [ツール | ボード] で Arduboy が選べるようになる

ARDUBOY の DevKit や互換機を持っていないのならわざわざこのボードを追加する必要はないと思います。

その他

USB<->シリアル変換のドライバがうまく入らない場合には、UNO のセットアップを参考にしてみてください。Arduino LEONARDO の VID は 2341、PID は 8036 となっています。

See Also:


ゲームのインストール

公式のゲームリストでゲームを探します。 になっているものはインストール可能です。

ゲームのソースコードを見つけたら適当な場所に展開し、[ファイル | 開く] でゲームのスケッチを開きます。Arduboy の電源を入れた状態で PC と接続し、書き込みボタンを押せばゲームのスケッチがコンパイルされて転送されます。

特に難しくはないと思います。Arduboy は Arduino なので、困った時にはまず Arduino の情報をあたってみましょう。

See Also:


Arduboy Library を使ったスケッチのスケルトン

Arduboy Library を使ったスケッチのスケルトンです。

Arduino Library 1.1
#include <Arduboy.h>

Arduboy arduboy;

void setup() {
//arduboy.begin();          // Initialize the hardware
  arduboy.beginNoLogo();    // Initialize the hardware(without logo)
  arduboy.setFrameRate(15); // Setting the frame rate (15..60)
  arduboy.initRandomSeed(); // Initialize random number generator
}

void loop() {
  if (!(arduboy.nextFrame()))
    return;

  arduboy.clear();

  // OLED 描画系の処理はここに

  arduboy.display();
}    
Arduino2 Library
#include <Arduboy2.h>

Arduboy2 arduboy;

void setup() {
  arduboy.begin();          // Initialize the hardware
  arduboy.setFrameRate(15); // Setting the frame rate (15..60)
  arduboy.initRandomSeed(); // Initialize random number generator
}

void loop() {
  if (!(arduboy.nextFrame()))
    return;

  arduboy.clear();

  // OLED 描画系の処理はここに

  arduboy.display();
}    
 

Arduboy Library と Arduboy2 Library の違いですが、Arduboy2 Library は...

条件コンパイルで両用にできない事もありません。

// #define USE_LIB2

#ifdef USE_LIB2
  #include <Arduboy2.h>
#else
  #include <Arduboy.h>
#endif

#ifdef USE_LIB2
  Arduboy2 arduboy;
#else
  Arduboy arduboy;
#endif

void setup() {
  arduboy.begin();          // Initialize the hardware
  arduboy.setFrameRate(15); // Setting the frame rate (15..60)
  arduboy.initRandomSeed(); // Initialize random number generator
}

void loop() {
  if (!(arduboy.nextFrame()))
    return;

  arduboy.clear();

  // OLED 描画系の処理はここに

  arduboy.display();
}    

ARDUBOY_LIB_VER というマクロも定義されているので、ライブラリの差異を吸収する事もできます。

どちらのライブラリを使うかは好みですが、新規でゲームを作るなら Arduboy2 Library、既存のコードを流用してスケッチを書きたいなら Arduboy Library ですかね。


Tips

Tips です。

Arduboy Library 1.x

Arduboy Library 2.x


Arduboy Magazine

Arduboy Magazine です。ゲームの作り方の Tips とかが載ってたりします。


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

メニュー: