自作キーボードやってみたいと唐突に思い道具をそろえ挑戦することに。
初めてなこともありキー数の少ないテンキーを作り自作キーボードを大まかに理解することを目的とした。
また今回自作キーボードに挑戦するうえで「手配線で自作キーボードを作る講座 – おかゆ++」さんを参考にしました。
購入した材料
Pro Micro(単体) 660円
マイコン
Kailhロープロファイルスイッチ(10個)白 440円×2セット
キースイッチ。分厚くなりそうだったのでロープロファイルにした。18キーで作ったため20個購入。
MBK Choc Low-Profile Keycaps 550円×2セット
キーキャップ。キースイッチよりキーキャップの方が高いとは!
タクタイルスイッチ – 2pin 3.5x6x4.3mm 11円
リセットスイッチ。結果としてはわざわざリセットスイッチ設けなくてもピンセットで短絡させればいいかなと思った。
高速スイッチング・ダイオード 1SS178(100本入) 100円
ダイオード
プラ板(PC)数百円
9×11cm程度×2枚使用。いわゆるサンドイッチプレートみたいな感じ。特に理由なくPC板を購入したが柔らかく加工がしやすかった半面テンキー自体もふにゃふにゃになった。
ネジ・スペーサー 数百円
プラ板固定用。ネジはM3、スペーサーは1cmのやつ。
完成
4×5の18キーで空いたところにマイコン張り付ける感じのテンキーとなりました。汚い出来上がりですね。雑で不器用だな。
組み立て
プラ板の切り出し
普通キーボードは1キー19.05mm四方でつくられていること、ねじ止めする余白を1cmとったことから
縦86.2mm、横105.25mmを2枚アクリルカッターで切り出しました。
プラ板の穴あけとキースイッチの固定
普通アクリルプレートは14mm角の穴をあけキースイッチをはめると思うのですが加工するのが非常にめんどくさいと思ったので別の方法をとることにしました。
Kailh choc v1のデータシートから足の位置を確認してプラ板に電動ドリルで穴をあけました。また、キースイッチを差し込みボンドで固定しました。
行列の配線
格子配列なので手配線は直線ばかり、単純でした。
promicroとの配線
回路とpromicroを耐熱電子ワイヤで配線します。今回は下側の9つのpin、promicroに書いてある5~10、14~16を使用しました。耐熱電子ワイヤをはんだ付けしました。promicroにはんだ付けするのは穴同士が近いし少しめんどくさい。
組み立て
promicroはボンドでプラ板に張り付け、そこら辺にあったUSBを刺しておきました。
スペーサーをプラ板で挟みねじ止めしキーキャップをはめたら本体は完成。
Firmware
config.h
#pragma once #include "config_common.h" /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x0000 #define DEVICE_VER 0x0001 #define MANUFACTURER Tsuiha #define PRODUCT tenki01 /* key matrix size */ #define MATRIX_ROWS 4 #define MATRIX_COLS 5 #define MATRIX_ROW_PINS { B1, B3, B2, B6 } #define MATRIX_COL_PINS { C6, D7, E6, B4, B5 } #define UNUSED_PINS /* COL2ROW, ROW2COL */ #define DIODE_DIRECTION COL2ROW
「define MATRIX」で行列を定義する必要があるらしい。今回だと縦に4キー横に5キーなので行(ROW)が4、列(col)が5とします。
「MATRIX_PINS」で行と列で使用するマイコンのピンを指定します。テンキーの0~3行、0~4列で配線したピンを指定します。
「COL2ROW」はcolからrow(縦線から横線)に電流が流れるということらしい。ダイオードの向きと対応させます。
tenki01.h
#pragma once #include "quantum.h" #define LAYOUT( \ k01, k02, k03, k04, \ k11, k12, k13, k14, \ k20, k21, k22, k23, k24, \ k30, k31, k32, k33, k34 \ ) { \ { KC_NO, k01, k02, k03, k04 }, \ { KC_NO, k11, k12, k13, k14 }, \ { k20 , k21, k22, k23, k24 }, \ { k30 , k31, k32, k33, k34 } \ }
行列とキーの名前を対応させます。わかりやすく座標をそのまま名前にするのが定番なのだろうか。今回は左上のスペースは使用しないがこのように空欄にし下のカッコ内で「KC_NO」とすればよいらしい。
keymap.c
#include QMK_KEYBOARD_H #define BASE 0 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( KC_7 ,KC_8 ,KC_9 ,KC_KP_SLASH , \ KC_4 ,KC_5 ,KC_6 ,KC_KP_ASTERISK, \ KC_DELETE ,KC_1 ,KC_2 ,KC_3 ,KC_KP_MINUS , \ KC_BSPACE ,KC_0 ,KC_KP_DOT,KC_ENTER,KC_KP_PLUS \ ), };
先ほどの行列に合わせてキーコードを打ち込む。
あとはうまくコンパイルできればqmktoolboxで書き込んで完成。
今回は一発で動作したので良かった。
反省とか
- 無事完成しテンキーとして動作、使用することができた。調べたり作ったりの中でなんとなく自作キーボードについて理解が深まった気がする。
- PC板が柔らかく加工しやすいのはよかったがふにゃふにゃになった。素材や厚さはしっかり考えた方がよさそう。
- 簡単だったのでプラ板に穴をあけスイッチを差し込んだが、プラ板が薄い必要があったりキーボードが厚くなったりするのであまりよくないので14mm角にはめ込むほうがよいかな。
- promicroに直接配線したが作業がとてもやりにくかったので棒状のやつを差し込みそこに巻き付けてはんだ付けする方がよさそう。
- 縦の配線、ダイオードの足そのまままげてつなげればよさそう。
初めてにしてはちゃんとできたしまあ上出来なんじゃないだろうか。
コメント