原価厨がキーボードを自作した話

この記事は自作キーボード #3 Advent Calendar 2018の13日目の記事です。

100mm×100mm未満の基板を設計し, 組み立てた話です。

動機

MagicForce smart 49keyへの不満

上海問屋 DN-914809 英語49キー ポケットサイズメカニカルキーボード(中華青軸) |パソコン通販のドスパラ【公式】

ホームポジションから手を動かさなくていいという売り文句に惹かれてMagicForce smart 49keyを使っていましたが, キー配列を変更できず, Fn+Shiftの同時押しが面倒であるなどの不満がありました。

280gのスイッチを試すため

ゆかりさんの投稿を見た友人が280gスイッチに興味を持ったため, 試し打ちできるようにキーボードを作ることにしました。基板サイズが100mm×100mm以内のキーボードとしてはFoobarが有名ですが, ALPS軸に対応していないため自分で設計することになりました。

基板製造が安い

100mm×100mm以内であれば10枚まで$5で製造してもらえます。なんと1枚あたり$1未満です!! 安い!!

また, 当時はFusionPCBで$1で100mm×100mm以内の基板を3枚製造してもらえるキャンペーンをしていたため, ついでに一体型のキーボードの基板も発注しました。

設計

foostanさんの本を読んでください

booth.pm

PCB

本を読んでください。

PCB素材のプレート

PCBと同様にカットアウトやネジのフットプリントを配置します。FusionPCBとALLPCBを利用しましたが, Edge.Cutsに矩形の線を引いておけばそのとおりに穴を開けてくれました。ただし, 向こうでドリルファイルを作るからなのか他の基板より製造に時間がかかります。

アクリルプレート

Kicadから出力したdxfファイルは線が二重になっていたり曲線が(多数の)直線に分割されていたりして修正するのが面倒だったので, DraftSightで新たに線を引きました。

Tip: 四角形をグリッドの中央に配置する

19.05mm間隔のグリッドに14mmのカットアウトを配置する際, グリッドの中央に配置するために工夫が必要です。

(あとで書く)

Tip: 四角形の大きさ

スワップソケット対応のものにはぴったりとはまるトッププレートが必要なためサンプルを作って試したところ, 僕が使ったレーザー加工機では13.4mm角がキツキツでした。そのサイズでカットしたところ, 一部の穴にスイッチがはまらず, 力を掛けすぎてプレートを割ってしまいました。スワップソケットを使う場合はスイッチの爪が噛み合う厚さの素材で作ることをおすすめします。

発注・出費

業者名 内容 価格(送料を含む)[円] 備考
KBDfans キーキャップ, キースイッチ 5668
Aliexpress FatProMicro×1 490
KPrepublic キーキャップ, キースイッチ 10417
Aliexpress ProMicro×6 2418 予備を含む
秋月 電子部品 2355 キーボード用でない物も含む
ヒロスギ ネジ, スペーサー 2290
Aliexpress FatProMicro×6 2251 予備
FusionPCB 基板 3097
遊舎工房 スワップソケット 1134
ALLPCB トッププレート 3014 5枚
ホームセンター ゴム足, アクリル板 1054
100均 ケーブル, はんだ 540
創房 アクリルカット 177 9分
合計 34728

キーキャップ・キースイッチ込みで1台あたり1万円ちょっとで作れました。

組み立て

別の記事にします

完成

hogefuga w/ APC緑軸

f:id:y_sanagi:20181213001805j:plain
hogefugaキーボード

4x4_hotswap

f:id:y_sanagi:20181213001821j:plain
4x4_hotswap

3台目(hogefuga w/ Matias Quiet Click)は組立中です。

反省

  • hogefugaのボトムプレートの基板の片面にだけ銅箔を貼ったところ, 基板が反ってしまった
  • TRRSジャックにPJ-320のフットプリントを使ったところ, 秋月で買ったMJ-4PP-9はプラスチック製のピンが大きく, 実装時に浮いてしまった

まとめ

アルミ製ケースを含めて$150のPlanckは安いとわかりました

使用したライブラリ

GitHub - foostan/kbd: Publish data for Keyboard

GitHub - keebio/Keebio-Parts.pretty: Various KiCAD footprints for mechanical keyboard parts

GitHub - tmk/keyboard_parts.pretty: KiCad modules for keyboard design

成果物

基板

GitHub - yswallow/4x4_hotswap

GitHub - yswallow/hogefuga-kbd

QMKファームウェア

GitHub - yswallow/4x4_hotswap_firmware

GitHub - yswallow/hogefuga_firmware

この記事は 4x4_hotswap(kailh speed copper/eucalyn改配列)で書きました。

ProMicroのブートローダーをQMK-DFUにする

動機

4x4_hotswapには物理リセットボタンがないためキー操作でブートローダーに入れるようにしたいが, (ProMicroに初めから入っている)CaterinaブートローダーではRESETキーを押しても反応しなかった(今は対応しているかもしれない。試していない。)

追記 2018/11/19

config.h#define CATERINA_BOOTLOADERと書くことでCaterinaのままでRESETキーに対応することがわかった。FatProMicroの死が無駄だったことがわかって完全に虚無。

方法

  1. 余っているProMicro(Caterina)にArduinoISPを書き込む
  2. QMK Firmwareを書き換え, makeする
  3. ISP化したProMicroにブートローダーを書き換えるProMicroを繋ぐ
  4. 書き込む

余っているProMicroにArduinoISPを書き込む

Arduino IDEから ファイル>スケッチ例>11.ArduinoISP>ArduinoISP を選択し, そのままProMicroに書き込む。ArduinoにあるピンがProMicroにはないと言われているが, 動くものは動く。既にQMK Firmwareを書き込んでいる場合はリセットする必要があるかもしれない。

