GH60互換ケースを使ったレバーレスジョイスティック付きゲームコントローラSparrowG21を作った

tl;dr

  • GP2040-CEというRaspberry Pi Picoを使ったゲームコントローラファームウェアで、レバーレスコントローラを作るのが流行っているようだよ
  • GH60互換ケースを使って、GP2040-CEを使ったレバーレスを作ってみたよ
  • ジョイスティック、RGB LED、OLED、Turbo LED、Board LED等の機能を使えるようにしたよ。
    • ジョイスティックはADCのピンに繋ぐよ
    • 電子工作で用いられるOLEDモジュールは2種類あってピン配置が違うことに戸惑ったよ
    • Turbo LEDはActive Low、Board LEDはActive Highだったよ
    • トッププレートにLEDを渡すためにQwiicソケットを使ったよ
  • キーケットで展示販売したところ、興味を持ってもらえたよ。現在もBOOTHで販売中だよ。

GP2040-CEというゲームコントローラファームウェア

GP2040-CEというRaspberry Pi Picoを使ったゲームコントローラファームウェアがあります。

gp2040-ce.info

GP2040-CEの特徴は以下の通りです。

  • Raspberry Pi Picoを使うため簡単に導入できる
  • 反応速度が速い
  • PC(XInput、DirectInput)、Switch、PS4/5に対応(ただしPS4/5は別途認証アダプタが必要)
  • ターボ、プロファイル、マクロなど、多くの機能が備わっている
  • Webブラウザで設定を変更可能(USB Ethernetバイスとして動く)

多くの機能が備わっているため、現在DIYゲームコントローラーを作るならばこれを使わない手はありません。Webブラウザで設定が変更できるというのも、ユーザは再ビルド等の手間がなくとても扱いやすいと言えます。

私自身は、過去に音楽ゲーム用コントローラDive9を作ったことがあり、この時にはProMicro(ATMega32U4)を使い、ファームウェアにはQMK Firmwareで作っていましたが、今作るのであればこちらになったと思います。

汎用自作キーボードケースで作ってみたくなり、作ったよ

私自身は格闘ゲームはしないのですが、よく2Dジャンプアクションゲームをしています。配信などを観ると、Dead Cellsのようなジャンプアクションであったとしても、PCキーボードでプレイする方がおられます。さらに最近マウスとキーボードで操作するRusted Mossをプレイしたため、キーボードベースのゲームコントローラーも悪くないのではないかと思うようになりました。

ただ、必ずしもキーボードだけで自分のプレイするゲームが完結できるかというとそうでもなさそうでした。Dead Cellsでも遠距離系のアイテムを拾ったときには照準のためのスティック操作が欲しくなります。前にプレイしていたローグレガシー2でも弓系のアイテムがあるとジョイスティックが必要になります。

さらに、多くのゲームコントローラでは左手が4ボタン(←↓→↑)になっています。しかし、Rusted Mossで親指のキーにはスペースバーによるジャンプを割り当てたいため、4ボタンでは不足します。よってソレを補うようなボタン配置が必要になりました。

結果として、以下のような配置になりました。

  • 左手中指で無理なく↑↓の2ボタンを入力できるようにして、左手で5ボタンを使えるようにすること
  • 上位スティックを備えること

例えば、Hollow Knightでは以下のような配置にしてプレイしました。

これに更に、A1、A2、S1、S2、L3、R3キー追加し、更に設定ボタンとして Turbo、Functionボタンを追加しました。これらのキーは操作の邪魔にならないところに置いています。

おまけで、薄型スイッチLOFREE x KAILH Full POM Low Profile Switchesを使うために、Kailh Choc v2とMXの両対応にしました。RGB LEDをなんとか入れたかったため、MXのみソケット対応として、薄型スイッチの場合にはスイッチを直接実装する使用としました。

GP2040-CEの機能のサポート

GP2040-CEの機能のサポートとして、いくつかPCBに実装を行いました。

基本のスイッチ

まず、GP2040はキーボードのようにボタンマトリックスを組むようにはなっておらず、各ピンがプルアップインプットとなっており、GNDとピンをスイッチで繋ぐことでボタンとして機能するようになります。そのように各ピンを配線しました。

プロファイル等Functionキー

これらはただスイッチを追加すれば良いため、そのようにしました。

ターボキーと、ターボ用LEDライト

ターボキー自体は普通のキーと同じようにGNDとピンをスイッチで繋ぎます。一方、ターボ入力がされていること表示するターボLEDがあります。ターボLEDはActive Lowとして振る舞うため、3V3-抵抗-LED-Pin の順に繋げば良いです。

ボードLED

Raspberry Pi Picoにはボード上にLEDが実装されており、これを現在のモードを表示するようなLEDとして利用することができます。ロゴの横にこのLEDを配置しました。

なお、このLEDはActive Highとなっており、ターボLEDと仕様が違うため注意が必要でした。

