画面の大きなArduboy FX互換機を3Dプリンタで作った

Arduboy(FX)とは?

Arduboyとは、名刺サイズの8bit携帯ゲーム機です。 モノクロで128×64のミニマルなディスプレイを搭載し、Atmega32u4という8bitマイコンをコアとして構成されています。

www.arduboy.com

Arduboyはクラウドファンディングで資金を集め開発が行われ、無事資金が集まり、ここ数年間の間世界各地で買うことができました。 また、途中で新しいバージョンのArdbuboy FXも開発され、最近はArduboy FXが主として販売されていました。 Arduboy FXというのは従来のArduboyに複数のゲームを保持し、切り替えて遊ぶためのFlashメモリを追加したものです。

(現在は関税の問題などもあり、在庫切れとなっており、入手が少し難しくなっているようです)

Arduboyは自作できる

Arduboyは製品として販売されていますが、その回路図やソースコードオープンソースとなっており、部品をそろえて回路を同じように組めば、誰でも作ることができます。

また、そのために必要なツールや資料もかなり充実しています。

ということで、今回は、Arduboy FXの互換機を作ってみることにします。

こだわりポイント

ただ単にArduboy FXを真似して作るのでは、芸がありません。今回は以下のポイントにこだわることにしました。

  • 2.42インチの大きなOLED(解像度は同じく128×64)
    • オリジナルのArduboyは1.3インチのOLEDです、また市場に広く流通しているよく似たOLEDは0.96インチです。
  • 3DPCBと呼ばれる3Dプリンタを活用した回路を採用する

回路の設計

3DPCBを作るためには、まず普通のプリント基板を作るときと同じように基板を作るプロセスを採用します。 これは、以前3Dプリンタで基板のようなもの(3DPCB)を作ってみた - inajob's blogで私が行ったのと同じ方法です。

主な部品は以下です(細かいパーツがほかにもあります)

設計と言っても、配線については以下のページに詳しく解説されているので、この通りに配線します

github.com

Pin wiring tableと書かれた表のProMicro 5V(standard wiring)に従って配線しました。

いくつか注意点があります

  • OLED CSはGND/(inverted CART_CS)と書かれています。 Arduboy FXを作る場合はGNDではなく inverted CART_CS にする必要があります。
  • CART_CSはorgとnewの2通りが書かれています。今回はnewを採用しました。これはArduboy FXと同じ配線です
  • 上に出てきたinverted CART_CSを実現するために、NOT回路を構成する必要があります。に従いトランジスタで回路を構成しました
  • スピーカーは適当に電解コンデンサでデカップリングしたのちに取り付けています。十分大きな音が鳴ります
  • リセットボタンを搭載しました

基板の設計

回路図が出来たら次は基板の設計です。

3DPCBということで、2mmの太い配線で、なるべく片面だけを使うように回路を設計します。クリアランスは0.2mmと、いつものプリント基板と同じ設定のままで設計してしまいましたが、これだとフィラメントが1本だけの壁になるようで、もう少し太くなるように設計してもよかったかなと思っています。

3DPCB化

3Dプリンタで基板のようなもの(3DPCB)を作ってみた - inajob's blogと同じようにOpenSCADを使い3DPCBを作っていきます。

今回作るのは3DPCBのメインの造形と、2つのカバーです。

まずメインの3DPCBです。

基板でいうところの導通する部分を溝にしてViaは少し大きめの穴にしました。またカバーと結合するための穴をあけています。データはKiCADから出力したDXFをそのまま使うので、モデリングは不要です。 Viaや穴はドリルデータに出力されるので、前回同様DXFファイルに変換して利用しています。

Viaの穴は貫通させずあえて底面1レイヤーだけは塗りつぶしています。こうすることで1層目の定着を安定させる目論見があります。

次がボタン部分のカバーです。

ボタン部分は6mmの良くあるタクトスイッチを使っています。ボタンの頭が長いものを使ったので、その頭が飛び出すようなカバーを作ります。 このカバーは無くても遊ぶことは出来るのですが、3DPCBはボタンを十分に基板に固定することができず、グラグラするため、このカバーで固定するようにしました。

