自作キーボード

キーボードの自作を始めて数か月が経ち、いくつかキーボードを新しく作成したので感想をメモしておきます。


前回から新たに2つキーボードを作成しました。
yyoshisaur.hatenablog.com

38キー分割キーボード

f:id:yyoshisaur:20210704213755j:plain

キー配列

前回作成したキーボードは格子配列だったので、今回はカラムスタッガード(列がズレている配列)にしてみました。
そして、ロータリーエンコーダやOLEDなど自作キーボードでよく使用される部品を実装しました。
カラムスタッガードの列のズレ具合は自分にとってどれぐらいが良いが分からなかったので、中央の列から0.25uずつ下げることにしました。
カラムスタッガードは指の長さに合わせてキーが縦にズレているので、格子配列やロウスタッガードと比べて無理なく運指でき、とても快適でした。小指で押下するキーはもう少し下げてもよさそうに感じました。

ロータリーエンコーダ

2つあるロータリーエンコーダにはマウスのホイールと音量のボリュームUP/DOWNを割り当てました。
ボリューム調整は比較的使用頻度が高いのですが、もう片方のマウスホイールはほとんど使用しませんでした。これといって割り当てると便利そうなキーは思いつきませんでした。

OLED

OLEDは現在レイヤーを表示するなどの使い方がありますが、タイピングしている時はキーボードを見ないので実用度は微妙な感じでしたが、キーボードに小さなディスプレイが付いてると自作感があって良いです。QMK Firmwareを使用しているキーボードにはOLEDにアニメーションを表示させているものもあるので、面白いです。だたファームウェアのサイズが結構大きくなります。
WPMの値でBongo Catがアニメーションするのがお気に入りです。
f:id:yyoshisaur:20210704213804j:plain

ジョイスティック

ジョイスティックは基板上に実装せずお試しでピンだけ引き出しておきました。
ジョイスティックを配線して、動作確認のみしました。ゲームパッドやマウスとして使用できるかなと思います。

キースイッチ

キースイッチはキーソケットで交換可能にしてCherry MX互換とKailh Choc(ロープロファイルスイッチ)の両方に対応しました。
Chocは今回初めて使ってみました。スイッチが薄く、キーボードの高さが抑えられるのでパームレストが不要になり、とても気に入りました。静音で軽いリニアスイッチが好きなのですが、Red ProをOリングとルブをすることでかなり好みな打鍵感になりました。ただキーピッチは標準的な19.05mmにしたのですが、国内で販売されているChoc用のキーキャップは約18mmx17mmで少しキースイッチ間の隙間が気になりました。(バックライトが実装されている場合は隙間があるほうが光が漏れて綺麗かなと思います。)

36キー分割キーボード

f:id:yyoshisaur:20210704213855j:plain

キー配列

上記のキーボードを踏まえて、Kailh Chocで18mmx17mmのキーピッチ(狭ピッチ)を作成することにしました。(Cherry MX互換キースイッチは狭ピッチするとキーキャップが選択肢が少なく、手持ちのキーキャップは使用できないので、Chocのみに対応することにしました。)
キー数は前回より2キー減らして、36キーにしました。(私の場合、この36キーが最低限で丁度良いという結論になりました。)
親指で無理なく3キー押下できるように内側へ1u分移動しました。GergoPlexやCorne miniのような感じになりました。
中央の列から小指の列は1u、薬指の列は0.5u下げることにしました。
狭ピッチにするとChocのキーキャップ間の隙間がなくなり、いい感じです。
f:id:yyoshisaur:20210704213812j:plain
スイッチは丁度在庫が復活していたので、動作圧のとても軽いKailh Choc v1 Blueを使ってみました。Red Proより10g程軽く、指を置いて少し力を加えるだけで反応するのでタイプは楽ですが、慣れるまで誤タイプが目立ちました。しかし、慣れると手放せない楽さがあります。
kochikeyboard.stores.jp
国内で手に入るMBK Choc Low Profile Keycapsは白か黒でしたが、最近カラーバリエーションが増えてChoc好きとしてはうれしいです。
kochikeyboard.stores.jp
MBK Choc Low-Profile Keycapsshop.yushakobo.jp

キースイッチのカスタマイズは以下を参考しています。
www.youtube.com

ケース

今回もマウントプレートとボトムプレートはアクリル板で作りました。
また、最近3Dプリンターを購入したので、ボトムケースを作ってみました。白色のフィラメントではアンダーグロウのLEDが程よく透けて綺麗でした。アクリル板のサンドイッチ構造だと横の隙間からホコリが結構入りますが、トレイ形状だとそれが改善するので良いです。単純な形のケースですが、ケースがあるとキーボードとしての完成度が上がる気がします。
f:id:yyoshisaur:20210705113412j:plain

スリープが解除されてしまう問題

このキーボードを接続した状態でWindowsをスリープさせるとすぐスリープが解除されてしまう現象が発生してしまいました。他の作成したキーボードでは発生しなかった現象です。
(他のキーボードでは正常にスリープでき、キーボードで任意のタイミングで復帰できていました。)
他のキーボードとの違いは、分割キーボードの左右を設定するためにマトリックスピンを使用するようにしていました。(SPLIT_HAND_MATRIX_GRID)
他のキーボードでは左右設定用に1つのピンを専用で割り当てていました。(SPLIT_HAND_PIN)
左側となるキーボードの未使用のキーマトリックスの交点にダイオードを接続しました。ダイオードを接続するとカラムとロウの配線が短絡されるため、キーが押下されている状態になりスリープが解除されているようです。
f:id:yyoshisaur:20210705180422j:plain
未使用の交点はKC_NOとしてキーコードは設定していないので、キーコードのないキーが押下されているという不思議な状態になっている?ようです。

対策

MATRIX_MASKEDを定義して、未使用の交点を無視しキーの押下を送信しないようすることで解決しました。
QMK Firmwareドキュメント(英語)の分割キーボードの項目にはMATRIX_MASKEDについての記述がありましたが、日本語訳では省略されていたため見落としていました
docs.qmk.fm
github.com

// config.h
#define MATRIX_ROWS 8
#define MATRIX_COLS 5
#define MATRIX_ROW_PINS { C6, D7, E6, B4 }
#define MATRIX_COL_PINS { F6, F7, B1, B3, B2 }

#define SOFT_SERIAL_PIN D2 
#define USE_SERIAL

#define SPLIT_HAND_MATRIX_GRID  B4, F6

#define MATRIX_MASKED

// keymap.c等のどこかの.cファイル
const matrix_row_t matrix_mask[MATRIX_ROWS] =
{
//0でマスクされた交点は無視される
//     54321
  0b00011111,
  0b00011111,
  0b00011111,
  0b00011100,
  0b00011111,
  0b00011111,
  0b00011111,
  0b00011100,
};

matrix_maskを設定すると正常にスリープできるようになりました。

まとめ

いくつかキーボードを設計、作成しましたが、自分にとって使いやすいキーボードができました。
私にとってのEndgameは狭ピッチ、分割、36キー、ロープロファイルスイッチ、カラムスタッガードでした。