以下の内容はhttps://blog.bzl-web.com/entry/2023/12/19/024328より取得しました。


【自作PAD】FireBirdコントローラーの設定方法【RP2040】

概要

拙作のコントローラー『FireBird』の設定方法やよくある質問などをまとめました。
この記事に記載している機能は現時点での最新基板(v2.4)・ツール(v2.15)・ファームウェア(v2.24)のものです。
ツール・ファームウェアのDLはこちらからどうぞ。
blog.bzl-web.com

対応ハード

一通り動作確認済みです。
ここに記載していない海外版ハード、互換ハードなどでも動作する可能性があります。

DirectInput、XInputが使用できるほぼ全ての環境(PCやコンバータ類など)
ファミコン(拡張端子使用)
ニューファミコン
スーパーファミコン
ニンテンドウ64
ゲームキューブ
Wii(GCコンとして接続可能)
GCコントローラ接続タップ
PlayStation 3
PlayStation 4
PlayStation 5(PS4用タイトルのみ)
Nintendo Switch
Nintendo Switch 2

組み立て手順

こちらの記事にまとめてあります。
blog.bzl-web.com

初期設定

普通のコントローラーとして使う分には以下の設定だけ押さえておけば基本的には大丈夫です。
細かい所が気になったら他の部分も調整しましょう。

キャリブレーション

初期状態ではスティックのキャリブレーションが一切行われていない為、使用できるようにするにはコンフィグツールでこの設定を行う必要があります。
ツールはこちらからダウンロードしてください。
ツール上の『キャリブレーションを開始』を選択してキャリブレーションを開始します。

後はツール上の手順に従ってスティックの操作を行います。

入力角度の誤差補正

八角ゲートのシェルを使用している場合は『入力角度の誤差補正』も使用した方がいいかもしれません。
ゲートに合わせて入力していても入力値が↓の画像のようにズレてしまう際に補正を行う機能です。

こちらもツール上の手順に従ってスティックを操作すると補正が完了します。

跳ね戻りフィルター

スティックの跳ね戻りを抑制する機能です。
左右のスティックを弾くと弾いた瞬間の入力値がビューアに表示されます。
スライダーを右に動かすとフィルターの強度を上げることができます。
基本的には20くらいで十分だと思います。

振動モーター

組み立て時に振動モーターを接続した場合はこの部分を設定する必要があります。
初期設定ではモーターの種類が『振動なし』に設定されているため、実際に接続したモーターに合わせて変更してください。

コンフィグツール

Windows OS用の専用アプリケーションを使用し、GUI上でコントローラーの各設定を変更することができます。
変更した設定はコントローラー本体に記録されます。

基本キャリブレーション

コントローラーとして使用する上で必須となるスティックのキャリブレーションを行う項目です。
キャリブレーションを開始』ボタンを押下した後、画面上の指示に従ってスティックを操作してください。
複雑な操作は必要なく、概ね10秒程度で完了します。

また、デッドゾーンの調整もこちらで行います。
この値は0~2047の間で設定可能です。



内側デッドゾーン

スティックがニュートラル付近にある場合に、どの範囲まで入力を無効にするかを設定します。
値を大きくするとスティックのジッターや軸の緩みによる入力が無視され、意図しない動きを防ぎやすくなります。ただし、繊細な操作がやや難しくなります。
逆に値を小さくすると繊細な操作に敏感に反応しますが、スティックの劣化やノイズによって意図しない動きが起こりやすくなる場合があります。


外側デッドゾーン

スティックを最大まで倒した際に、どの範囲から最大入力として認識するかを設定します。
この設定値は外周からの距離を基準にしています。
値を大きくすると、スティックを完全に倒し切らなくても最大入力が得られます。
逆に値を小さくすると、スティックを完全に倒し切るまで最大入力になりません。正確な最大入力を必要とする場合に有効ですが、操作がやや鈍く感じることがあります。


ニュートラル座標補正

キャリブレーションを行わずに、手動でニュートラルポジションを補正する機能です。
また、これによってスティックのスケーリング形状が歪むことはほぼありません。

角度補正

入力角度の誤差を補正する機能です。
8方向の入力角度を基準に、ツール上で補正値を設定して意図した入力値に近付くようにします。
また、ツール上で自動設定することも可能です。『入力角度の誤差補正』ボタンを押した後、ツール上の指示に従って操作すると自動で適切な値が設定されます。

