su120 でMinecraft専用キーボード

目次
Macで Minecraft Java版を遊ぶための専用キーボードが欲しい。
ということで、自作で作ってみた。
Arduino の Pro Micro(ATmega32U4 5V 16MHz) を利用すると、PCにUSB接続してHID キーボードとして認識させることができる。
その Pro Micro のPINにキーボードの基盤(PCB) を設定していわゆる 自作keyboardを作成できる。
su120
PCBは、自由度の高い su120。
PCB上のキーが全て切り離し、再結合可能で好きな形のキーボードをつくるためのプロトタイプにぴったり。 合計128stepのマクロも使えて、これとマウスで快適なマイクラライフを楽しめるはず。
組立
まずは練習として、購入したままの状態で組み立てた。
親切なページがあるので、ここを参考に半田付けと組立を行った。
Minecraft でのキー配置カスタマイズ
通常のキーボードだと、こんな感じの操作になる。

これをsu120の17キー(内2個が拡張キー)で、以下のように割り当てる。


qmx のsetup
mac の場合brewが簡単
brew install qmk/qmk/qmk数あるキーボード配列から、su120用のbranchを取得
qmk setup e3w2q/qmk_firmware --branch e3w2qこれで、 $HOME/qmk_firmware/keyboards/e3w2q/su120 にデータがinstall される。
default のキーマップを試す
最初にローターリーエンコーダー2つ用に、キーマップ rev1_4knob を利用する。
su120 の片手15キー用の sasami15+2 プログラムをキーボードにプログラムを書き込み
qmk flash -kb e3w2q/su120/rev1_4knob -km default動作確認して、全部のキーがちゃんと押せるか確認する。 テストはここがお薦め。
Minecraft用のキーマップを作成
Dynamic Macroを有効化
$HOME/qmk_firmware/keyboards/e3w2q/su120/rev1_4knob/rules.mk の先頭行に以下の記述を追加
DYNAMIC_MACRO_ENABLE = yesMinecraft用キーマップファイルを作成
前述の sasami15+2 をコピーして作る
cd $HOME/qmk_firmware/keyboards/e3w2q/su120/rev1_4knob/keymaps
cp -r sasami15+2 minecraft好みの問題だけど、Dynamic Macro をシンプルにするためにMacroのnestをしないように、minecraft/config.h に以下の記述を追加
#define DYNAMIC_MACRO_NO_NESTING 1実際のキーマップは、こんな感じ。
mincraft/keymap.c
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default Layer
* Master Side (USB Cable Connected Side)
* ,-------------------------------
* | 1 2 3 4 5 XXXX
* | ESC q w e MO(1) XXXX
* | MO(1) a s d f XXXX
* | XXXX SPC XXXX REC1 REC2 XXXX
* | XXXX XXXX XXXX XXXX XXXX XXXX
* `-------------------------------
* Slave Side (USB Cable Not Connected Side)
* ,-------------------------------
* | 6 7 8 9 DEL XXXX
* | XXXX XXXX XXXX XXXX ENT XXXX
* | XXXX XXXX XXXX XXXX XXXX XXXX
* | XXXX LSHT XXXX PLY1 PLY2 XXXX
* | XXXX XXXX XXXX XXXX XXXX XXXX
* `-------------------------------
*/
[0] = LAYOUT( /* Base */
KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX,
KC_ESC, KC_Q, KC_W, KC_E, MO(1), XXXXXXX,
MO(1), KC_A, KC_S, KC_D, KC_F, XXXXXXX,
XXXXXXX, KC_SPC, XXXXXXX, DM_REC1, DM_REC2, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
[1] = LAYOUT(
KC_6, KC_7, KC_8, KC_9, KC_DEL, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, XXXXXXX,
XXXXXXX, KC_LSHIFT,XXXXXXX, DM_PLY1, DM_PLY2, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
/* key repeat true */
return true;
}
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
void led_set_user(uint8_t usb_led) {
}
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
if (clockwise) {
tap_code16(KC_RIGHT);
} else {
tap_code16(KC_LEFT);
}
} else if (index == 1) {
if (clockwise) {
tap_code16(KC_DOWN);
} else {
tap_code16(KC_UP);
}
}
}
/* vi:set ts=4 sw=4 sts=4 ft=sh et: */compile
qmk compile -kb e3w2q/su120/rev1_4knob -km minecraftinstall
qmk flash -kb e3w2q/su120/rev1_4knob -km minecraft続き

