この記事は キーボード #2 Advent Calendar 2020 の、5日目の記事です。
前の記事は、s-showさんの”自作キーボード活動2年目の振り返り”でした。
次の記事は、eswaiさんの”エンドゲームに近づいたのか?”です。
この1年は、僕にとっての自作キーボード元年でした。
なんやかんやで、自分で自分のキーボードを作れるようになった自キ活の1年目をふりかえります。
また、キーボードを作る中で偶然(?)使えるようになった総当たりマトリクスについても紹介します。
なお、こちらの記事はダイジェスト版となっております。
お時間のある方はフル版をご覧ください。
自キ活1年目で出来たもの
この1年の自作キーボード活動(=自キ活)で出来たものを紹介します。
初めての自作キーボード ErgoDash, 2019年11月
肩にやさしく、OTAKUっぽい分離型でエルゴノミクスを感じる配列のErgoDashのキットを、初めての自作キーボードに選びました。
ErgoDash用パームレスト一体型ハイプロアクリルケース, 2019年12月
ErgoDash純正のケースだとキーキャップ下側の角に手が引っかかるのが気になったので、フレーム付きのハイプロケースを作成しました。
SU120基板発注, 2019年12月末
自分用のキーボードを作りたいという思いが強くなり、過去のアドベントカレンダーからe3w2q氏の”レイアウトを試行錯誤しやすくするために作った自作キーボード用基板の開発で試行錯誤した話”という記事を見つけ、基板を作らずに自由なレイアウトが作れるSU120を発注しました。
改造キーボード NumAtreus_Plus8, 2020年1月
遊舎工房の福袋に入っていたNumAtreusですが、どう考えても40%キーボードなんて使える気がしないので、左右に1列ずつ増やす改造を加えてNumAtreus_Plus8を作成しました。
初めて自分で設計したキーボード Colice(コリス), 2020年1月〜5月
合体構造により左手、右手とテンキーの位置をを変えられ、一体型かつ分離型のキーボード、Coliceを製作しました。
総当たりマトリクスを採用したキーボード Atreus RR, 2020年3月
Pro Micro1個でたくさんのキーを動作させる方法を調べていて、2乗マトリクスで色々やっているうちに偶然(?)不具合を回避する方法を発見し、総当たりマトリクスを採用したAtreus RRが完成しました。
とても具合の良い60%キーボード Jones(ジョーンズ), 2020年5月末〜現在
通常のロースタガ配列でそこそこ満足という気持ちと、もうちょっと使いやすくしたいという想いから、ロースタガとオルソリニアを組み合わせたGH60型ケース互換の60%キーボード、Jonesを作りました。
総当たりマトリクスの採用や、ロータリーエンコーダや2音同時発音のスピーカーの搭載など、内部は今年1年で得た知識をフル動員した感じです。
Gimme! Gimme! Gimme!#Jones_kbd pic.twitter.com/frBi9FMDjq
— Takeshi Nishio (@jpskenn) October 22, 2020
STM32F303評価ボード STMeishi, 2020年10月〜現在
大きなサイズのファームウェアを使いたくなり、STM32F303を使った名刺サイズの評価用マクロパッド、STMeishiを作りました。
電源LEDが点灯するだけで、ひとっつも動作しません。
失敗から何かを学ぶ予定です…
総当たりマトリクスのご紹介
Atreus RRの製作中に偶然使えるようになった”総当たりマトリクス”を紹介します。
総当たりマトリクスとは
IKeJI氏の”キーボードのマトリクス方式の分類”で取りあげられている”2乗マトリクス”に、ゴースト回避方法を追加したマトリクス方式です。
N個のピンで、N(N-1)個のキーを使用することができます。
回路図が総当たり戦のリーグ表ような形になるため、”総当たりマトリクス”という呼称にしました。
今のところ、Pro Microを含むATMega32u4でのみ動作を確認しています。
詳しくは以前書いた記事をご覧ください。
利点
- 少ないピンで非常にたくさんのキーを使用できる
- Duplex-Matrix(N個のピンで、N^2/2個のキー)よりも使用ピン数を少なくできる
QMKファームウェア整備作業が多少増える
一般的なCOL2ROWの設定でOKなので、整備不要になりました。
ゴースト回避方法
ピンから他のピンへ向かう箇所にダイオードを挿入します。
That's it! これだけです。
マクロパッド作成例
総当たりマトリクスを使った、2行×3列で6キーのマクロパッドの作成例です。
回路設計
-
使用するピンの数を決めます。
この例では6キーなので、3個のピンを使用して3(3-1)=6キーを接続します。 -
ピンとピンの間にスイッチを配置します。
Pin1 Pin2 Pin3 Pin1 - SW21 SW31 Pin2 SW12 - SW32 Pin3 SW13 SW23 - -
ピンから他のピンへ向かう箇所にダイオード(D1, D5, D9)を挿入します。
QMKファームウェア整備
rules.mk
でのカスタムマトリクス関連の指定は、不要になりました。
-
rules.mk
カスタムマトリクス関連の指定をおこないます。-
カスタムマトリクスを使用する設定と、総当たりマトリクス方式でのマトリクススキャン方法を記述したmatrix.c
を読み込む指定を追加します。CUSTOM_MATRIX = yes SRC += matrix.c
-
matrix.c
をquantum/matrix.c(※)
を改変して作成し、rules.mkと同じフォルダへ配置します。
ここに雑なサンプルを用意しました。※:Pro Micro2個の分離型は、quantum/split_common/matrix.c
を改変します。
-
-
config.h
使用するピン数と、ピン番号を指定します。
総当たりマトリクスでは、ROW、COLともに同じピン数、同じピン番号になります。
DIODE_DIRECTION
は一般的なマトリクスと同じCOL2ROW
を指定します。
Bootmagic liteを使用する場合、ブートローダへ入るためのキーを指定しておきます。
デフォルトではマトリクスの左上(0,0)のキーとなっているため、この作成例の回路では常に押された状態と判定されて、ずっとブートローダに入りっぱなしになってしまいます。#define MATRIX_ROWS 3 #define MATRIX_COLS 3 #define MATRIX_ROW_PINS { B3, B2, B6 } #define MATRIX_COL_PINS { B3, B2, B6 } #define DIODE_DIRECTION COL2ROW /* Bootmagic lite用 ブートローダへ入るためのキー指定 マトリクスで0行2列の位置(=左下)を指定する例 */ #define BOOTMAGIC_LITE_ROW 0 #define BOOTMAGIC_LITE_COLUMN 2
-
keyboard.h
回路上のマトリクスと物理的なキー配置を対応づけします。-
回路上のマトリクス(下半分)
3行×3列の回路上のマトリクスのうち、スイッチを配置していない箇所はKC_NO
とします。 -
物理的なキー配置(上半分)
回路上のマトリクスでKC_NO
となっている部分を詰めて、2行×3列に配置します。
#define LAYOUT( \ K12, K21, K31, \ K13, K23, K32 \ ) \ { \ { KC_NO, K21, K31 }, \ { K12, KC_NO, K32 }, \ { K13, K23, KC_NO } \ }
-
終わりに
ほぼ知識ゼロの状態からスタートした自キ活でしたが、「これは無理かも」と思うようなときは、”サンボマスター / できっこないを やらなくちゃ”を聴いてなんとかやってこれました。
また、これらのキーボードが作れたのは、先達の知恵のおかげです。
特に過去のアドベントカレンダーは知恵の宝庫で、読み返すたびに発見があり、何かしらの知識を与えてくれ、大変助かりました。
さて、今後の自キ活ですが、Jonesにかなり満足してしまったので少しペースを落としつつ、Jones用オリジナルケースや分離型、STM32化などを進めていこうと思っています。
また、手の大きさ(小ささ)に合わせた、狭ピッチなキーボードも試してみたいです。
キーボードは何かをするための道具だと思っているので、具合の良い道具で楽しく快適に何かをやっていきたいです。
この記事は、Jones(v.0.3.1)のANSIスタイルをKBDfans 5°ケースと組み合わせ、流れるレインボーを見ながら書きました。