LEDをトッププレートに盛ってくる

LEDですが、PCB上にあると、その上にトッププレートがあるため、穴を経由してみることになり見づらくなります。そこで、Qwiic(SH1.0)ソケットを使って、PCBとトッププレートの橋渡しをして、トッププレート上にLEDを実装することにしました。

いつも使っているGrove(HY2.0)ではなく、Qwiic(SH1.0)を使ったのは、QwiicソケットであればトッププレートとPCBの間の3.5mmに高さ的に収まるためです。

ただ、Qwiicソケットの実装は1.0mmピッチのためそれなりに難度があったようです。実装にはフラックスが必須に思います。

ここで注文するケーブルを誤ってしまい、ピンの並びが同じになるように両端で表裏が逆向きにされたケーブルではなく、同じ向きになっているケーブルを購入してしまいました。この部分は2種類のソケットの実装箇所を用意しておき、どちらもケーブルも使えるようにしました。購入者が組み立て時に誤ってしまわないように、このQwiicソケット予め実装済みにしておきました。

ジョイスティック

ジョイスティックには、モジュールとしてStickPointVにも使っているスライド型ジョイスティックを使い、RP2040のADCで読み取らせます。

akizukidenshi.com

ADCを安定させるため、ジョイスティックのVCCのまわりにキャパシタを追加していました。

また、ジョイスティックのキャップとして、3Dプリンタで印刷したものを用意しました。上面のグリップ力をあげるために、マウス用のグリップテープを貼り付けました。

OLED

押しているボタンやモード等を表示できるOLEDを追加しました。OLED自体は電子工作でよく使われるモジュールです。

このOLEDですが、TaoBaoで購入しようとしたのですが、2種類の使用が存在していルことがわかりました。左端がVCCの旧版と、GNDの新版です。

これに対して、回路上ではジャンパで接続するようにしました。

結局、頒布版ではピンヘッダが予め実装されていないものが手に入る旧版を使いました。

このOLEDはトッププレートの窓から覗く形にしました。おかげで、モジュールっぽさがなくなって綺麗になったように思います。

Neo Pixel

キーを光らせるNeo PixelタイプのRGB LEDに対応しています。やはりゲーミングデバイスには光ることが必要でしょうと導入しました。

しかし、GP2040-CE v0.7.5からv0.7.7に変更したとき、光らなくなってしまいました。これは、Raspberry Pi Pico用のファームウェアを利用して、IO24を利用していることに起因しているようでした。Picoでは、IO24はUSBからの給電(VBUS)に使われます。おそらくそのためにINPUTに設定されてしまっていたと思われます。他のボードの設定を使っても良かったのですが、すると今度はBoard LEDがピンが異なっていて動作しなくなってしまいます。

これはGP2040-CEのファームウェアをセルフビルドすることで解決しました。これについては別途記事にしています。

74th.hateblo.jp

頒布版の工夫

頒布版では、RP2040 MCUはと、SMD部品は私の方で実装済みにしました。購入者には組み立て時に、スイッチソケット、OLED、ジョイスティックなど、大きい部品のみを実装すればよいようにしました。ただし、Qwiicソケットだけは、薄型スイッチを利用しようとした場合に利用できないため、実装して貰う形にしました。

RP2040の実装は大変でしたが、頑張りました。

キーケット後に追加PCBを発注した際には、手はんだ実装サポートアダプタをつくり、こちらで実装しかなり楽になりました。このアダプタについてはまた記事にします。

使用感はどうか?

現在、Hollow KnightのDLCをプレイしていなかったことに気づき、このデバイスを使ってプレイしています。慣れたゲームパッドよりも操作が難しいですが、面白く使っています。

最初は、反応するまでのポイントが近く設計されているスピードタイプのリニアスイッチDurock Splash Brothersを使っていたのですが、しっくりきませんでした。キーボードと違って、ゲームの時には「離すタイミング」が重要であり、離す時にどのくらい指をあげれば良いのか感触でわかりにくい気がしています。このために、タクタイルスイッチであるDurock Ice King Tactileに変えたところ、離すときの感触がタクタイルの山として得られて、良い感じに操作することができるようになりました。

だいぶプレイしましたが、十字キーをレバーレスとしてボタンで操作するのはまだ慣れません。↑↓を考えないと操作できない感じです。でも、楽しく操作できています。

キーケットで頒布したよ

こちらをキーケットでも頒布しました。キーボード以外の出品ということで、興味を持ってもらえるか心配でしたが、目に留まるときになる方が多かったようで、触らせてもらえますかと何度も声をかけていただきました。数も用意した6つのうち4つを販売できました。

現在もBOOTHで販売中

こちらの商品はBOOTHでも販売中です。これは、私の2Dアクションゲームをするために作ったデバイスですが、格ゲー等にも使えると思いますので、お試しいただければ嬉しいです。

74th.booth.pm