Raspberry Pi Picoでアケコンのボタンを光らせる②
Kaimana Mini LED Driverっぽいものを作ってアケコンのボタンを光らせる②
はじめに
前回の記事からかなり時間がたってしまいました。すみません…。
というのも、前回作成したPCBに「Fighting-Light-Pico」のファームウェアを導入して「Brook Universal Fighting Board」に取り付けた場合にUFBがコントローラーとして認識されなくなるという致命的な問題が発生したため、原因調査と対策方法を検討に時間を取られてました。
今回はその問題の原因と対策方法について記載しようと思います。技術的なお話になってしまうので、興味のない方は読み飛ばしちゃっても問題ないと思います。
ちなみに「Fighting-Light-Pico」の導入ドキュメントにも回避策が最近追記されていました。
問題の原因
ラズパイPicoは起動時にGPIOのピンの初期状態が「LOW」になっており、「Fighting-Light-Pico」のプログラムで各ピンの状態を「HIGH」(プルアップ)に変更しています。一方、UFBは各ボタンのピンの状態が「LOW」になっているとボタンが押されたと認識します。
それで今回の問題なのですが、UFBとPIcoを同時に起動した場合、ソフトウェアでピンの状態をプルアップ状態に変更するのがUFBの起動完了よりも遅く、UFBですべてのボタンが押された状態で起動されたと認識されてしまうのが問題の原因となります。
UFBはUSBの接続時に特定のボタンを押しておくことで対応機種を切り替えることができるのですが、Picoのピンの状態変更が遅くて接続しているすべてのボタンが押された状態でUFBが起動されてしまうので正しい対応機種として起動できないのです。
Picoのソフトウェアでのピン状態の変更は高速ではないため、ハードウェアによる対策が必要になります。
対策方法
「Fighting-Light-Pico」の導入ドキュメントではManualMode設定に使用されるボタンのGPIOと3v3(out)に抵抗を入れてつなげることで起動時のGPIOの状態を無理矢理に「HIGH」にしていますが、自分はラズパイPicoの起動タイミングを遅らせる方式で問題を回避しました。
PCB再設計
UFBの5V出力とラズパイPicoの5V入力の間にパワーオンディレイ回路を追加してみました。この回路でラズパイPicoの起動を3秒程度遅らせています。
パワーオンディレイ回路図は以下のような感じです。
プロトタイプ版のPCBを作成して動作チェックをしてみましたが、問題は回避できたようなので作業を進めていきます。
Raspberry Pi Picoでアケコンのボタンを光らせる①
Kaimana Mini LED Driverっぽいものを作ってアケコンのボタンを光らせる。
はじめに
アケコンのLEDを光らせるためのパーツとしてKaimana Mini LED Driver & PCB 8 Button Kitがあるのですが、制御用のファームのソースコードの入手やLEDの色を設定するWEBサイトが閉鎖されており導入が非常に困難な状況です。
自分もKaimana Mini LED Driverをアケコンに導入してみましたが販売元にサンプルソースがなくGitHubから取得したり、ソースコード解析とかすごく面倒でした。
今回、UFBにRaspberry Pi Picoを接続してアケコンのボタンを光らせることができる素敵なファームウェア(Fight-Lights-Pico)を見つけたので、このファームを利用してアケコンのボタンを光らせてみようと思います。
※本ブログを参考にする場合は自己責任でお願いします。
必要なもの
- Brook Fighting Board(20PINのピンヘッダが必須)
- Raspberry Pi PicoまたはRaspberry Pi Pico互換基板
- 個別アドレス指定可能なRGB LEDとして知られるNeoPixel RGB WS2812/WS2812b/WS2812e
- LEDを接続するためのワイヤー
- はんだごて等の工具
導入方法
配線方法からファームウェアの導入方法まで導入方法は以下のサイトで詳しく説明されてます。もちろん日本語ではありませんが…。
上記のドキュメントに従って導入すればアケコンのボタンを簡単に光らせることができると思います。
以上、ファームウェアの紹介記事なのですがそれだけではアレなので、上記のファームウェアを利用して簡易的なKaimana Mini LED DriverのようなPCBを設計してアケコンに導入してみたいと思います。
PCB設計
下記の接続図を参考にしてKiCADで回路を設計します。
回路図は以下のような感じになります。
オリジナルのRaspberry Pi Picoだと基板のサイズが大きくなってしまうので互換基板の「RP2040-Zero」を採用してみました。
基板はKaimana Mini LED Driverと同様にUFBの20PINのピンヘッダに取り付けます。
LEDの出力コネクタは4PINのPHコネクタにしました。
PCBのイメージはこんな感じになります。
次はボタンに取り付けるLEDモジュールのPCBを設計します。
回路図は以下のような感じになります。
Kaimana J2 RGB LEDと互換を保つため、入出力のインタフェースは同じ形式に設計しました。
LEDモジュールはKaimana Mini LED Driverに接続して利用することも可能ですし、Kaimana J2 RGB LEDと混在して使用することもできます。
PCBのイメージはこんな感じになります。
今回は「CROWN/Samducksa SDB-202C」の30mmと24mmのボタンに取り付けることを想定した基板になります。
以上がPCBの設計となります。
設計した基板はJLCPCBに発注してみました。
アケコンへの導入方法についてはPCBの完成後にその②で説明したいと思います。
連射機能追加版のGP2040(PicoAnn)の導入手順
Raspberry Pi Pico用のゲームパッドファームウェアGP2040に連射機能を追加してみたので、導入方法と操作方法をブログに記載します。
はじめに
Raspberry Pi Pico+GP2040で安価なアケコン用基板として運用可能なのですが、GP2040のファームウェアには連射機能がありません。最近は連射も必須ではなくなってきましたが、必要なこともあるのでGP2040に連射機能を追加してみました。
ファームウェアのダウンロード
連射機能が追加されたファームウェアは以下のGitHubからダウンロード可能です。
- 右側のReleaseのv0.4.3.2をクリック
- GP2040-PicoAnn_v0.4.3.2.uf2を右クリックして名前を付けてリンクを保存を選択して任意のフォルダに格納
ファームウェアのインストール
Raspberry Pi Picoへファームウェアをインストールする手順は以下の通りです。
- Raspberry Pi PicoのBOOTSELボタンを押しながら、コンピュータに接続します。
- ファイルエクスプローラにRPI-RP2という名前の新しいリムーバブルドライブが表示されます。
- ダウンロードしたuf2ファイルをリムーバブルドライブにドラッグ&ドロップしてください。これでボードがフラッシュされます。
- フラッシュ完了後にUSBが再接続され、XBOX360のコントローラーとして認識されます。
PINアサイン
基本的なピンアサインはPico Fighting Boardと同じです。
TURBOボタンはGP28とGNDの端子に接続してください。
操作方法
TURBOボタンの操作方法は以下の通りです。
■連射機能のON/OFF
TURBOボタンを押しながら連射を設定したいボタンを押してください。設定後、同じ操作で連射を解除することができます。
■連射速度の調整
TURBOボタンを押しながらUPキーを押すと連射速度がUPします。TURBOボタンを押しながらDOWNキーを押すと連射速度がDOWNします。
OLED表示
TURBO機能のOLED表示の説明です。
T{連射速度}-[TURBO設定ボタン数]
連射速度の測定結果
Swatch++で連射速度を確認してみました。ほぼ設定どおりの連射スピードになると思います。
GP2040の連射機能の連射速度を調整してShwatch++で計測してみた。
— あん (@alirin222) 2022年4月29日
調整はこんな感じでいいかな。
最大連射(60連射)の上限はもう少し上げてもいいかも。 pic.twitter.com/bvdFE6ZsGG
最後に
詳細なインストール手順は他の人がWebに上げている手順を参考にしてください。GP2040の基本的な機能は https://gp2040.info/ を参照してください。
正式な連射機能はGP2040のオリジナルのファームウェアがそのうち実装してくれると思うので実装された場合はオリジナルのファームウェアを使ってください。