シャポログ

通販で部品を集めて「PicoPad」の互換機を作る

オープンソースのゲーミングコンソール「PicoPad」の互換機を 通販で手に入る部品で作ってみました。

現物合わせで場当たり的に作ったので誰でも再現できるレシピにはなっていません。 あくまで参考程度にしてください。

PicoPad とは

PicoPad は Pajenicko 氏による Raspberry Pi Pico をベースとした オープンソースのゲーミングコンソールです。 DIY キットが販売されており、C/C++、Circuit Python、MicroPython でのプログラミング可能で、 公式サイトでは「STEM 教育に最適」であるとされています。

独自のブートローダにより SD カードからバイナリを起動可能なので、 いちいち PC に繋いでプログラムを書き換える必要はありません。 公式の SD カードイメージにはゲームを含む多数のサンプルソフトウェアが収録されています。

ゲームボーイやファミコンのエミュレータも公開されており、 シンプルにレトロゲームコンソールとして使うこともできます。

なお、独自ブートローダに対応したバイナリを C/C++ で作成する場合は、基本的に Raspberry Pi 公式の Pico SDK ではなく Miroslav Nemecek 氏による独自の SDK である PicoLibSDK を用いた開発となる点に注意が必要です。

詳細な回路図は 公式リポジトリ で参照できます。回路図から構成図を起こすと以下のようになります。

色々繋がっていますが、最低限緑色の部分があれば PC から UF2 を書き込むことで起動は可能です。

自作について

今回は通販で手に入るモジュールを組み合わせて互換機を自作してみました。

なお、日本でのより本格的な自作例として下記のようなものがあります。

主な部品

Raspberry Pi Pico 2 W

サンプルプログラムや SDK は Pico 用と Pico 2 用の両方が公開されていますので どちらでも使用できます。今回は将来的に WiFi 対応することも考慮して Pico 2 W を使用することにしました。

LCD

LCD は ST7789 コントローラを搭載した QVGA 液晶を使うことになっています。 簡単に組み立てるなら Waveshare の 2inch LCD Display Module を使うのが良さそうです。 Amazon や Aliexpress でも同じものが手に入ります。

今回はできるだけ小さく作りたかったので、同じ Waveshare でネジ穴の無い 2inch LCD Display Module for Raspberry Pi Picoせんごくネット通販 で購入し、ピンソケットとスイッチを強引に取り去って使用しました。

キーパッド

キーパッドについては、汎用のタクトスイッチを使うことができます。

ゲームコンソールとして使うことをを考えるとクリック感が無いボタンの方が いいと思ったので、手元にあった Switch用スーパーミニコントローラー を分解して部品を流用することにしました。

なお、導電ゴム接点単体で入手 することも可能です。

バッテリーと充電コントローラ

バッテリーと充電コントローラまわりは以下のものを購入しました。

充電コントローラについては出来合いのモジュール (例: ミニリチウムイオン電池充電器モジュール ) を使うこともできます。

充電時に Raspberry Pico からバッテリーへの逆流を防ぐためのダイオードが必要です。 スイッチングダイオードでは電圧降下が大きすぎて LCD のバックライトが ちらついたりするので、ショットキーバリアダイオードを使用します。

バッテリーは無くても外部給電で動きます。 工作初心者の場合、裸のリポ電池の取り扱いはリスクも伴うので、 乾電池を使ったり、外部給電を前提とするのもアリだと思います。

スピーカー

公式の回路図は圧電スピーカーを使用する前提の回路になっています。

今回はもう少し力強く鳴らしたかったのでダイナミックスピーカーを使用することにしました。

公式の回路の圧電スピーカーをマグネチックスピーカーに置き換えても鳴るには鳴りますが、 大きな電流が流れてスピーカーとトランジスタが発熱し、もしかすると壊れるかもしれないので 回路の変更が必要です (後述)。

また、ソフトウェアでの音量調節が起動時にしかできないのが少し不便なので 物理ボリュームも追加することにしました。

microSD カード

SPI モードで使用可能な microSD カードが必要です。 最近のカードだと使えないものがあるかもしれません。

今回は以下のものを使用しました。

その他

回路

概ね 公式の回路図 と同じですが、バッテリー充電回路とオーディオ出力については 下記のようにアレンジしました。

バッテリー充電回路

充電回路は充電制御 IC (U1) のデータシートと スイッチサイエンスのモジュールの回路を参考にしました。

オーディオ出力

ダイナミックスピーカーを力強く鳴らすためにパワーアンプ (U4) を使用しました。

ボリュームによる音量調節とパワーアンプのアナログ入力のために Pico からの PWM 出力をローパスフィルタ (R3/C6) で 平滑化してアナログ信号にします。R4 はボリューム最大時に音割れしない程度に調節しました。

Pico の VSYS や 3V3OUT はリプル (変動) が大きく、 そのままオーディオの電源として使うと音声出力にノイズが乗ってしまいますので、 シリーズレギュレーター (U2) を使ってオーディオ用の電源 (AVCC) を作ります。

また、PWM 信号自体にも Pico のノイズが乗っており、 それをそのまま平滑して増幅するとノイズも一緒に増幅されてしまいますので インバーター (U3) を通して綺麗なデジタル信号にします。

このへんのノイズ対策をしないと、ジャリジャリキーキー鳴ってしまいます。

その他

上記以外は基本的にオリジナルの回路と同じですが、 拡張ポートについては今回は省略しました。

組み立て

LCD

Waveshare の 2inch LCD Display Module から Pico 用のピンソケットとスイッチを除去してディスプレイと LDO だけにしました。ホットエアが無いと綺麗に除去するのは結構難しいです。

基板

ユニバーサル基板を適当なサイズに切り、そこに LCD、Pico、MicroSD 基板、バッテリーを貼り付けました。電源スイッチ、ボリューム、LED はユニバーサル基板に実装しました。

キーパッド

キーパッドはゲームコントローラのゴム接点を流用しました。

基板側の接点は銅箔テープを貼り、ゴムパッドがズレないように ガイド を貼り付けました。 接点の接触を良くするため、導電ゴムが接触する部分を鉛筆でゴシゴシしておきました。

キートップもゲームパッドから流用するつもりでしたが、 高さが足りなかったので結局 3D プリントしました。

右側のボタンは下右左上の順に ABXY に割り当てます。

パワーアンプ基板

パワーアンプ基板は後から別基板を追加しました。

ケース

ケースは中身が一通り出来上がってからそれに合わせて CadQuery で設計 して、3D プリントしました。

ネジ止めするスペースが無いのでケースは爪で噛み合うようにし、 ダンボールをクッションにして基板を裏から押さえつけるようにしました。

組み立ての様子

起動

初回

一度起動した後は独自ブートローダを使って microSD カードからアプリを起動できますが、一番最初はそのブートローダを含んだ UF2 を PC から書き込む必要があります。

  1. PicoLibSDK のサイト に SD カード内のファイルをまとめた zip ファイルがあるので、それを展開して microSD カードに書き込んでおきます。

  2. BOOTSEL ボタンを押しながら PicoPad を PC に接続します (マスストレージデバイスとして認識されます)。
  3. microSD カードイメージの中の適当な UF2 のどれか (例: LOADER.UF2) を PC から書き込みます。

microSD カードからの起動

内部的には microSD カードから Pico の Flash にアプリを転送し、 Flash から起動する流れになります。

電源投入時にブートメニューが表示されるので、↑↓キーで UF2 を選んで A ボタンで起動します。 ブートメニューで Y ボタンを押すと、前回 Flash に転送されたアプリが起動します。