[自キ]手配線で左右分割40%キーボード(試作)を作る

自作キーボード

40%の左右分割キーボードを手配線で作りました。自キ制作レポートです。

前回は市販のトッププレートで作りましたが今回はアクリルカットを注文し自作キーボードを作りました。

前の記事:[自キ]手配線で60%キーボード(試作)を作る

設計方針

左右分割キーボードを作ったことがないので挑戦します。

今回はプレートを図面を書いてアクリルカットを頼んでみることにしました。

前回60%キーボードを作りレイヤー切り替えや右親指でShiftを押すのはとても快適だった。しかしそもそも小指でシフトやコントロール押しにくいし、右側の記号群は全て小指で押さないかんのか?動かしにくい小指の負担半端ないとも思う。

加えて左右分割キーボードについて調べてみるとcorneとかelephant42とか40%のキーボードが目立っていました。わざわざ左右分割キーボードを作るということは40%で効率化されたキーボードでなくてはあまり意味がないのではないかと思った。なので今回は左右分割でキー数は40%程度とした。

今回の目的は左右分割キーボードの作り方を学ぶこと、その後キー数の少ない40%キーボードを体験することであり、そのために左右分割40%キーボードを手配線で試作することにした。

出来上がり

見栄えはそれなりに良いと思う。アクリルカットパワー。

キーキャップは取りあえず家にあるものをつけているので付け替えたい。

分割キーボードは打ちやすいですね。今までストレスを受けながら文字を打っていたことに気づかされました。左右別で位置や角度を自由に変えれるのはいいことです。

ただ配列には慣れが必要ですねやっぱり。

底打ちが柔らかいので緩衝材を挟んだ効果はあるのかなと思います。

材料

キーレイアウトとアクリルカット

キー配列について最初はcorneやelephant42などをクローンで作ろうと思っていた。が、当初考えていたキーボードケースやプレートの塩梅からカラムスタッガードが構造上無理なのではとなった。

いろいろいじくっていた結果なぜかロウスタッガードになった。ぱっと見きれいに三角形になっていてこれでいいかと思いこのような形に。


結局アクリルカット頼むしかないなと思いプレートはアクリルカットを注文することにした。値段比較して安いのでelecrowで注文することにした。3000円だった。わりとする。

アクリルカットを注文するには図面を書かなくてはならない。2D CAD難しかった。


当初は木材を使ってトップマウント方式でケースというか足を作ろうと思っていたがアクリルカットでプレートを作るということでどうしようかなと。

マウント方式を調べているとガスケットマウントというものがあるらしい。よく知らないのだがどうやらプレートを緩衝材を挟んで固定することで打鍵がよくなるらしい。ミリしらで似たようなことをしてみるかと思った。

ということで緩衝材挟んでトッププレート浮かせればいいらしいというミリしらガスケットマウントな感じで緩衝材を挟み込んだトップマウント?になった。


この配列でちょうど上に2キー分スペースが余っていたのでここにpromicroを配置することにした。トッププレートの上にスペースが余っているのでここに配置することとしトッププレート下にワイヤを通すための切れ込み穴を入れた。

ボトムプレートは穴をあけキースイッチの中央の太い足をはめ、ずれ防止と厚み対策。

マウント方法とか調べていたときにPCBにスリットが入っているのを見てこれもやるかとボトムプレートにスリットを入れた。これでなんかよくなるらしい。

200 x 200 mmのサイズで注文するのだがスペースが余ったのでpromicroカバーと簡易チルト足を適当に加えて注文した。おまけパーツ。

組み立て

アクリルカットが届きました。空いたスペースに詰め込んだおまけパーツがおまけで増量してありました。

キースイッチをはめました。小指は軽い方がいいよなと思い軽い軸をはめました。軽い軸と重い軸でアンバランスな気もします。

キースイッチが少し緩い。0.15 mmとか0.2 mmぐらい図面より広い。少しきつめに発注しなきゃダメなんだな。

右の写真。キースイッチはめたときに割れてしまった。これまでの試作ではポリカーボネートとか割れにくかった、アクリルはもろいので気を付けます。

キーキャプ抜くときにすっぽ抜けないようにボンドで固定。

