[自キ]8mm厚の低背左手デバイスを手配線で作る

自作キーボード

FDM3DP製のケースと手配線で自作キーボードを作ります。

デスクからプレートまでの厚さ8mmの薄型のFPSゲーム用左手デバイスです。

ゲーミングキーボードです。

カーブした配列やxiao rp2040を新しく採用しました。

設計方針

今回は手配線でゲーム用の左手デバイスを作ります。

以前制作したものから乗り換えられるモノを作ります。

あと銅箔テープ使ったら楽だよなとずっと思ってたのですが手配線キーボードを組む機会がなく放置していたのでそれをやっておきたいなというものです。

もう数年使用してきて愛着もあるものですが不満点もまああります。こんなんだし。

高さ

立体形状でパームレストもあり、高さがあるということです。

高さがあると現在のスライドデスクと相性が悪いことや、マウスを持つ右手と高低差ができてしまいます。

よって以前アクリル板を初めて使用した時と同じ構造で薄型のキーボードを作ります。薄くすることでパームレストも不要にします。 

私は手配線のメリットは試作の早さと薄型化にあると思っています。

ピンを折り曲げた手配線でPCB分の厚さを浮かし、本体の厚み=スイッチの厚みにしたものです。

配列

配列としてはwasdがひし形になっており移動キーは打ちやすいのですが、その分数字キーがやや遠く感じられます。

FPSにおいて数字キー1, 2を薬指で、3, 4を人差し指で押します。

また人差し指でx, cを押します。

このことから、FPS向けのデバイスに関しては縦の運指に特化したカラムスタガードよりも、ロウスタッガードをベースとするほうが向いていると判断しました。

引き続きANSIに比べてzは左寄りに、xcは右寄りに配置することとします。

またWillowやGRINのようなカーブした配列に挑戦してみました。

キー密度が下がるので全体としてはキー配置が広がってしまいますが、やや押しにくい5, T, G等のキーの位置が下がり押しやすくなること、親指キーが全体的に上ずっていることを解消されることを期待します。

材料

3dpでケース作ればスイッチキーキャップ除いて材料費はマイコン+手元にあるものといった風で安い。

物理配列のデザイン

今回配列は19mmの四角をブロック化して配列決定、後に必要な14mm四角や爪部分等を追加し一斉適用しました。

ここら辺はどうするのが最適解なのかなかなかわからずです。使いやすい2dcadソフトがそもそも見つからない続けている。

カーブ配列の決定は手作業でちまちま動かしてしっくりくるまで試行錯誤しました。

ロウスタッガードとキー位置を比較すると端のキーが手前に下がってきています。

使用者によってキーボードの傾き具合は異なると思うので人によりそうですが

親指キーが下がってくることで指を伸ばし気味のスタイルの人にとってはキーが押しやすくなるのではなかろうか。

逆に手前に下がってきている分上のキーと下のキーとで遠くなってしまったと感じる人もいるかもしれない。

私としては、親指を伸ばさずにn, m, spc, hと6キーを操作することができて親指操作性が向上しました。

5, t, gあたりは指を伸ばす関係上誤打することもあったのですがそこらへんが下に下がり近くなったことで誤打が減ったと感じます。

ここは変更点ではありませんがz, c, vの位置が左右に開いたことで薬指と人差し指を内側に入れ込まずにスムーズに操作することができます。

マイコンにxiao rp2040を採用するためピンが11なため5×6で30キーのマトリクスに収めました。(ほかのマトリクス方式を採用すればもっとキー数は増やせますが)

組み立て

dxfファイルを出力してfusion360で適当に押し出してケース作ります。

とりあえず作ろうと思ったので何もこだわらずにプレートと容器をねじ止めする感じです。

出力したらキースイッチはめて接着剤で止めて配線していきます。

薄型化のためにピンを折り曲げておきます。

使用したスイッチは5pinスイッチですが、端の2pinとボトムの合わせするよりも取り除いたほうが楽なので取り除いてしまいました。

手配線で何がめんどくさかったかというと配線のはんだ付けです。

ワイヤーとワイヤーを保持してはんだとはんだごてを持ってはんだ付けをするのは腕が二本しかない人にとっては単純作業でもめんどくささがあります。またワイヤーははんだのノリがあまりよくないですからそこもちょっとめんどくさいです。