ボタンの頭の穴をあける部分は、KiCADのUser定義レイヤーに○を描いたものをほかの配線と同様にDXF形式で書き出して利用しています。

最後が、メイン部分のカバーです。

3DPCBの配線面と反対側に設置する部品の部分だけ窓を開けたようなカバーです。 また、ProMicro、OLED、Flashモジュールは直接3DPCBに接続するのではなく、2.45mmピッチのソケットを介して繋ぐようにしており、そのソケット部分も窓になっています。

こちらも3Dプリンタの印刷を安定させるために底面1レイヤーは塗りつぶしています。またソケットの部分については、上からピンを差し込むための穴と、ソケットを取り付けるための窓の高さを変更して、ソケットとピンの間にこのカバーが挟まるような形状にしています。

こうすることで、ソケットからマイコンボードを抜く際に余計な力が3DPCBにかからないようにしました(実際組み立ててみると、3DPCBとソケットは結構強い力でくっついているので、この配慮は不要だったように思います。

そんなこんなで、3DPCBが完成したので、これらを数時間かけて印刷しました。

前述したように、配線と配線の間のクリアランスを0.2mmとしたため、一部の溝は間の壁が非常に薄くなって、触ると折れてしまうような感じに仕上がりましたが、まぁそのくらい壊れても配線は問題なくできるので、このまま実装に移ることにしました。

配線・部品実装

溝に沿わせて配線します。

配線が交差することはないので、被覆なしの導線で配線することもできるのですが、手持ちがなかったので被覆付きの導線を使って配線しました。

折角被覆付きなので、役割に応じて違う色で配線してみました。

このような導線アソートを使うと好きな色を好きなだけ使えて楽でした。太さは28 AWGを使いましたが、もっと細くてもよいと思いました。より線よりも単線のほうが扱いやすかったかもしれないとも感じました。

3DPCBでの配線は、どこからどこに配線を接続すべきかが一目瞭然なので、「無心」で配線作業できるのが面白いと感じました。一種のセラピーを受けているような時間でした。

3DPCBの欠点としては、はんだ付けが難しいことです。配線と部品をはんだづけするわけですが、すぐ近くにプラスチック(PLA)でできた3DPCBがあるため、簡単にプラスチックを溶かしてしまいます。 慣れれば適切な箇所に熱を加えたり、サッと作業するなどで、対応できますが、それでもいくつかの箇所で3DPCB自体を溶かしてしまいました。(たぶんこの溶かしたときの煙も健康に良いものではなさそうです・・)

配線が終わったらカバーを装着します。部品のある場所は窓が開いているので、スッと入ります。

カバーを付けるとこんな感じです。この上からOLED、Flashモジュール、Pro Microを突き刺すことになります。

Pro Microの準備

Arduboy FXを作るにあたり、Pro Microに適切なブートローダーを書き込む必要があります。

ここでも、以下のリポジトリを使います。

github.com

READMEの指示に従い、Arduino IDEのBoardとしてHomemade Arduboyを追加します。

さて、ここからPro MicroにArduboy FXのブートローダーを書き込むのですが、これを実現するためにはAVRのライターが必要となります。

今回はArduino UNO(の互換機)をライターとして使うことにしました。Arduinoをちょっと深く触った人なら体験したことがあるかもしれませんが、Arduino UNO自体をAVRライターとして使うという技があるのです。

配線やArduino IDE上での操作は以下のページが詳しいので参考にしてみてください。

ht-deko.com

↑の記事の中で「目的のArduino」と書かれて図ではArduino Microが選択されている個所で、「Homemade Arduboy」を選択することで、Arduboy FXのブートローダーを書き込むことができます。

Homemade Arduboyを選ぶと、さらにいくつかの項目を選択することができますが、今回は以下の図のように設定しました。

  • Port
    • PC上で認識されたポートに合わせてください
  • Based on "Pro Micro 5V - Standard wiring"
    • Standard wiringで配線したのでこれを選択
  • Bootloader "Cathy3K (starts with menu)"
  • Display contrast: "Normal"
    • 変更していませんが、コントラストが設定できるようです
  • Core: "Arduboy optimized core"
    • 変更していません
  • Display: "SSD1309"
    • ここは要変更。利用するOLEDに合わせてコントローラを選択します
    • 純正のArduinoはSSD1306です
  • Flash select: "Pin2/D1/SDA (official)"
    • 配線をこのようにしたのでこれを選択
  • Programmer: "Arduino as ISP"
    • Arduino UNOを書き込み機として利用するのでこれを選択
    • 事前にArduino UNOにはArduinoISPというスケッチを書き込んでおきます

で、ここまで出来たら、ArduinoISPを書き込んだ、Arduino UNOをPCに繋ぎ、さらにそのArduino UNOからPro Mircoに適切に配線して、Burn Bootloaderを選択すると書き込みが開始されます。

自分の場合ですが、この書き込みがうまく行かないことが何度かありました。配線を見直したり、何度か挑戦していると書き込むことができたのですが、原因は不明です。

動作確認とFlash Cartの書き込み

上記でブートローダーを書き込んだPro Micro、OLED、Flashモジュールをカバーの上から3DPCBに突き刺して準備完了です。

ここからは以下のツールを使います。 READMEに従いFX Activatorを起動します(WindowsMac/Linuxかで操作が違います)

github.com

このツールは本来、純正のArduboyに後からFX mod chipを付けた際にそれを有効化するためのものです。(以前この作業を紹介しました Arduboy FX Mod-ChipによるArduboyのFX化 - inajob's blog

今回はこのツールの機能を一部利用してFlashモジュールの接続確認と、Flash Cartの書き込みを行います。

まず、今回作成したArduboy FX互換機をPCに繋いでFX Activatorの画面のUpload Hex fileをクリック

画面がやや乱れるのですが、ここでMOD CHIPがNGを示す×、FLASH CHIPがOKを示すチェックマークになっていることを確認します。(MOD CHIPが×なのが不気味かもしれませんが、これであっています)

FLASH CHIPがOKであれば問題ないので、この画面では何も操作せずに 続けてFX ActivatorのOptionsのメニューから「Apply SSD1309 display patch」をクリックしてチェックマークを入れます。

この機能は素晴らしいもので、純正Arduboy FX向けのゲームのバイナリの一部をSSD1309用に自動的に書き換えてくれるというものです。この機能のおかげで、大量のゲームをこの互換機用に再コンパイルするという手間が省けます。 (これはSSD1309のみに提供されている機能で、ほかのOLEDはこのような便利な方法はありません)

チェックマークがついたら、画面上の「Upload Flash image」をクリックします。プログレスバーが伸びるのがゆっくりなので、しばし待ってください。

最後まで書き込めたら、互換機の真ん中のRESTボタンを押すことで、Arduboy FXとして起動します。

最新のFlash Cartの入手

今回書き込んだのはFX Activatorに同梱されているFlash Cartですが、これは少し古いものです。

最新が欲しい場合はPress Play on TapeページのArduboy FX - The whole encildaのリンクをクリックして遷移するCartBuilderのページからDownload BINをクリックして最新のBINファイルをダウンロードできます。

このbinファイルを先ほどのFX Activatorから選択して「Upload Flash image」をクリックすることで、このbinファイルをArduboy FX互換機に書き込むことができます。

まとめ・感想

Arduboy FXの互換機が比較的簡単に作れることは知っていたのですが、実際にやってみたのは初めてでした。 Arduboyは資料やコミュニティが充実しており、この記事に書いたような情報はちょっと調べればすぐに見つけることが出来、非常に進めやすかったです。

3DPCBは以前も少し試したのですが、ここまで実践的な回路ではなかったので、今回やっとまともに使ってみたという気持ちです。 プリント基板を作るほどでもないが、ユニバーサル基板にもじゃもじゃ配線するのもちょっと・・というニッチな需要にこたえる面白い手法だと感じました。

Arduboyの入手性が悪くなっている、今だからこそぜひ皆さん自分でArduboyを作ってみてはいかがですか?