前回60%キーボードのときはダイオードの足を曲げてキースイッチの上ではんだ付けしましたが今回はキースイッチのピンを曲げてスイッチの横ではんだ付けしようと思います。足を曲げるの結構面倒だったので。こっちの方が楽でした。

ダイオードをはんだ付けしました。一番下、いらない気もしましたが揃えた方がいいかと付けました。

promicroにピンをはんだ付け。切れ込みにはまらなくなるのでできるだけまっすぐ付けます。

プレートの切れ込みに差し込みピンを曲げます。

ここでもまたアクリルが割れちまった。

ワイヤで横方向とpromicroのピン、promicro間の配線。TRSソケットとかないので左右はワイヤで直接つなぎます。

やっぱりpromicro周りの作業が苦手です。

それぞれ指定したピンと行列をつなぎます。通信線はファームウェアで指定したピンとVCC、GND同士の3本をつなぎます。LEDつけるにはもう一本いるらしいです。

ワイヤー数多くなりますが単純な6×6行列で配線しました。

おまけパーツのpromicroカバー。合わせたサイズのボルトとスペーサーはありません。ナットを重ねてスペーサー代わり。20 mmのねじですが15 mm程度にカットして用いました。ねじをカットするとナットをはめるのが大変。

トッププレートに固定。ただの見栄え要素ですかね。

こちらもおまけパーツの足。前回の余りの木材で足を作ろうと思っていますがおまけパーツでアクリルカットだけでも使えるように簡易チルト足。

15 mmと19 mmの二種類の高さにしました。どれくらいがちょうどいいのでしょうかね。

上の引っ掛けるところをボトムプレートの上に引っ掛け、真ん中に穴をあけねじを差し込みボトムプレートの下でつっかえさせます。おまけなんで適当です。横のスリットにパーツをさし固定します。

ちょっとぐらつきますがまあおまけなので。

なんか家にあった3 mm厚のPORONを緩衝材にトッププレートを浮かせます。

プレート間が4 mmあり厚さが足りなかったので余っていたOリングも差し込みます。

プレートの穴に合わせ穴をあけます。

ボトムプレートに乗せネジをさします。

トッププレートを載せてねじ止めしたら簡易チルト足ver完成。トッププレートが固定されていないので底打ちが柔らかい気がします。足をさした部分打鍵感が硬かったのでスリットも意味はあるんですかね。

木材をカット、ボンドで接着。今回は左右をねじ止めしこの木材を足とします。

ネジは13 mm程度にカットし2 mmのねじ穴をあけ本体に取り付けゴム足を貼り付けたら完成です。

Firmware

rule.mk

# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = caterina
# Build Options
BOOTMAGIC_ENABLE = no      
MOUSEKEY_ENABLE = yes        
EXTRAKEY_ENABLE = yes     
CONSOLE_ENABLE = no         
COMMAND_ENABLE = no         
NKRO_ENABLE = yes            
BACKLIGHT_ENABLE = no       
AUDIO_ENABLE = no           
UNICODE_ENABLE = no         
BLUETOOTH_ENABLE = no       
RGBLIGHT_ENABLE = no       
SWAP_HANDS_ENABLE = no      
SPLIT_KEYBOARD = yes

#SPLIT_KEYBOARD = yesで左右分割にできるらしい。


config.h

#pragma once
#include "config_common.h"
#define MASTER_LEFT
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED 
#define PRODUCT_ID 0x0003
#define DEVICE_VER 0x0001
#define MANUFACTURER Tsuiha
#define PRODUCT split40percent01

/* key matrix size */
#define MATRIX_ROWS 12
#define MATRIX_COLS 6
#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7,F6 }

#define MATRIX_COL_PINS { B5, B4, E6, D7, C6, D4 }

#define MATRIX_ROW_PINS_RIGHT { B5, B4, E6, D7, C6, D4 }

#define MATRIX_COL_PINS_RIGHT { B6, B2, B3, B1, F7,F6 }

#define UNUSED_PINS
#define DIODE_DIRECTION COL2ROW
#define SOFT_SERIAL_PIN D2

#define DEBOUNCE 5