そこで銅箔 テープの出番です。貼ってしまえば手で保持する必要はありません。また銅箔ははんだののりが非常によくささっと作業できます。

これでダイオードのみをピンセットで持ちはんだ付けするだけで済みます。

やってることプリント基板の下位互換だと言われればそうだし強度とか知りません。

colの配線もペタペタ銅箔テープで行いましたが、パッドとして銅箔テープの切れ端を貼ってすずメッキ線でやるほうがよさそうです。

単純にはんだ付けの補助として銅箔テープは有用ですね

とても作業は楽でした。見た目をこだわりたいのでなければ空中配線<貼り付け配線なのではなかろうか。

xiao rp2040にetfe線をはんだ付けします。

xiao rp2040を嵌めて、colとrowにはんだ付けします。

デジタルテスターではんだ付けがちゃんとできていることを確認します。

なんか緩衝材にevaシート貼り付けてみたり

ボトムケースと合わせて完成です。

3dpケースだしラフな設計なのでまあゆがみが出てます(ちゃんとデータ作れ)。ゴム足として液状のスーパーXを使ってその歪みを均してしまいます

適当に塗りたくって、クッキングシートの上において固めて剥がせば平面だし完了です。

qmk firmware

rule.mk

空欄

config.h

空欄

info.json

{
    "keyboard_name": "fd06",
    "manufacturer": "Tsuiha",
    "maintainer": "Tsuiha",
	"processor": "RP2040",
    "bootloader": "rp2040",
	"board": "GENERIC_RP_RP2040",
    "diode_direction": "ROW2COL",
    "features": {
        "mousekey": true,
    },
	"build": {
                "debounce_type":"sym_eager_pk",
                "firmware_format": "uf2"
    },
	"debounce":5,
    "matrix_pins": {
        "cols": ["GP3", "GP4", "GP2", "GP1", "GP0", "GP7"],
        "rows": ["GP6", "GP29", "GP28", "GP27", "GP26"]
    },
    "usb": {
        "device_version": "0.0.3",
        "pid": "0x0012",
        "vid": "0x0121",
		"polling_interval":1
    },
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"label":"0", "x":0, "y":0},
                {"label":"1", "x":1, "y":0},
                {"label":"2", "x":2, "y":0},
                {"label":"3", "x":3, "y":0},
                {"label":"4", "x":4, "y":0},
                {"label":"5", "x":5, "y":0},

                {"label":"tab", "x":0, "y":1},
                {"label":"q", "x":1, "y":1},
                {"label":"w", "x":2, "y":1},
                {"label":"e", "x":3, "y":1},
                {"label":"r", "x":4, "y":1},
                {"label":"t", "x":5, "y":1},

                {"label":"caps", "x":0, "y":2},
                {"label":"a", "x":1, "y":2},
                {"label":"s", "x":2, "y":2},
                {"label":"d", "x":3, "y":2},
                {"label":"f", "x":4, "y":2},
                {"label":"g", "x":5, "y":2},
                {"label":"h", "x":6, "y":2},

                {"label":"sft", "x":0, "y":3},
                {"label":"z", "x":1, "y":3},
                {"label":"x", "x":2, "y":3},
                {"label":"c", "x":3, "y":3},
                {"label":"v", "x":4, "y":3},
                {"label":"b", "x":5, "y":3},
				
                {"label":"ctrl", "x":0, "y":4},
                {"label":"esc", "x":1, "y":4},
                {"label":"n", "x":2, "y":4},
                {"label":"space", "x":3, "y":4},
                {"label":"m", "x":4, "y":4}
            ]
        }
    }
}
https://github.com/qmk/qmk_firmware/blob/master/docs/reference_info_json.md
https://github.com/qmk/qmk_firmware/blob/master/data/schemas/keyboard.jsonschema

ここらの公式ドキュメントとqmk_firmware内の他の人のデータ参考にすれば書けそうです。

最近のqmkは全部info.jsonに記述するようです。

“processor”: “RP2040”, “bootloader”: “rp2040”, “board”: “GENERIC_RP_RP2040”,

rp2040の使用を宣言します。

debounce_type”:”sym_eager_pk

