初めて基板を設計し、PCBを用いた自作キーボードを作ってみました。
自作キーボード設計の練習として、ふつうカーソルキーは右側にありますが、マウスやテンキー操作と合わせて左手で行いたいと思いましたのでそのようなマクロパッドを制作しました。
参照
概要
いままでいまいちやる気が出なかったため基板を起こしてこなかったのですが、ホイール実装するときに基板だと固定が楽ちんなのでこの機に基板を起こしてみることにしました。
先人方のおかげで環境整備が整っており、素人でも難しいことを考えずに基板を設計から発注まで行うことができました。
foostanさんの自作キーボード設計入門を参考にというかまんま進めて自作キーボードにおけるkidadの操作を学習しました。
最初なので10cm x 10cmの基板サイズで制作を行うことにしました。どうせなら実用的なものが作りたいため、今回は一般的なキーボードでは右側についているカーソルキーを左手で操作することを想定したマクロパッドを作ってみました。
ケースはアクリルやFR4サンドイッチ等がありますが3DPが手元にあることや雑にねじ止めすることがあまり好ましくないこと、基板設計の練習が主題であることなどから簡単に3Dモデリングを行いFDMでシンプルなワンピースケースを印刷することにしました。
基板設計をスムーズに行うことができ、シンプルな構造のカーソルキーマクロパッドを制作することができました。
キー配列
便利なツールが充実しているので普通なキーボードを制作する分には自分で図面を引くことは必要ないようです。便利ですね。
まずはキー配列を決定します。
Keyboard Layout Editor (keyboard-layout-editor.com)を用いてポチポチしながらいい感じの配置を探り以下のような配列に決定しました。
上側にカーソルキーを配置し、その他多用するキーなどを割り振ろうと考えました。
やや斜めに配置し指を自然に起きやすくするよう工夫をしました。
キーレイアウトが決定したらjsonデータを取得し、ai03 Plate Generatorを使用することでプレートデータをダウンロードすることができます。
キーピッチ、プレート寸法を指定できます。今回は19mピッチ、プレートは14.2mm幅を指定しダウンロードしました。
このデータを用いてkicadでのフットプリントの配置とプレートデータの作成を行います。
KLEとai03plategeneratorを用いることで簡単にdxfデータを作成することができました。
KLEを操作しながら配列を決定する場合はこの流れが一番楽そうです。
基板
基板の設計はKicadでfoostanさんの自作キーボード設計入門を参照しながら行いました。
従いながら行うことで詰まることなく設計を行うことができました。
一度完成した後には、kicadの大まかな理解をすることができていて二度目三度目からは自分の力で基本的な作業を行うことができるようになりました。とてもよい本だと思いました。
回路図です
pcbエディターです
キー数が少なく面積的にも余裕ある配置なためサクサクと行うことができました。生成したdxfファイルをインポートしピッチをキーピッチ/4とかにすることで最初の配置も簡単に行えます。
チェックを通してパスしたらガーバーとドリルファイルを吐き出し発注を行います。
今回はPCB Prototype & PCB Fabrication Manufacturer – JLCPCBにて発注を行いました。安く届くのも早かったのでまあ良いのではないでしょうか。
ケース
ケースはFDMで出力するという点からも、サポート材を取り出しやすい形状である必要があり、シンプルなものを作ろうと考えました。
トッププレートとボトムプレートが一体型のワンピースケースで基板を挿入するだけというのがシンプルだし組み立ても楽でよいと思い方針を立てました。
挿入面は基板がむき出しとなりますが、細かいところをこだわることは目的ではないのでまあいいかなという感じ。
作りたくなったら基板共通で作り直せばいいといえばそうですし。
先ほど出力したdxfをインポートしFusion360でスイッチの位置と基板外形をスケッチし、それらを押し出して切り抜いてで3dモデルを作りました。
3dモデルとはいうものの平面の押出のみで楽でした。
基板挿入面が突き抜けているため、見栄え等悪くなりますがサポート材をスイッチプレート部分のみで印刷できます。
基板外周にporonシートを張り付け、キースイッチを差し込んだ時にちょうど良い高さになってくれるようにしました。
基板をねじ止めしていませんが、キースイッチの足がねじ代わりにケースに固定してくれます。
ファームウェア
config.h
使用ピンです
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x0121
#define PRODUCT_ID 0x0008
#define DEVICE_VER 0x0001
#define MANUFACTURER Tsuiha
#define PRODUCT fd00
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 4
#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
#define MATRIX_COL_PINS { B6, B2, B3, B1 }
#define UNUSED_PINS
#define DIODE_DIRECTION ROW2COL
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
info.json
最近qmk入れなおしたんですがinfo.jsonがないとhexを吐けなくなったようです。初めて書きました。
{
"keyboard_name": "FD00",
"url": "https://github.com/Tsuiha",
"maintainer": "Tsuiha",
"layouts": {
"LAYOUT": {
"layout": [
{"label":"K01", "x":1, "y":0},
{"label":"K02", "x":2, "y":0},
{"label":"K03", "x":3, "y":0},
{"label":"K11", "x":1, "y":1},
{"label":"K12", "x":2, "y":1},
{"label":"K13", "x":3, "y":1},
{"label":"K20", "x":0, "y":2},
{"label":"K21", "x":1, "y":2},
{"label":"K22", "x":2, "y":2},
{"label":"K23", "x":3, "y":2},
{"label":"K30", "x":0, "y":3},
{"label":"K31", "x":1, "y":3},
{"label":"K32", "x":2, "y":3},
{"label":"K33", "x":3, "y":3},
]
}
}
}
keymaps\via\rule.mk
via対応するにはこの一文が必要らしい
VIA_ENABLE = yes
info_via.json
via対応用のjsonが必要なようです。初めて書きました。
hex吐くのには使わないぽい
{
"name": "fd00",
"vendorId": "0x0121",
"productId": "0x0008",
"lighting": "qmk_rgblight",
"matrix": { "rows": 4, "cols": 4 },
"layouts": {
"keymap": [
[ { "y": 0.25, "x": 1.5 }, "0,1" ],
[ { "y": -0.75, "x": 2.5 }, "0,2" ],
[ { "y": -0.75, "x": 3.5 }, "0,3" ],
[ { "y": -0.5, "x": 1.5 }, "1,1" ],
[ { "y": -0.75, "x": 2.5 }, "1,2" ],
[ { "y": -0.75, "x": 3.5 }, "1,3" ],
[ { "y": -0.5, "x": 0.5 }, "2,0" ],
[ { "y": -0.75, "x": 1.5 }, "2,1" ],
[ { "y": -0.75, "x": 2.5 }, "2,2", "2,3" ],
[ { "y": -0.25, "x": 0.5 }, "3,0" ],
[ { "y": -0.75, "x": 1.5 }, "3,1" ],
[ { "y": -0.75, "x": 2.5 }, "3,2", "3,3" ]
]
}
}
via用jsonの書き方が調べても大して出てこずremapってどうやてっ対応するんだって感じでしたが公式ドキュメントがちゃんとありました。なぜかなかなかたどり着けなかった。
Required Properties | VIA (caniusevia.com)
remap対応したので簡単にキーマップの変更ができるようになりました
組み立て
組み立てに必要なものは
- 基板
- smd ダイオード1N4148W x14
- MX用PCBソケット x14
- promicro
- リセットスイッチ(ピンセットでもいい)
- ポロンシート 1cm x 10cm程度 x2
- ケース
- ゴム足等滑り止め要素
- MXキースイッチ x14
- MXキーキャップ x14
ただキースイッチが14個ついているだけの簡単な構成なので一度でも何かしらの自作キーボードキットを組み立てた方がある方ならビルドガイド不要で組み立てられる内容です。
スルーホール部品は表面からはんだ付けし表面実装部品は裏面ではんだ付けします。
組み立てる前に最初にファームウェアを焼いて動作確認したらベストなのかもしれない。
Keyboard/FloppyKBD/FD00/firmware at main · Tsuiha/Keyboard (github.com)
remap対応しました
基板が届きました。おー
ダイオードの実装は片方のパッドに予備はんだをして行います。
予備はんだを溶かしながらピンセットでダイオードをパッドに置きはんだをなじませます。
もう片方が浮かないように気を付けます。
もう片方のパッドもはんだ付けします。
同じ要領でpcbソケットもはんだづけします
これで表面実装部品のはんだ付けは終わりです。
スルーホール部品をはんだ付けしていきます。
promicroにピンヘッダをはんだ付けします。
この向きでピンヘッダを差し込みます。傾かないようにやります。
promicroを裏面から差し込みマスキングテープ等で固定します。
ニッパで飛び出る分のピン先をカットします。
はんだ付けします。
必要があればリセットスイッチをはんだ付けします。
これを使用します。
はんだづけおわりです。フラックスクリーナーで汚れを落とします。
ポロンシートをカットして裏面両端に貼り付けます。
ケースに基板を差し込みます
スイッチをはめていきます。ねじ止めしていないため基板とスイッチ穴の位置とを合わせる必要があります。
なんとなく位置を合わせてから差し込んでいきます。
スイッチをはめました。
ゴム足を貼って完成です。いい感じですね。薄くグリップ力もあり自由度が高いことから今回スーパーXを滑り止めとして採用しました
いいね!
JLCPCBでレジンケースを注文してみました。FDMよりも見た目がぐっといいですね。
1mm厚の10x10cm金属板を挿入しウェイトとする計画でしたがはみ出してしまいました。
はみ出してますがとりあえず重さが出ていい感じ
おわり
キーボードの基板設計を学ぶことができました。
おっくうで基板設計を後回しにしていましたがこれからは基板での自作キーボードを作っていけますな。
Keyboard/FloppyKBD/FD00 at main · Tsuiha/Keyboard (github.com)
コメント