応答特性

ゲームコントローラーの特性を深く理解している人向けの機能となります。
基本的にデフォルト設定でも問題なく使用可能ですが、細かい部分で操作時の感覚を調整したい場合はこの設定を使用します。



感度カーブ

物理的なスティック入力に対して、ゲーム上に反映する入力がどのように変化するかの反応曲線を調整する機能です。
デフォルトの設定はリニアで、入力値をそのままゲーム上に反映させるようにしています。


ベース感度のリニア補正

FireBirdで使用しているGinfullのTMRセンサーから計測したデータを基準に、感度カーブをリニア化する補正を掛けます。
センサーによって若干の個体差は生じるため、100%リニアな感度カーブに補正できる保証はありません。


スケーリング形状

デフォルトは真円形状に設定されていますが、主にFPSなどのゲームでは斜め方向の入力が弱く感じる場合があります。
この値を調整することで、四角形のスケーリングに近付けるような調整が可能となります。PS系コントローラーなどでは縦横25くらいの形状となる場合が多いです。


RCフィルター

磁気センサーのスティックにはジッターを抑えるために、抵抗やコンデンサといった電子部品を使用したRCフィルターという回路が内蔵されています。
これは電気的なノイズを入力に反映させないために必要なものですが、機敏なスティック入力を必要とするゲームではこの影響で入力が鈍っているように感じる場合があります。
その場合、このフィルターの値をマイナス方向に設定することで、回路上に実装されているRCフィルターを打ち消すような効果が得られます。

つまり、この設定をマイナスに設定する場合は「ソフト側の補正をOFFにする」のではなく、「磁気センサー内で行っている補正と逆の補正を掛ける」という処理を行います。
これによってセンサーが出力しようとした本当の数値を復元して入力に反映することができるようになり、スティックを操作する際の初動の速度が上がるような挙動になります。

逆に、スティックのジッターが大きく感じる場合はこの値をプラス方向に大きくすることで、RCフィルターの効果を増幅させることができます。


マイナスデッドゾーン

デッドゾーンの調整ができない、もしくは0に設定できないようなゲームでもデッドゾーン0に設定した時のような入力感覚にしたい場合に使用する設定です。
この値を大きくすると、スティックを倒した際にゲーム内で反映される最低入力値が大きくなるため、ゲーム側のデッドゾーンに合わせて設定することで繊細な入力が反映されるようになります。


スティック分解能

スティック入力値の精度を8bitから12bitの幅で指定することができます。
無制限に設定した場合、計算時の端数も全てスティック入力値に反映されます。


指定方向の入力無効化

上下左右4方向に対して入力を無効化することができる設定です。

ジャイロ

コントローラーに内蔵されているジャイロセンサーの設定を行う機能です。
スティック入力への変換設定もこの項目で行います。

初期状態ではキャリブレーションが行われていないため、ドリフトのような現象が発生する場合があります。
コントローラーを平らな場所に置いた状態で『ジャイロキャリブレーション』ボタンを押すとLEDが黄色に点灯するので、それが消えるか元の色に変わるまで待機してください。

読み取りを行うセンサーには純正のSwitchプロコンでも使用されているLSM6DS3を使用しており、制御は基本的に純正Switchプロコンと同じ方式で行われます。
ジャイロセンサーをネイティブでサポートしているUSBデバイスモードは以下の3つです。
その他のモードではスティックエミュレート機能を使用してスティック操作に割り当てる必要があります。
・Switch Proコントローラー
DUALSHOCK 4
・SInput


スティックエミュレート

ジャイロ操作をスティック入力に割り当てる設定です。
ジャイロ入力に対応していないゲームを遊ぶ場合や、ジャイロのネイティブサポートがないUSBデバイスモードに設定している際に使用します。


使用するスティック

左右どちらのスティックにジャイロ操作を割り当てるかを指定します。


使用方法

特定キーでのトグル操作か、特定キーを押している最中に使用できる仕様にするかを指定します。


感度

共通設定の感度とは別に設定可能です。
スティック入力に変換する都合上、実際のジャイロ操作とは入力感度が大きく変わる場合があるため、この設定を使用して意図した入力に近付けることができます。


出力の始点

ジャイロの入力値をスティック入力値に変換する際、スティック入力としての始点を指定します。
ゲームによっては固定のデッドゾーンが入っていたり、ニュートラルの感度が低くなっている場合があるため、ジャイロの微細な入力を意図した通りに反映させるために必要になる場合があります。