デバウンスタイムをキー入力の後入れして実質デバウンスタイム0になります。

“firmware_format”: “uf2”

rp2040はhexファイルでなくuf2ファイルというのを使用します。

“matrix_pins”

xiao rp2040の場合マトリクスのピンはPの数字を入れればよいです。

“polling_interval”:1

ポーリングレートを1000hzにします。デフォルトが1000hzになっているという話も聞きましたがどうなんでしょう。そもキー入力だけであれば1000hzの恩恵を受けるのか?という話はありますが。

fd06.h

#pragma once

#include "quantum.h"

#define LAYOUT( \
  K00, K01, K02, K03, K04, K05, \
  K10,   K11, K12, K13, K14, K15, \
  K20,   K21, K22, K23, K24, K25,K35, \
  K30, 	  K31,    K32, K33, K34, K45,  \
  K40, 			    K41, K42, K43, K44 \
  ) \
  { \
    { K00, K01, K02, K03, K04, K05 }, \
    { K10, K11, K12, K13, K14, K15 }, \
    { K20, K21, K22, K23, K24, K25 }, \
    { K30, K31, K32, K33, K34, K35 }, \
    { K40, K41, K42, K43, K44, K45 } \
  }

上にkeymap.cで使用する行列を、下にmatrixで指定した行列を記述し通し番号で対応を取ります。

keymap.c

#include QMK_KEYBOARD_H

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
  KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, 
  KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, 
  KC_J,  KC_A, KC_S, KC_D, KC_F, KC_G,KC_H, 
  KC_LSFT, KC_Z,    KC_X, KC_C, KC_V, KC_B,  
  KC_LCTL, 		    KC_ESC, KC_N, KC_M, KC_SPC 
  ),

[1] = LAYOUT(
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______
  ),

[2] = LAYOUT(
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______
  ),

[3] = LAYOUT(
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______,_______,
	_______,_______,_______,_______,_______
  )
};

キーコードを自由に決めます。

https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md

とりあえずレイヤーなしにしましたが必要に応じて増やします。

QMKMSYSでコンパイルしてuf2ファイルを出力します。

xiao rp2040のbootボタンを押しながらpcに接続するとドライブのように認識されるのでuf2ファイルを突っ込みます。自動で再起動してキーボードとして認識するので動作確認しましょう。

反応しないキーや対応しないキーがあったらmatrixピンを見直したりはんだ不良の個所を探します。

rp2040だとちょっと頑張らないとremap対応できないようですがどうなんでしょう。

完成

model->FloppyKBD06:WLP-HWとか適当に型名をつけておきます。

もともとはusbはマイコンから引っ張ってきてtypecコネクタで出したかったのですがまあxiaoそのままでいいかという感じです。xiao小さくていいですね。これから使っていきたいと思います。

本体厚さ8mmと薄型で、ロープロスイッチのキーボードと同等の高さとなりました。よいです。

見栄えもコンパクトでかっこいいのではないでしょうか。

yushakobo fairyスイッチ 多くの市販キーボード搭載品よりも静かで軽く、とてもコスパいいスイッチと感じました。強く底打ちした時ぶにっとした感じがありますがまあ実用上問題ないので。

終わり

配列決めた後はちゃちゃっと作ったので完成度は高くありませんがいいものができたのではないでしょうか。

(手元のanycubic kobraに合わせてありますしこの通り不完全なデータですが)投げてあるので興味ある人は作っていただけたら嬉しいです配列は結構きれいにできたと思っているので。↓

https://github.com/Tsuiha/Keyboard/tree/main/FloppyKBD/FD06/WLP-HW

目的としてまず手配線は薄型化に有効であるという話ができたのでよしとします。

またゲームで十分に使用できて薄いこととカーブした配列は有効だと感じました。

wootingやそれに続いて多く発表されている流行の応答性の高いキーボードとは方向性が異なりますが、MXでありながら薄型、0デバウンス、スイッチ選択の自由度、(人によるが)運指のしやすさ、とゲーム用途で選択肢に入るものができたと私は思っています。これでいえば費用7k程度で安いし。

配列に関しては今後に生かしたいところで、今まで完成度高いものをつくってきていないのもあるしゲーム用左手デバイスとしてもうちょっと詰めてみようかと思ったりもします。


コメント

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