NISSE mini 作ったよ!

自作キーボード Advent Calendar 2017の二日目の記事です。

NISSEを小型化したキーボードを自作したので今日はそのお話。 おこがましいですが便宜上NISSE miniと名付けました。 NISSEについてはサイトを見てください。

NISSEを作られているshikiさんのblogにこのような記事があります。

エルゴノミック キーボードの簡単な歴史

この記事で説明されている通りNISSEは長いキーボード研究を参考に作られているのがわかります。 最近自作キーボードをチョットダケデキルようになったので作ってみようと思い立ったわけです。

コンセプト

そのまんまNISSEでは私の好みに合わないところがあります。 まずは大きさ。ファンクションキーなどはほぼ使わないので削除。 さらに数字行、これは私の手の大きさでは届かない行なのでこれも削除。 両サイドの記号列も手がとどかないので削除。

さて、減らした数字や記号、時々たまに使うかもしれないFNキーなどはどうするの? そう思われる方もいるかもしれませんが、ちゃんと入力できるので後述。

キー数も減らしたら、ボディのサイズも小さくできるので余分な所は削除。

さてさて、つまりはNISSEを小さくしたNISSE miniが私の作りたい物のようです。 コンセプトが決まった所で形をつくっていきましょう。

デザイン

私が使えるのはfusion360という3dcadソフトなのでそれでスケッチを書いていきます。

まずはキースイッチ。 スイッチ自体の大きさは14x14mmくらいです。 そこに乗るキーキャプのサイズが18x18mmです。 さらにキーキャプどうしが干渉しないようにスペースが必要ですね。それを1mm。 キースイッチの上蓋をあとから外せるようにするためのスキマもあけて。 それらをひとまとめにしたのがこちら。

f:id:kumatoki:20171027203600p:plain

これをパターンとコピペを駆使してならべていくわけです。 キー配置はNISSEをざっくりモデリングしました。 具体的にはNISSEの画像を先程のスケッチに寸法を合わせるように拡大して、手でポチポチならべます。 必要分並べたら外枠もトレース。 できあがりがこれ。

f:id:kumatoki:20171027203610p:plain

外枠が大きいままです。 NISSEでは上方向と内側方向に傾斜がついています。 この傾斜はとても重要で、エルゴノミクスの一部です。 斜め下の辺を基準に傾斜をつけているのではないかと思います。 なのでできるだけ斜め下の辺をイジらないように最小化できないかと考えましたが、今回アクリル加工をしてもらったサービスの都合上、寸法に制限があったのでなかなか都合良くはいかず。 ネジ穴など開けて、最終的なスケッチがこれ。

f:id:kumatoki:20171027203622p:plain

これの5枚制作。5枚っていうのもサービスの都合上。 できあがったアクリルプレートがこれ。

f:id:kumatoki:20171027204017j:plain

形が見えてきました。

キースイッチはんだ付け

今回はGateron BlueにJSpacersというスイッチ内部に仕込むO-Ring的な物を付けました。 これの取り付け作業がとてもたいへん。

f:id:kumatoki:20171027204315j:plain

プレートにスイッチをはめ込んでいきましょう。ポチポチと。 はめ込んだらはんだ付けです。 キーマトリックスダイオードなどについて説明しません。

横と縦と配線を張り巡らせていきます。

f:id:kumatoki:20171028172712j:plain

Pro Micro

キーボードの脳となるのがPro Microとよばれるマイコン。 ほかのマイコンを使ってもよいのでしょうが、値段的にも、後述するファームウェア的にもこれが手軽です。ピン数が少ないので対応できるキー数が少ないのが傷。IO Expanderなどでカバーしましょう。

f:id:kumatoki:20171028172729j:plain

今回はこれをプレート裏にエポキシ樹脂接着剤で固定して、これに配線をしていきます。

f:id:kumatoki:20171028172753j:plain

QMK Firmware

からっぽの脳に知性を宿しましょう。QMK Firmwareです。 簡単なファームウェアなら自作もそう難しくはないのですが、すでに私はErgodoxやLet's splitなどでqmk firmwareの便利さを知っていたので、今回もこれを採用。

QMK対応のやり方は別記事

さて、上記の削除されていったキー達。ちゃんと入力する方法があるんです。 LayerとよばれるQMKの機能を多用して入力できます。 簡単に言えば修飾キーみたいなもんです。 あるキーを押しながら別のキーを押すと、入力できる文字がある。それだけのことです。 具体的にはLowerキーを押しながら「q」を押すと「!」が。Raiseキーを押しながら「q」を押すと「1」が。 こんな具合に削除されていったキーを入力することができます。 もちろんキーマップも書き換え可能なのでそれらのパターンは自分で無数に定義できるわけです。

