自作キーボードの作成メモ
2021-08-08
- PC
前からときどき、Ubuntuがフリーズする。そのとき安全に再起動する手順を実行したいが、現在使っている2台目の自作キーボードにはPrintScreenがない。キーボードのファームウェアを書き換えて、PrintScreenを作る。
この記事を書こうと思ったのはそういう目的。あと自作キーボードの作成について記事を書こうと思っていたのに未だに書いていなかったのでついでにそれも書く。
1台目の自作キーボード
はじめに人生初自作キーボードのMint60について。
公式紹介は以下参照。
2019年当時、というかその少し前から「自作キーボード沼」という言葉が流行っていて、自分もちょっと足を踏み入れてみたいと思っていた。そんなとき、ネットで話題になっていたのがMint60。見た目もカラフルでおしゃれだし、左右分離型キーボードというのがどういうものか知りたかったので注文した。はんだごてのための作業道具も買って組み立てた。
なおはんだ付けのために以下を購入した。
- 白光(HAKKO) ダイヤル式温度制御はんだこて FX600-02
- FayTun 作業マット 耐熱 シリコン製作業用マット 絶縁 断熱パッド 溶接用 500℃高温熱風に耐える 無毒 電子製品・携帯・パーソコン分解修理用ツール 35*25cm (作業マット(灰色))
- フジ矢 マイクロラジオペンチ 細かい作業に最適な先細仕様 (バネ付) 150mm MP6-150
- フジ矢 スモールニッパ 110mm 刃部鏡面仕上げで切れ味抜群 より線Ф2.0まで切断可能 MP4-110
- goot(グット) 高密度集積基板用 鉛フリーはんだ Φ0.6mm スズ99%/銀0.3%/銅0.7% ヤニ入り SD-51
- goot(グット) はんだ吸取り線 3mm幅 1.5m巻き CP-3015 日本製 | ハンダゴテ
- ホーザン(HOZAN) 先曲がりピンセット カーブタイプ 材質ステンレス 全長115mm 重量18g 開き幅7mm P-882
- ホーザン(HOZAN) フラックス 鉛フリーハンダ対応 便利なハケ付きキャップ付 容量30mL H-722
- 白光(HAKKO) こて台 FX-600/FX-601/PRESTO/DASH用 633-01
自分ははんだ付けは決して得意ではないが、以前所属していた会社では補聴器の中の極小の基板に(顕微鏡をのぞき込みながら)はんだ付けをすることがあり、それに比べれば顕微鏡を使わないはんだ付けは遥かに楽だった(上手にできたとは言わない)。
鉛フリーはんだは一般的には溶けにくく扱いにくいとされているが今回はチャレンジとして選んだ。フラックスははんだ付けがしやすくなるもの。
Mint60の組み立てではスタビライザーの組み立てが一番悩んだ。(たしか「これ以上力を入れると壊れるんじゃないか?」とびびりながら組み立てた気がする。)他はわりとスムーズにできた。
2台目の自作キーボード
Mint60を完成させ、憧れの自作キーボードを日常使いするようになると、だんだん欲が出てきた。主に以下の2点。
- 打鍵音をもっと小さくしたい
Mint60ではキースイッチを選択できる。自分は 茶軸 を選んでいた。いまMint60のサイトを見ると赤軸を推しているようなので、なぜ自分が茶軸にしたかよくわからないが、自作キーボードについていろいろ調べる中で茶軸がスタンダードという思い込みを持っていたのだと思う。
当時はわりと壁が薄いマンションに住んでおり、一挙手一投足に神経を遣う生活を送っていた。そのため、茶軸の打鍵音が大きすぎるのではないかという強迫観念じみた思いに取り憑かれるようになった。
Mint60はメインに茶軸を選んでも、体験版的にいろいろな軸が1個ずつ付属するという粋な計らいがあり、自分はそれを使ったのでキーボードのいくつかのキーは別の軸だった。するとだんだん、赤軸や黒軸の静かでスコスコした打鍵感が好きになっていった。黒軸は押下圧が大きいので全部がこれだと疲れるかもしれないと思い、次は 赤軸 を選ぶことにした。
なお自分は2021年6月に引っ越しをし、その部屋を離れた。いまMint60を触ってみると、茶軸の打鍵音が隣室に聞こえるほど大きいかもというのはやはり神経質すぎるとしか言いようがないので、普通は気にしなくていいと思う。(そしていま久々に出してみて、Micro USB端子がぶっ壊れていることに気が付いた。) - 左右分離型じゃない方がいい
物珍しさで使っていたが、左右分離型は自分には合わなかった。左右のキーボードをつなぐための線はない方が嬉しいし、どうも打っていてキーの場所が固定せずタッチタイピングしにくく感じた(個人の感想です)。左右分離型は肩こりに良いらしいが、元々肩こりがないのでそのメリットも感じなかった。
(これを見てわかるように、Mint60に対する不満というよりは、単なる好みの問題だ。特にキースイッチは赤軸を選べばよかっただけの話。Mint60は素晴らしいキットなので、自作キーボード初心者である自分がここから入ったのは幸運だったと思う。)
2台目はこれらを考慮し、2020年に以下のキットを買って作った。AliExpressで買ったのは、自作キーボード関連の商品が多いという評判を聞いていたため。
- GH60 Bamboo Walnut Wooden Case Wrist Rest 2 in 1 For 60% Mini Mechanical Gaming Keyboard Compatible Pok3r DZ60 YD60MQ XD64 (Walnut、Kit2)
メインのキーボードキット。基板、木製ケース、プレート、スタビライザーがある。パームレストとして使えるケースを選んだ。基板はQMK Firmware対応を選ぶように気を付けた。Mint60では大量にダイオードのはんだ付けをしたが、この基板では不要だった…はず。 - Plate mounted Black Cherry Stabilizers Clear Satellite Axis 7u 6.25u 2u 3u 6u For Mechanical Keyboard Modifier Keys (1x2u、Black Cherry Stabを2個)
スタビライザー。予備用に買った…?上のキットについているスタビライザーがあるので不要なはず。 - Wholesales Authentic Cherry mx switch 3 pin 5 pin Mechanical keyboard brown blue red white clear silver Switches (red、75pcs)
キースイッチ。赤軸。5pinだとニッパで切る作業が必要らしいので3pin(plate mount)のものを選んだ。75pcsもいらないはずだが多めに買っている。 - YMDK Double Shot 104 Miami PBT Shine Through OEM Profile Keycap set Suitable For MX Switches Mechanical Keyboard (Pink Blue)
キーキャップ。double shotでPBTが耐久性高いらしいのでそれを選んだ。 - Type C USB Cable Cowboy Durable Data Line 1.5 Meter Second Generation Chipset For Mechanical Keyboard Melody 96 Phone
キーボードとPCをつなぐケーブル。
はっきり言って何も尖ったところのない面白くない構成。でも気に入ってる。
1つ大失敗をした。基板には柔軟なキー配置ができるように、キースイッチを差し込む穴が何パターンも空いていたのだが、適当に挿してはんだ付けまでしてしまったため、隣のキーキャップとぶつかってキーキャップをはめられないキーができてしまった。事前に考えてからはんだ付けすべき。
ファームウェアの書き込み
2台目のキーボードで、キーマップを変えたいのでファームウェアを書き込む。QMK Firmwareのサイトに詳しいドキュメントがあるので、そのままやる。
Ubuntu 20.04でやった。 sankaku
はユーザ名。
セットアップ
Setupを参考に。
- python3 -m pip install --user qmk
qmk setup
途中で、どこにcloneするか聞かれるので、OKならyを押す。$ qmk setup ☒ Could not find qmk_firmware! Would you like to clone qmk/qmk_firmware to /home/sankaku/qmk_firmware? [y/n] Would you like to clone qmk/qmk_firmware to /home/sankaku/qmk_firmware? [y/n] y Cloning into '/home/sankaku/qmk_firmware'...
qmk compile -kb yd60mq -km default
ただのテスト。うまくコンパイルできることを確認する。
キーボードの種類(?)としてyd60mqを指定している。上に書いたキットのページに「Kit 2: Case+ 2u Shift Silver Plate+Stablizers+ YD60MQ Type C Gold Pad Black PCB (no underglow RGB included)」と書いているので、これで正しいはず…。あんまりよくわかってない。qmk config user.keyboard=yd60mq
設定。qmk config user.keymap=sankaku
設定。
キーマップの設定
Building Your First Firmwareを参考に。
qmk new-keymap
キーマップを書くためのディレクトリが作成される。$ qmk new-keymap Ψ sankaku keymap directory created in: /home/sankaku/qmk_firmware/keyboards/yd60mq/keymaps/sankaku Ψ Compile a firmware with your new keymap by typing: qmk compile -kb yd60mq -km sankaku
~/qmk_firmware/keyboards/yd60mq/keymaps/sankaku/keymap.c
を編集
一応、元のファイルをバックアップしておいてから編集。
Full ListやBasic Keycodesなどを参考に書く。qmk compile
コンパイル。qmk flash
基板に書き込み。
RESET状態にあるキーボードを探して書き込むよう。書き込み対象のキーボードの他に、コマンドを打つためのキーボードも必要になるのかと思ったが、コマンドを打ったあとでRESET状態にすればうまくいった。
RESET状態にする方法はFlashing Firmwareを参照。
上に書いたのは最近行った、2度目の書き込み作業。1度目はキーボード組み立て直後にやっていたが、やり方を完全に忘れていた。自分はこの1度目の書き込みのとき、RESETを「Fn + `」に割り当てていたので、これを押してRESET状態にした。1度目はたしか両方のShiftを押した後でBを押してRESETにした…気がするがよく覚えていない。
keymap.c
実際に書き換えたkeymap.cは以下。MOはFn的なもの。 MO(1)
を押すと [1]
のレイヤーに行き、さらにそのまま MO(2)
を押すと [2]
のレイヤーに行く。
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT,
KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_ESC, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
MO(2), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
_______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, _______,KC_PGUP, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN,KC_END
),
[2] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______
),
};
- RESETを変えた
前回の書き換えでは「Fn + `」にしていた。ところがこれをRESETに割り当てていたことを完全に忘れていた。このキーはたまに(誤って)押してしまうことがあり、そのたびにキーボードが入力不能になって、何が起きたのかと戸惑っていた。こういうことがあると困るので、絶対に押さない場所にした。 - PrintScreenを設定した
KC_PSCRがそれ。 MO(1)
がここにあると便利
PageUpとかがやりやすい。- ESC(KC_ESC)がここにあると便利
押しやすい。