⌨️

RP2040を使って久々の自作キーボードを作った記録

2022/01/06に公開

はじめに

朝槻楓と申します。
かれこれ2019年初頭くらいから自作キーボードを設計したり作っています。
普段使いはシンメトリカルスタッガードと呼ばれる左右対称に傾斜している32キーほどの自作キーボードを利用しています。
この記事で作成しているキーボードも上記のレイアウトで設計されているものです。
なお、あくまで作成記録なので利用ソフトの使い方や、詳細手順は記載しません。
(経緯や手順の記憶を残すためのものです)

成果物

作成記録なので、最初に成果物の写真と簡単にスペックを記載しておきます。

Spec

  • レイアウト:シンメトリカルスタッガード
  • キー数:32
  • 制御ハード:Seeed XIAO RP2040
  • 制御ソフト:PRK Firmware(0.9.9)

作成経緯

作成に至った理由を記載します。

RP2040を使ってみたかった

読んだまま・・・では身も蓋もないのでもう少し掘り下げます。

  • ProMicroの値上りとか入手性とかモゲマイクロ対策面倒とか
    昨今の半導体不足やら何やらで手に入り難くなっていたり値上がりしたり・・・
    あと俗にいうモゲマイクロ対策を作るたびにするのが面倒になったという。
    とはいえ、自分の為だけに作るのに基板に直付け・PCBAはしたくありませんでした。
    結果として別の制御系選択肢として昨年ちょいちょい実績やナレッジが公開されていたRP2040に興味が沸いたという感じになります。

QMK FirmwareのVer追従辛い

ちょいちょい大幅な変更が入り新しいVerでコンパイルすると通らない事があったり・・・
そのため古いVerの環境を維持して使っていましたが、PC環境が変わったりする中、
環境維持も手間に感じQMK Firmwareではない選択肢を探していました。
結果、前述のRP2040で動作するPRK Firmwareの存在を知り、触ってみることにしました。

Seeed XIAO RP2040の理由

作成をした時点で、PRK Firmwareで正式にサポートされているのはラズパイPico・ProMicro互換サイズのRP2040です。
なんで、非サポートのものを選択したのか。

  • Promicroサイズは大きい・・・
    成果物に記載した通り、キー数が32(片手16)と少ないことから必要なIOのPIN数も少なく、
    ProMicroサイズのPIN数でも持て余すこと。
    キーボードサイズに対しProMicroの占有スペースが大きく感じていました。
  • たまたまネット記事で当該製品を見かけた・・・
    書いたままです。
    前述の不満要素がありラズパイPicoやProMicro互換サイズが選択肢から除外され、
    そのタイミングで紹介記事を見かけ、価格もお手頃だったからです。
  • まあ動くやろ・・・
    RP2040系は互換ハードは様々あるし、PINアサインはPRK Firmwareで指定できるので
    おおよそ動くだろうと思っていた為です。

設計(1)

  1. キーレイアウト
    QMK版を踏襲・・・というか既存から変更しないと決めていました。
    このキー配置は今回の設計以前から使っているキーレイアウトで、2年以上使用しています。
    かれこれこのレイアウトでの基板設計・作成は3回目だったりします。
    (1回目はProMicro-キーソケット、2回目はProMicro-キースイッチ直づけ)
  2. XIAO RP2040のシンボルを作成する
    公式の旧XIAO用を利用する想定でしたが、旧XIAOは底面に配置されているIOがあり
    微妙に違いそうな気がしたので、旧XIAO用から底面に配置されているIOを削除したシンボルを作成しました。(15-20のPINを削除し、IOの番号などの記載を変更)
  3. 回路図
    前述の通り、この配列設計は過去に作成したものがあるのでプロジェクトをコピー。
    ProMicroをXIAO RP2040に置き換えPINアサインを変更しただけです。
    この辺りの設計は全てKiCADを利用しています。

keymap.rb(PRK Firmwareにおけるkeymapの設定ファイル)