#define MASTER_LEFTでUSBを挿した方が左手になるらしい。

左右対称に配線したので左右でpromicroのピンが反転、左右別にピンを指定した。

#define SOFT_SERIAL_PIN D2で左右間の通信ピンを指定。


split40percent01.h

#pragma once

#include "quantum.h"

#define LAYOUT( \
    L00, L01, L02, L03,                               R00, R01, R02, R03, \
    L10, L11, L12, L13, L14, L15,           R10, R11, R12, R13, R14, R15, \
    L20, L21, L22, L23, L24, L25,           R20, R21, R22, R23, R24, R25, \
                   L30, L31, L32,           R30, R31, R32,                \
                        L40, L41,           R40, R41,                     \
                             L50,           R50	                          \
    ){ \
        { L00,	 L01, 	L02, 	L03,	KC_NO,	KC_NO }, \
        { L10,	 L11, 	L12, 	L13,	L14,	L15 }, \
        { L20,	 L21, 	L22, 	L23,	L24,	L25 }, \
	{ KC_NO, KC_NO, KC_NO,  L30,	L31,	L32 }, \
	{ KC_NO, KC_NO, KC_NO,  KC_NO,	L40,	L41 }, \
        { KC_NO, KC_NO, KC_NO,  KC_NO,	KC_NO,	L50 }, \
        { R03,	 R02, 	R01, 	R00,	KC_NO, KC_NO }, \
        { R15,	 R14, 	R13, 	R12,	R11,	R10 }, \
        { R25,	 R24, 	R23, 	R22,	R21,	R20 }, \
	{ KC_NO, KC_NO, KC_NO,	R32,	R31,	R30 }, \
	{ KC_NO, KC_NO, KC_NO,  KC_NO,	R41,	R40 }, \
        { KC_NO, KC_NO,	KC_NO,  KC_NO,	KC_NO,	R50 } \
    }

後になって何となく理解したがこれはconfig.hとkeymap.cの橋渡しをするファイルなのかな。

下の行列でconfig.hで指定した行列に名前を付けて上の行列で実際のキー配列を描いてその要素名を打ち込めばよいのか。

いろいろなキーボードのファイルを見てみてどれも書き方が異なっていたので意味が分からなかった。前回の60%キーボードのkeymap.cのぐちゃぐちゃさは解消することができるのか。めんどくさいからやらんけど。


keymap.c

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
//,--------+--------+---------+--------+---------+--------.   ,--------+---------+--------+---------+--------+--------.
   KC_ESC  ,KC_Q    ,KC_W     ,KC_E    ,                                          KC_I    ,KC_O     ,KC_P    ,TG(2)   , \
//|--------+--------+---------+--------+---------+--------|   |--------+---------+--------+---------+--------+--------|
   KC_TAB  ,KC_A    ,KC_S     ,KC_D    ,KC_R     ,KC_T    ,    KC_Y    ,KC_U     ,KC_K    ,KC_L     ,KC_LBRACKET,TG(1), \
//|--------+--------+---------+--------+---------+--------|   |--------+---------+--------+---------+--------+--------|
   KC_GRAVE,KC_Z    ,KC_X     ,KC_C    ,KC_F     ,KC_G    ,    KC_H    ,KC_J     ,KC_COMM ,KC_DOT   ,KC_SLSH ,KC_INT1 , \
//`--------+--------+---------+--------+---------+--------/   \--------+---------+--------+---------+--------+--------'
                               KC_LGUI ,KC_V     ,KC_B    ,    KC_N    ,KC_M     ,KC_LALT ,                             \
//`--------+--------+---------+--------+---------+--------/   \--------+---------+--------+---------+--------+--------'
                                        KC_LCTRL ,KC_LSHIFT,   KC_BSPC ,KC_DEL   ,                                      \
//`--------+--------+---------+--------+---------+--------/   \--------+---------+--------+---------+--------+--------'
                                                  KC_SPACE,    KC_ENTER                                                \
//                 `----------+--------+---------+--------'   `--------+---------+--------+---------'
),

