😎

Rapsberry Pi Picoを使った自作テンキー(Shotgun チェリーパイ)を左手デバイスにするRapsberry Pi Pico

2024/04/27に公開

Raspberry Pi Picoを使って、自作のテンキーを作りました。

自作テンキーをカスタマイズすることで、キー数以上のキーの割当が可能です。これにより多彩な操作を簡単に実行できるようになります。

Shotgun チェリーパイとは

Shotgun チェリーパイとははやしたろうさんが設計された自作テンキーです。

Raspberry Pi Pico上にprk firmwareという自作キーボード向けのファームウェアを使用したキーボードです。

ロータリーエンコーダーもつけることが可能で、キー配列は自分でデザインできます。

Raspberry Piは品薄でほとんど手に入りませんが、Picoは入手可能です。

購入先は、自作キーボードで有名な遊舎工房で購入しました。

自作キーボードのメリット

最大のメリットは、カスタマイズできることです。

キー配列のカスタマイズ

通常のキー(u1)、Enterキーに使用する2つ分のキー(u2)、ロータリーエンコーダを搭載して、自由に設定することができます。

ロータリーエンコーダは5つまで設定できます。

キースイッチのカスタマイズ

メカニカルキーボードの醍醐味は、キースイッチの種類を選べることです。
自分の好きな軸を選ぶことができます。軸によって、打ち心地は全然違います。

キーキャップのカスタマイズ

キーキャップによって、見た目が全く変わります。

自作キーボードのデメリット

費用が高くなることです。
自作キーボードはメカニカルキーボードになるので、通常のキーボードよりも高いです。
メカニカルキーボードでも自作のほうが高くなる可能性が高いです。
ただし、デメリットとしては、それくらいしかありません。

作り方

自分に追加で購入する部品は以下のとおりです。

  • Raspberry Pi Pico
  • キースイッチ(CherryMX互換)
    自分で作るキーのデザインによって数が変わります。
  • キーキャップ(CherryMX互換)
  • Micro-USBケーブル

オプションで以下も可能です

  • ロータリーエンコーダ
  • コンスルー20ピン
  • スタビライザー
    U2のキーをつけるときにおすすめです。
  • LED(SK6812MINI-E)
    キーボードを光らせることができます。

ファームウェア書き込み

Raspberry Pi PicoのBOOTSELボタンを押しながら、USBをパソコンに接続します。
RPI-RP2というUSBメモリとして認識されます。

PRKファームウェアをダンロードして、Raspberry Pi Picoに書き込むと「RPI-RP2」から「PRK Firmware」というドライブに変わります。

「PRK Firmware」には以下の2つのファイルが入っています。

  • keymap.rb
    キー配列の定義が書かれたファイルで、Rubyで書かれています。
    ロータリーエンコーダの設定をかけるときは、このファイルを変更する必要があります。
    Remapを使用しない場合は、このファイルですべてのキー配列を指定することができます。

  • prk-conf.txt
    Remapというキー配列を変更するWebアプリを使用することができるようになります。

組み立て

組立方法は、設計者のはやしたろうさんのページが一番わかり易いです。

LED、ダイオード、リセットスイッチ、ソケットをはんだ付けします。
LEDやダイオードの向きに気をつけてはんだ付けしてください。
初めての自作キーボードの作成だったので、3時間くらいかかりました。

キースイッチをつけて、キーキャップをつけると完成です。

キー配列のカスタマイズ

今回は、以下のように2レイヤーを実装しました。
Remapを使えば、コードの変更なしにキー配列を変更することができます。
デフォルトレイヤーとLED操作用は、もともと書かれていた配列です。
今回はネットサーフィン用の配列を用意しました。

デフォルトレイヤー

ネットサーフィン用

LED操作用

ネットサーフィン用の配列は、左タブ、右タブの移動など、ネットサーフィンで使うものを割り当てました。

キーの割当

キーの割当はRemapから設定します。
keymap.rbを編集することで可能ですが、Remapの場合、直感的に設定できるのでより簡単です。

Remapに接続

「START REMPA FOR YOUR KEYBOARD」を選択します。

「+KEYBOARD」を設定します。

キーボードを接続していると、認識してくれます。
「接続」を選択します。

キー割り当て

割り当てたいキーを自由に設定することができます。
CtrlやShiftなどの修飾キーを組み合わせて設定することも可能です。
下の方に表示されている文字をドラッグするして、キーに設定することも可能です。

レイヤーの作り方

Shotgunチェリーパイでは、最初から4つのレイヤーを用意されています。

kdd.add_layerでレイヤーを定義しています。
defaultレイヤーにテンキーが実装されています。
レイヤー1は今回、自分で追加しています。
レイヤー2は定義なしです。
レイヤー3がLEDを操作するレイヤーになっています。