今までのQMK+ProMicro構成だと、設計を終わって基板を発注〜届くまでの間に
QMKの定義を作成していました。
ただ、今回は制御系をハード・ソフトとも変更していたので、このタイミングで定義を作成し、
ブレッドボードで動作確認を行うことにしました。
作成に関してはこちらの記事を参考にさせていただきました。
流れ的には

  1. prk_keymap_generatorでQMKの定義からベースにするkeymap.rbを作成
  2. PINアサインを回路図でアサインしたものに変更
  3. リバーシブル基板なので反転部分のロジックを追記(前述の記事に記載されているロジックをそのまま利用させていただきました)
  4. マクロキー関連の定義を追記
  5. XIAO RP2040にPRK Firmwareとkeymap.rbを書き込む
  6. ブレッドボードに乗せて、動かしてみる

この時点で左右間の通信とDefaultレイヤーだけ確認を取りました。
※ブレッドボードや手持ちのケーブル本数都合でマクロキー周りまでテストできなかっただけです・・・

設計(2)

動作確認も取れて最終の回路図が確定したので設計の続きを進めます。
4. XIAO RP2040のスルーホールフットプリント作成
公式のKiCADフットプリント(旧XIAO用)を利用するつもりだったのですが・・・
直づけ用のフットプリントでPINヘッダ用のホールもなかった為、公式フットプリントベースに
片面用のスルーホール版を作ってそこからリバーシブル版を起こしました。

  1. 基板上の配置を確定させる
    ベースは旧版のものをそのまま利用し、NETリストを更新。
    (スイッチ・ダイオードのIDは変えていないので配置が維持される)
    XIAOとTRRSジャックの位置を決め、合わせてEdge.cutsのラインを引き直し。
    合わせて過去版はスペーサー用のホールのクリアランスが全然無かったのでその辺りを調整。
    配置が確定した時点で、保存しkicad_pcbファイルをコピー。
    ※ボトムやマウントプレート用のベースとするため
    6.配線
    自動配線ツール(FreeRouting)を利用。
    自動配線後、DRCで未配線がないことを確認し、GNDをベタ埋めする。
    ※ドリル穴の警告はフットプリントの都合どうしても出るので無視。
    7.トップとボトムのプレートデータ作成
  • ボトムプレート
    ホール以外のオブジェクトを削除し、スペーサー用の4mmホールをネジ用の2mmホールに置き換え
    ベタ埋め。
  • トッププレート
    スイッチ用のEdge.cutsのレイヤーを作成し、オブジェクトを削除。
    XIAOとTRRSジャックの部分を躱すように外形を変更。
    XIAOとTRRSを隠すプレート用のホール以外をボトム同様に径を変更しベタ埋め。
    8.ガーバーデータ作成
    回路基板・ボトム・トップの3つそれぞれガーバーデータを作成する

作成

発注から先はどの自作キーボードでも同じだと思うので書くことがないです。
届いた基板に諸々はんだ付けしていくだけです。
久々にコンスルー使えなかったので付属のPINヘッダを利用したら長すぎたので
ニッパーで短くしたくらいでしょうか。
(7PINコンスルーとかなかったので・・・)

今後のこと(残課題ともいう)

  • TRRSとXIAOの目隠しプレートの作成
    流石に剥き出しはリセットボタンとかあるので避けたいのでプレートは作る予定です。
  • トップ・ボトムのステンレスプレート作成
    固い打ち心地が好きでQMK版もステンレスプレートにしていたのでこちらも追々作る予定にはしています。
  • PRK Firmwareの調整
    Tapping周りの調整はQMKと同じくらいの値に設定したはずなのですが、
    ちょいちょい誤入力してるので使いやすいように値を詰める必要がありそうです。

終わりに

今回のキーボード作成、PRK_Firmwareとprk_keymap_generatorの存在、
また、記事内でリンクしてる入門ページのおかげで作成できました。
素晴らしいソフト・情報をありがとうございました。

久々・・・でもないのですが配線をごっそり作り直すレベルの設計は久々に楽しめたかな・・・
※Ver2というかスイッチ直付け版は去年の秋頃に作っていた。
ここ数年、年末年始に冬休みの自由研究と称してキーボードの再設計やら何かしらしてるのですが、
残課題は残したものの今回の冬休みもミッション完了ということにして終わりにします。

この記事は、この記事の成果物たるキーボードにて作成しました。

Discussion