QMK Firmwareを書き換え, makeする

config.h

#define QMK_ESC_OUTPUT F1 // usually COL
#define QMK_ESC_INPUT D5 // usually ROW
#define QMK_LED B0

を書き足す。

rules.mkBOOTLOADER = qmk-dfuと書く。

make keyboard:keymap:productionを実行する。

ProMicroをつなぐ

ArduinoISPを書き込んだProMicroとブートローダーを書き換えるProMicroのVCC, GND, 14番, 15番, 16番 を繋ぐ。ISP側の10番は書き換える側のRESETに繋ぐ。

Pro Micro(クローン)を文鎮化から復活 - Qiita

書き込む

ArduinoISPを書き込んだProMicroのポートが/dev/ttyACM0の場合,

avrdude -c avrisp -p m32u4 -P /dev/ttyACM0 -U flash:w:"keyboard_keymap_production.hex":a -U lfuse:w:0x5E:m -U hfuse:w:0xD9:m -U efuse:w:0xC3:m -U lock:w:0x3F:m

を実行する。メモリ全域を書き換えるため, やや時間がかかる。

動作

リセットしたときにTX LEDが点滅するようになった。

ファームウェア書き込み時には make keyboard:keymap:avrdudeではなくmake keyboard:keymap:dfuとする必要がある。

分割キーボードで使うとRESETキーを押したときに両手ともリセットされ, そのままコンピュータでファームウェアを書き込むとmicroUSBケーブルが挿さっているほうにだけファームウェアが書き込まれる。挿さっていないほうはTX LEDが点滅したままになる。

QMK_ESC_OUTPUTQMK_ESC_INPUTが何なのかはわからない。

続き

本来の目的である4x4_hotswap用のFatProMicroに書き込もうとしたところ, 接触不良でFuse bitが全て0に書き換えられ, 何もできなくなった。買い直す必要がある。ブートローダーが壊れても同様にArduinoISPで直せるし, モゲMicroもArduinoISP経由でファームウェアを書き換えれば(分割キーボードの右手側であれば)使えるが, こうなってしまうと全くダメだ。(高電圧を掛ける装置を使えば直せると聞いたこともあるが, そんな装置は手元にない。) 接触不良には注意しよう!

なお, 文鎮化したFatProMicroは強いと言われるmicroUSB端子の耐久試験に使うつもりだ。

参考

Replace Pro Micro bootloader with QMK DFU : olkb

qmk_firmware/flashing.md at master · qmk/qmk_firmware · GitHub

現在進行中の自作キーボードプロジェクト

EndGameを求めるだけが自作キーボードじゃないなんて言ったら沼の人に怒られそう

hogefuga keyboard

設計理念

  • 100mm×100mmに収めることで製造費を抑える
  • フルキーキャップセットをROWを違えることなく使えるようにする
  • 280gキースイッチを使うためにALPSマウント
  • ProMicroを交換できることと薄さを両立するために隣に置く

できたもの

github.com

4x4x3

設計理念

  • 基板を1枚あたり100mm×100mmに収め, 3枚繋げて使う
  • モゲ対策のためFatProMicroを使う
  • Kailhホットスワップソケット対応

できたもの

未公開

予定

  • アクリルでボトムプレートを, アルミ基板でトッププレートを作る

KBDfansで買い物した

買ったもの

  • XDAV2キーキャップ
  • Kailh Speed Copperスイッチ

R2 XDA 40V2 dye sub keycaps setkbdfans.cn

KAILH SPEED SWITCHES (10 switches)kbdfans.cn

クーポンを使って合計49ドル。

配送

国慶節最終日の10月6日に注文して, 7日に発送, 18日に川崎港に到着して, 20日に配達。手渡しではなくポストに投函された。家で待ってなくてもよかったんやな……

ProMicroをArduinoISPとして用い, Attiny85を動かすときに参考にしたサイト

PinOut

これがないと始まらない

ATTinyCore/ATtiny_x5.md at master · SpenceKonde/ATTinyCore · GitHub

ProMicroをArduinoISPにする

標準のArduinoISPで指定されたピンはProMicroにはないので

umtkm.github.io

8MHz駆動にする

1MHzだと音のざらつきが気になったので

roshiago.blog.so-net.ne.jp

結果

Rails入門で引っかかったところとその対策

bundle installしたときにAn error occurred while installing sqlite3

sudo apt install sqlite3
sudo apt install libsqlite3-dev

rails serverしたときにThere was an error while trying to load the gem 'uglifier'

Gemfilegem 'mini_racer'コメントアウトを外してbundle install

一番安いキーボードの自作方法

材料

()内は実際に使用した個数

  • キースイッチ(24個) 2000円 Massdrop
  • ダイオード(24個) 100円 秋月
  • 細ピンソケット(10) 80円 秋月
  • 細ピンヘッダ() 秋月
  • ProMicro 700円 aitendo
  • 色紙(しきし)(1枚) 100円 Seria
  • 銅線(2m) 257円 コーナン

工具

  • はんだごて
  • ラジオペンチ

方法

  1. 色紙にキースイッチをはめる穴を開ける
  2. ダイオードを空中配線する
  3. ROWを配線する
  4. いい感じに配線をまとめてProMicroにつなぐ
  5. 配線に応じた設定をしたQMKファームウェアを焼く

結果

24キーでは使い物にならない。

テンキーとして使いましょう。はい。

教訓

空中配線では1点にはんだを積んで複数の線を繋いでいるところがあり, キースイッチが配線と密結合するから, キースイッチの交換が大変そう。

XD75reを買おう!!

この記事はMagicforce 49keyで書かれました