出来上がったキーマップはこちら。 記号はplanckのdefaultの配列が秀逸だと気がついたのでそれを採用。 MISCレイヤーに矢印や音量調整、音楽再生、マウスカーソル移動などの雑多なキーを配置。 真ん中4つにはよく使うショートカット、タブ移動とアプリ移動。 あれ、ファンクションキーが結局いらない子でしたね。。。

#define XXXX KC_NO
#define ____ KC_TRNS

// for MacOS
#define NEXTTAB ACTION_MODS_KEY(MOD_LGUI, KC_RCBR)
#define PREVTAB ACTION_MODS_KEY(MOD_LGUI, KC_LCBR)
#define NEXTAPP ACTION_MODS_KEY(MOD_LCTL, KC_RGHT)
#define PREVAPP ACTION_MODS_KEY(MOD_LCTL, KC_LEFT)

enum Layer {
  TOP,
  LOWER,
  RAISE,
  MISC,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [TOP] = {
    {KC_TAB,        KC_Q,             KC_W,    KC_E,      KC_R,   KC_T,    PREVTAB,  NEXTTAB,  KC_Y,    KC_U,   KC_I,      KC_O,    KC_P,              KC_BSPC},
    {CTL_T(KC_ESC), LT(MISC, KC_A),   KC_S,    KC_D,      KC_F,   KC_G,    PREVAPP,  NEXTAPP,  KC_H,    KC_J,   KC_K,      KC_L,    LT(MISC, KC_SCLN), KC_QUOT},
    {KC_EQL,        KC_Z,             KC_X,    KC_C,      KC_V,   KC_B,    XXXX,     XXXX,     KC_N,    KC_M,   KC_COMM,   KC_DOT,  KC_SLSH,           KC_MINS},
    {XXXX,    XXXX,     KC_LGUI,       MO(LOWER), SFT_T(KC_SPC), KC_LANG2, KC_LALT,
     KC_RALT, KC_LANG1, SFT_T(KC_ENT), MO(RAISE), KC_RGUI,       XXXX,     XXXX}
  },

  [LOWER] = {
    {____, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, ____, ____, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, ____},
    {____, ____,    ____,  ____,    ____,   ____,    ____, ____, ____,    KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, ____},
    {____, ____,    ____,  ____,    ____,   ____,    XXXX, XXXX, ____,    KC_TILD, KC_PIPE, KC_QUOT, ____,    ____},
    {XXXX, XXXX,    ____,  ____,    ____,   ____,    ____, ____, ____,    ____,    ____,    ____,    XXXX,    XXXX},
 
  },

  [RAISE] = {
    {____, 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_LBRC, KC_RBRC, ____},
    {____, ____, ____, ____, ____, ____, XXXX, XXXX, ____, KC_GRV,  KC_BSLS, KC_DQT,  ____,    ____},
    {XXXX, XXXX, ____, ____, ____, ____, ____, ____, ____, ____,    ____,    ____,    XXXX,    XXXX},
  },

  [MISC] = {
    {RESET, ____, KC_WH_U, KC_MS_U, KC_WH_D, KC_PAUS, ____, ____, KC_HOME, KC_PGDN, KC_UP,   KC_PGUP,  ____,    ____},
    {____,  ____, KC_MS_L, KC_MS_D, KC_MS_R, KC_INS,  ____, ____, KC_END,  KC_LEFT, KC_DOWN, KC_RIGHT, ____,    ____},
    {____,  ____, ____,    ____,    ____,    ____,    XXXX, XXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE,  KC_VOLD, KC_VOLU},
    {XXXX,  XXXX, ____,    ____,    KC_BTN1, KC_BTN2, ____, ____, PREVTAB, NEXTTAB, ____,    ____,     XXXX,    XXXX}
  }
};

仕上げ

Pro MicroにQMKを書き込み一通りテストを終えたら、ボディを組み立て。 ボトムプレートはあまったトッププレートを流用するというだいぶかっこ悪い感じですが、妥協です。 二枚を接着。接着面がわずかなので強度ゼロですが、これも妥協。 持ち運ばないし、まぁいいよね。必要になったら補強します。

f:id:kumatoki:20171028173316j:plain

fusion360上でスペーサーの寸法出しておいたので、スペーサーを噛ませて傾斜をつけてネジを締めれば完成。できあがりです。やったね!

f:id:kumatoki:20171027204409j:plain

感想

楽しく作れました。とくにCAD上での設計は楽しい。 砂場で遊ぶ子供のように無邪気に作っては壊しを繰り返して少しずつ要領を掴んでいきました。 そのまま3Dプリントでボディを作ろうかと思いましたが値段がかなり掛かるので今回はアクリルとスペーサーを使いましたが複雑な造形を作ろうとすれば3Dプリントが必須になるでしょう。

傾斜のつき方が上方向には十分取れたのですが、内側方向には不十分となってしまいました。 プレートの設計を妥協したのでしょうがないね。

まぁ、そんな具合に仕上がりました。次はPCBの設計にでもチャレンジしてみようかな。

(この記事はMacbookのキーボードで書かれました)