キーコンフィグ

対応しているハード別にキーコンフィグを5つまで設定することができます。
また、キー入力に関係する各種機能の設定もこちらで行います。



トーナメントモード

主に大会向けの機能となります。
この機能が有効になっている際はプレイヤーランプが点滅し、「トーナメントモードで無効化するボタン」のリストにあるボタンが無効化されます。
「ホームボタン長押しでトーナメントモード切替」を有効にすることでコントローラー単体でこの機能をON/OFFを切り替えることができます。


XInput使用時にA/B、X/Yを反転する

Xboxコントローラーと任天堂のコントローラーではこのボタンの位置が反転しているため、ゲーム内の表記と実際のボタンの見た目を統一させたい場合に使用する機能です。


デバウンスタイム

ボタンにマウススイッチやタクトスイッチなどを使用している場合、スイッチの劣化によりチャタリングという現象が発生する場合があります。
数値を大きくすることで、ボタンが押されてからゲーム内で離されるまでの猶予時間を設定することができます。
デバウンスアルゴリズムには入力遅延に影響しないEagerというものを採用しています。(参考:https://docs.qmk.fm/feature_debounce_type)

振動モーター

使用している振動モーターの種類、振幅といった振動関連の設定を行う項目です。

LEDカラーマップ

LED関連の設定を行う項目です。
ライティングパターンや色、光量などの設定が可能です。

跳ね戻りフィルター

スティックを弾いた際に反対方向への誤入力が発生する「跳ね戻り」という現象をフィルタリングする機能です。
また、この画面上でスティックを弾くと入力値が波形で表示されます。この波形を実際に確認しながらフィルターの値を設定することができます。



簡易設定

0~100の数値でフィルターの強度を設定することができます。0に設定した場合フィルターは完全に無効化されます。


詳細設定

跳ね戻りを検知する感度と検知後に掛けるフィルターの強度を設定することができます。
また、RCフィルターによる跳ね戻りの増幅を計算処理に含める割合を指定することができます。

バイス設定

USBデバイス、Switchの認識カラー変更といった設定を行う項目です。



USBデバイスモード

どのUSBデバイスをエミュレートするかを指定できます。
実際に指定できるのは以下のデバイスとなります。
また、Switch用のモード以外では全てポーリングレート1,000Hzで動作します。
・Switch Proコントローラー
・XInputコントローラー
DirectInputコントローラー
GCコントローラ接続タップ
DUALSHOCK 4

GCコントローラー接続タップに設定した状態ではコンフィグツール上での認識が行えません。


USBホストチェック

接続した機器をコントローラー側で認識し、適切なUSBデバイスに自動的に切り替えて通信を行います。
Switch、Switch2、PS3PS4、PCを自動で識別できることを確認していますが、もし不具合が発生する場合はオフにしてください。


認識カラー設定

Switch接続時に認識されるカラーを設定できます。


キーコマンド

コントローラー単体でのキー入力操作で設定変更を行うことができます。
実験的な機能となるため、詳細な説明は省きます。
・L+R+B+Y 追加ボタンへのリマッピング
・L+R+左スティック押し込み+右スティック押し込み スティックキャリブレーション
・L+R+[+]+[-] ジャイロキャリブレーション

ファームウェア書き込み

既にファームウェアが書き込まれている場合、ツール側で最新ファームウェアへの自動更新が可能です。
そのため、下記手順はデバッグ版のファームウェアを使用したい、もしくは自動更新が上手くいかない方向けの説明となります。

まずはこちらから使用したいファームウェアの.uf2ファイルをダウンロードしてください。
ファイル置き場 - なるほどえたきちのブログじゃねーの

特定のボタンを押しながらPCに接続するとブートローダーが起動し、『RPI-RP2』というドライブが認識されます。
ここに『FireBird vX.XX.uf2』(X.XXの部分はバージョンによって異なります)という名前のファイルをドラッグ&ドロップ等で書き込むとコントローラーとして再接続されます。
ブートローダーを起動するためにどのボタンを押す必要があるかは種類によって変わりますので、以下のリストを参照してください。

Switchプロコン型 左スティックボタン(L3)
GCコン型 STARTボタン
DUALSHOCK 4型 PSボタン

ドライブ認識時は基本的に新しいウィンドウが立ち上がりますが、ウィンドウが出てこない場合はエクスプローラーのドライブ一覧から直接開いて書き込んでください。


よくある質問

スティックの遊びが大きい、ジャリジャリする

Gulikitスティックを使用した古い基板の場合、使用による劣化でそのような症状が発生することが多いです。
こちらはスティックボックスを変更することで解決が見込めます。


スリープの解除、本体の起動ができません。

これらの機能は純正プロコンに使用されている無線ICの固有機能なのでFireBirdでは機能しません。


ABXY、十字キーが硬いです。

完成品を購入した場合に使用されているラバーパッドが純正品でないと感触が変わる場合があります。
殆どは純正品より硬く、よりクリック感の強い押し感になるので違和感を感じた際は購入元のショップ等に相談した方が良いかもしれません。
自分で分解ができる場合は純正品に交換してしまうのも選択肢に入ります。


スティックが正常に動作しません。(動かない、ドリフトする、操作が反転するなど)

スティックのキャリブレーションがされていない初期状態では正常に動作しないため、組み立て後にPCツールを使用してキャリブレーションを行って下さい。


使用中、接続が切れてしまうことがあります。

USBポートの劣化・汚れが原因です。
接点洗浄剤を吹き付けるか、それでも改善しない場合はハードワイヤリングを検討してください。
ポートの劣化は使用環境や操作方法等に強く依存するため、基板買い換えで解決を図るのは推奨しません。(恐らくすぐに再発してしまうかと思われます)

こちらは現状報告がないため断定はできませんが、ハードワイヤリングをしていても問題が起こる場合はドックのUSBポート側が原因である可能性が高いです。
もし異常な頻度で接続が切れる(1分も接続が維持できない、など)場合は他の原因も考えられるため、ハードワイヤリングを施工したショップ等に一度見て頂いた方がよろしいかもしれません。


SwitchとのUSB接続で遅延は発生しませんか?

1F以上の追加遅延などが発生することはありません。
Switchで使用する際は無線接続時の純正Proコントローラー、ゲームキューブコントローラーなどと同等の応答速度で動作します。

純正有線プロコンに遅延が入ることから、USB接続=遅延があると考えている方が一定数いますが、これは厳密には異なります。
遅延の原因はコントローラー内部でキー入力情報を取得してから送信するまでの処理にあり、純正プロコンの場合はここで1Fの遅延が生じています。
純正プロコンはキー入力情報の取得を含むほぼ全ての処理を無線チップで行っており、有線接続時のみUSB通信処理を別のチップで行う仕様となっています。

そのため、無線チップからUSB通信用のチップにキー入力情報などを送信する必要があり、ここで1Fの遅延が生じているという訳です。
USB通信処理を含む全ての処理を1つのチップで行っているFireBirdでは上記問題は発生しません。


+/-/ホーム/キャプチャ/十字キーが反応しません。

トーナメントモードに切り替わっている可能性があります。
ホームボタンを3秒間長押しすることでこの機能のON/OFFを切り替えることが可能です。

また、トーナメントモードが有効になっているかどうかはプレイヤーランプが点滅しているかどうかを確認すると分かります。(有効時は点滅します)


ファームウェアの書き込みができません。

何もボタンを押さずにPCやSwitchに接続してコントローラーが認識されるのであれば、ファームウェアの書き込みは成功しています。
ブートローダーのストレージに書き込んだファイルが再接続時に見えないのは仕様です。


FC/SFCに繋げた際にフリーズすることがあります。

一部のゲームではコントローラー抜き差し時に挙動が不安定になることがあります。(SFCでは再現できていませんが、画面に一瞬ノイズが入ることがありました)
ゲーム中にコントローラーの抜き差しは行わないようにしてください。


N64に繋げた際に認識しないことがあります。

ゲームによっては起動時にコントローラーを認識しないケースがあることを確認しています。
その場合は本体のリセットボタンを押してください。


GCコン接続タップで繋げるのとUSB接続はどちらが良いですか?

通常のUSB接続の方が良いです。
GC用のRETRO-CケーブルはGC/Wiiなどでの使用を想定しています。
Switchでも使用は可能ですが、理論上は直接のUSB接続の方が遅延が少なくなります。(体感できるほどの差ではないと思います)


Switchとの有線接続ができません。

バイスモードが「Switch Proコントローラー」になっている場合、Switch本体設定から「Proコントローラーの有線通信」をONにする必要があります。

もし大会などで不特定多数の本体に繋げて使用する場合は、デバイスモードを「DirectInput」として接続し、振動を使用する場合のみSwitch本体の設定を切り替えてから再度Proコントローラーとして接続することを推奨します。

特定のデバイスモードでの接続は以下の操作で行えます。

DirectInput
Bボタンを押しながらUSB接続

Proコントローラー
Aボタンを押しながらUSB接続

また、上記操作時にHOMEボタンを同時押しすることで根本的なデバイスモード設定を切り替えることが可能です。
設定切り替え後は何も押さずに接続した場合であっても設定したデバイスモードで接続されます。


Switchとの無線接続ができません。

有線接続のみに対応したコントローラーとなるため、無線接続はできません。


ジャイロ機能は純正プロコン同様に使用できますか?

FireBirdでは純正Proコントローラーに搭載されているジャイロセンサーと同一のものを使用しています。
そのため、感度やジッターなどの精度に関しては純正Proコントローラーと同等と考えていただいて差し支えありません。


PS5用タイトルでも使いたいです。

現段階でPS5用の通信プロトコルを実装する予定はありません。
実装しても更新で使い物にならなくなる可能性があるため、対応優先度はかなり低めになると思います。
どうしても使用したい場合はコンバータ類の導入を推奨します。


PC接続時、ゲーム内で認識しません。

PC接続に使用しているデバイスモードがプレイするゲームに対応しているかどうかをご確認ください。
特にSwitch ProコントローラーはNintendo Switch用のプロトコルなので、全てのゲームでサポートされている保証はありません。


PCで使用するのにおすすめのUSBデバイスモードはありますか?

推奨するのはXInputモードとDUALSHOCK 4モードです。
XInputモードはPCで使用する上で最も互換性の高いモードになりますが、一部機能がネイティブで使用できない点に注意してください。
DUALSHOCK 4モードであればコントローラーの機能をほぼ全てサポートしています。
どちらも1,000Hzのポーリングレートで動作します。


入力遅延はどうなっていますか?

2種類の入力遅延テスト(GPDL・inputlag.science)を実行し、主流のコントローラーとの遅延比較を行っています。
ボタン入力とスティック入力に遅延の差はほぼありません。
GPDLはポーリングを完全なリアルタイムで行うように修正しているため、公式版とは計測結果が異なりますがご了承ください。

GP2040-CE、Razer Wolverine V3 8Kなどと比較しても遜色のない結果になっているかと思います。
これは入力レポートの変化したタイミングで即座にパケット送信を行うことで実現しているもので、入力レポートが常に変化する状況だと1ms台程度に落ち着きます。
例えば、スティック入力を無効化するかデッドゾーンを設定して入力値が変動しないようにすることでGP2040-CEと同等の速度で入力が反映されるようになります。

フォーク版GPDLの修正内容はこちらで確認できます。
修正の効果として、DirectInputで接続する場合はinputlag.scienceの手法とほぼ同一の結果が計測されるようになっています。
XInputなどの他のプロトコルではOS側でオーバーヘッドが入るようで、接続先のホスト機器によって結果は変動するようです。

ご要望など

Discordサーバーにて随時受け付けています。
FireBirdコントローラーの回路基板・ソフトウェアは完全に私個人で開発しており、物理的な制約に縛られないものであれば基本的にソフトウェア側で反映可能です。
今のFireBirdコントローラーが持っている多くの機能はユーザーからのフィードバックを参考にして実装されたものです。
「こういった機能があればこういったことができる」といった要望は大歓迎ですので、お気軽にお声掛けいただければと思います。
(即座に反映できることを保証するものではないので、その点はご了承ください)
discord.com

おまけ

LRボタンのマウスクリック化に関しての質問が最近増えてきたので、私が製作する際に使用していたデータを置いておきます。
プリントしたプラグをLRボタン裏の穴に差し込んで使用します。
使用するプリンターやフィラメント等の相性によっては上手くいかない可能性もありますが、その辺は上手く調整して使ってください。
https://bzl-web.com/file/3d/firebird_d2ls_lr.stl

ABXYボタンのマウスクリック化に関してはボタンの高さをどうするか、遊びをなくすかどうかによって手順が結構変わってきます。
ボタン側の大幅な削り加工が必要になるケースもあるので、こちらに関しては気合でなんとかしましょう。




以上の内容はhttps://blog.bzl-web.com/entry/2023/12/19/024328より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14