LAYOUT( 
//,--------+--------+---------+--------+---------+--------.   ,--------+---------+--------+---------+--------+--------.
   KC_ESC  ,KC_7    ,KC_8     ,KC_9    ,                                          KC_QUOTE,KC_MINUS ,KC_EQUAL,TG(2)   , \
//|--------+--------+---------+--------+---------+--------|   |--------+---------+--------+---------+--------+--------|
   KC_TAB  ,KC_4    ,KC_5     ,KC_6    ,KC_0     ,KC_SLSH ,    KC_PGUP ,KC_SCOLON,KC_UP   ,KC_RIGHT ,KC_MS_WH_UP,TG(1), \
//|--------+--------+---------+--------+---------+--------|   |--------+---------+--------+---------+--------+--------|
   KC_GRAVE,KC_1    ,KC_2  ,KC_3,KC_DOT,KC_INT1,KC_PGDOWN,KC_LEFT ,KC_DOWN ,KC_MS_WH_LEFT,KC_MS_WH_DOWN,KC_MS_WH_RIGHT, \
//`--------+--------+---------+--------+---------+--------/   \--------+---------+--------+---------+--------+--------'
                               KC_LGUI ,KC_COMM  ,KC_JYEN ,    KC_RBRACKET,KC_BSLASH,KC_LALT,                           \
//`--------+--------+---------+--------+---------+--------/   \--------+---------+--------+---------+--------+--------'
                                        KC_LCTRL ,KC_LSHIFT,   KC_BSPC ,KC_DEL   ,                                      \
//`--------+--------+---------+--------+---------+--------/   \--------+---------+--------+---------+--------+--------'
                                                  KC_SPACE,    KC_ENTER                                                \
//                 `----------+--------+---------+--------'   `--------+---------+--------+---------'
),

    LAYOUT( (ry

キー配置は全然正解がわからない。とりあえず使いそうなキーを並べてみたが、、、

キーマップの検討

Keyboard Layout Editorで作成しました。

レイヤーは2つでとりあえず慣れることを目的としてFキーなど網羅していませんが主に使うキーを詰め込んでみました。シフト+数字のキーコードがわからず調べるのに時間がかかってしまいました。日本語キーボードとusキーボードで記号類異なりすぎてめんどくさい。一覧があると見やすいですねありがたい。

qmk_firmware/keymap_jp.h at master · qmk/qmk_firmware · GitHub

揃ってませんがOEMとDSAを組み合わせて手を置いてしっくりくるような感じになりました。とりあえずマステに書いてますが煮詰まってきたらレーザー刻印とかして頼んでみたいです。

反省点

左右分割キーボードを作ることができた。

アクリルプレートはもっと煮詰めた方がよいように思う。今回は小面積なプレートとしたが面積を増やしいろいろ調整するだけ打ちやすさが改善しそう。

木材の足は当然だが少し固定力が弱い。やはりケースで四方を覆うか底面をつけるべきなのだろう。するとボトムプレートと底面で下が二重になり無駄な気もする難しい。

配列はこれで打ちやすい気もするがカラムスタッガードの方が単純に指の移動量少ないし良いのかな。

アクリルカットの注文でキースイッチが緩かったのではめるところを少しきつく指定する。

アクリルカット頼むだけでなんか見栄えめちゃくちゃよくなった。そりゃそうか。

アクリルのサンドイッチにすることでプレートが2枚になり前回よりも強度の向上と配線を外に出さないことができた。

どうすればよくなるのか知識がないが打鍵感は改善していきたい。

ここまでで4つほどキーボードを試作してきました。qmkの書き方もようやくわかってきた気がする。初歩的なキーボードはいろいろ便利なツール使って自分で作れるのかなと思う。

qmkとか基本コピペだけでできるので便利すぎる。アクリルカットも金はかかるけど線引くだけ。実際のところ自作キーボードってかなり敷居低いんだと思う。キットとか買えばさらに敷居下がるのだろうし。

これで4記事目となりましたが試作キーボード一段落かなと思います。といってもPCB設計とかファームウェアの構築とかやってないです。とりあえず試作なのでそれらはこれからということで。

 

次の記事:[雑記]PulsarGamingGears メカニカルスイッチテスター

コメント

タイトルとURLをコピーしました