PRKファームウェアでは、Remapでのレイヤーを切替えるキーまでは指定できないので、
keymap.rbに定義する必要があります。

# KEY LAYOUT
kbd.add_layer :default, %i[
  KC_EQL  KC_KP_SLASH KC_KP_ASTERISK KC_KP_MINUS  KC_A KC_B
  KC_KP_7  KC_KP_8     KC_KP_9        KC_KP_PLUS   KC_C KC_D
  KC_KP_4  KC_KP_5     KC_KP_6        VIA_FUNC4   KC_E KC_F
  KC_KP_1  KC_KP_2     KC_KP_3        VIA_FUNC1    KC_G KC_H
  KC_KP_0  KC_COMMA    KC_KP_DOT      VIA_FUNC1    KC_I KC_J
]
kbd.add_layer :VIA_LAYER1, %i[
  KC_NO  KC_NO  KC_NO  KC_NO   KC_NO  KC_NO
  LGUI_LBRACKET  LGUI_T  LGUI_RBRACKET  KC_NO   KC_NO  KC_NO
  LCTL_LSFT_TAB  KC_KP_EQUAL  LCTL_TAB  KC_NO   KC_NO  KC_NO
  KC_NO  LGUI_W  KC_NO  KC_NO   KC_NO  KC_NO
  KC_KP_PLUS  KC_NO  KC_NO  KC_NO   KC_NO  KC_NO
]
kbd.add_layer :VIA_LAYER2, %i[
  KC_NO  KC_NO  KC_NO  KC_NO   KC_NO  KC_NO
  KC_NO  KC_NO  KC_NO  KC_NO   KC_NO  KC_NO
  KC_NO  KC_NO  KC_NO  KC_NO   KC_NO  KC_NO
  KC_NO  KC_NO  KC_NO  KC_NO   KC_NO  KC_NO
  KC_NO  KC_NO  KC_NO  KC_NO   KC_NO  KC_NO
]
kbd.add_layer :VIA_LAYER3, %i[
  KC_NO  RGB_HUI  RGB_HUD  KC_NO      KC_A KC_B
  KC_NO  RGB_SAI  RGB_SAD  KC_NO      KC_A KC_B
  KC_NO  RGB_VAI  RGB_VAD  VIA_FUNC4      KC_A KC_B
  KC_NO  RGB_SPI  RGB_SPD  KC_NO  KC_A KC_B
  KC_NO  RGB_MOD  RGB_RMOD KC_NO  KC_A KC_B
]
# レイヤーの切り替え方法
kbd.define_mode_key :VIA_FUNC1, [ :KC_KP_ENTER, :VIA_LAYER1, 150, 150 ]
kbd.define_mode_key :VIA_FUNC2, [ nil, :VIA_LAYER2, 150, 150 ]
kbd.define_mode_key :VIA_FUNC3, [ nil, :VIA_LAYER3, 150, 150 ]
kbd.define_mode_key :VIA_FUNC4, [ nil, :VIA_LAYER3, 150, 150 ]

レイヤー定義の解説

 kbd.define_mode_key :①VIA_FUNC1, [ :②KC_KP_ENTER, :③VIA_LAYER1, 150, 150 ]

各レイヤーの切り替え方法は、kbd.define_mode_keyで定義しています。

①でレイヤーを切り替えるキーを指定します。

②はタップしたときに動作するキーを書きます。
KC_KP_ENTER(テンキーのEnter)となります。

③は対象のキーを入力し続けた場合の挙動です。
つまり、VIA_FUNC1を押している間は、VIA_LAYER1にレイヤーが変わることを意味しています。

ロータリーエンコーダの設定方法

ロータリーエンコーダは最大5つ設定可能です。今回は1つ設定しました。

以下は、ロータリーエンコーダ1の設定方法です。

回転 割当キー
時計回り(clockwise) 方向キーの右(KC_RIGHT)
反時計回り(counterclockwise) 方向キーの左(KC_LEFT)
encoder_1 = RotaryEncoder.new(27, 28) #27,28はPinの場所
encoder_1.clockwise do
  kbd.send_key :KC_RIGHT #時計回りのときの入力したいキーを指定する。
end
encoder_1.counterclockwise do
  kbd.send_key :KC_LEFT #反時計回りのときの入力したいキーを指定する。
end
kbd.append encoder_1

kdd.send_keyの引数に入力したいキーを設定するだけで、ロータリーエンコーダのキーを設定することができます。

まとめ

Shotgun チェリーパイは、キー配列のカスタマイズも簡単で、自分好みのキーボードに仕上げていくプロセスも楽しいです。
使いながら新たな使い方を自分で考えていくプロセスも楽しいです。
ビルドガイドが丁寧なおかげで、初めての自作キーボード作成でも簡単に作成することができます。
prk firmwareを理解できれば、より自由にカスタマイズできそうです。

Discussion