CircuitPythonで制御するキーボードを作りたい
なぜ
- 接続するとストレージとして認識されるからコードをドラッグ&ドロップするだけで動作させられる
- 環境構築が不要
- キーマップの変更がとても簡単になる
実験に必要なもの
- Trinket M0
- ROM容量が少ないと判断した場合, 容量の大きいナントカExpressが必要
- 処理速度が足りない場合はナントカM4に変更
- IOエクスパンダ2つ
- 分割型で両手とも同じ機器構成にしたいから
- いわゆるModulo モジュラーな自作キーボードアーキテクチャを求めて - たのしい人生
- I2Cのプルアップに必要な抵抗は手元にある
- スイッチ適量
- アンチゴーストしないのでとりあえずダイオードは不要
- Moduloの仕様書
本番に必要なもの
- 基板×2
- ICソケット×2
- TRRSジャック×4
- TRRSケーブル×2
- Kailhスイッチソケット×40
- スイッチ×40
まとめ
追記(2019/02/05)
Trinket M0でLSFT_T
, LCTL_T
を実装したあとTAP_DANCE
を実装しようとしたらメモリ不足でエラーになった。M4機が必要である。
キーボード部品のコスト
キーボードを自作するときに何に金がかかっているのか気になったので
市販品との違い
- 基板が剥き出し
- 光らない
- 小指外側のキーがない
キーボードのスペック
- 分割型
- 40キー
- 基板サイズ100mm×100mm
- トッププレート・ボトムプレートなし
- Kailh Lowprofileスイッチ
- ソケット使用
コスト(送料含まず)
品名 | 単価 | 数量 | 価格 | 店名 |
---|---|---|---|---|
基板 | 220 | 2 | 440 | FusionPCB |
キースイッチ | 48 | 40 | 1920 | 遊舎工房 |
キーキャップ | 30 | 40 | 1200 | 遊舎工房 |
ソケット | 15 | 40 | 600 | 遊舎工房 |
ProMicro・スプリングピンヘッダ | 1000 | 2 | 2000 | 遊舎工房 |
リセットスイッチ | 10 | 2 | 20 | 秋月 |
TRRSジャック | 50 | 2 | 100 | 秋月 |
ダイオード | 2 | 40 | 80 | 秋月 |
TRSケーブル | 108 | 1 | 108 | 100均 |
ゴム足 | 8 | 23 | 183 | Amazon |
合計 | 6651 |
- キースイッチとProMicroにお金がかかることがわかった
- MX互換スイッチだとキーキャップがもっと高くなりそう
Windows10(WSL)にQMKをインストールする
sudo apt update sudo apt install git git clone --recurse-submodules https://github.com/qmk/qmk_firmware cd ./qmk_firmware ./util/wsl_install.sh
原価厨がキーボードを自作した話
この記事は自作キーボード #3 Advent Calendar 2018の13日目の記事です。
100mm×100mm未満の基板を設計し, 組み立てた話です。
動機
MagicForce smart 49keyへの不満
上海問屋 DN-914809 英語49キー ポケットサイズメカニカルキーボード(中華青軸) |パソコン通販のドスパラ【公式】
ホームポジションから手を動かさなくていいという売り文句に惹かれてMagicForce smart 49keyを使っていましたが, キー配列を変更できず, Fn
+Shift
の同時押しが面倒であるなどの不満がありました。
280gのスイッチを試すため
こちら、TaiHao ALPSクローン緑軸(280gクリッキー軸)の打鍵動画です。 pic.twitter.com/uIpeNS7pv0
— ゆかり (@eucalyn_) 2018年9月30日
ゆかりさんの投稿を見た友人が280gスイッチに興味を持ったため, 試し打ちできるようにキーボードを作ることにしました。基板サイズが100mm×100mm以内のキーボードとしてはFoobarが有名ですが, ALPS軸に対応していないため自分で設計することになりました。
基板製造が安い
100mm×100mm以内であれば10枚まで$5で製造してもらえます。なんと1枚あたり$1未満です!! 安い!!
また, 当時はFusionPCBで$1で100mm×100mm以内の基板を3枚製造してもらえるキャンペーンをしていたため, ついでに一体型のキーボードの基板も発注しました。
設計
foostanさんの本を読んでください
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緑軸
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/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の死が無駄だったことがわかって完全に虚無。
方法
- 余っているProMicro(Caterina)にArduinoISPを書き込む
- QMK Firmwareを書き換え, makeする
- ISP化したProMicroにブートローダーを書き換えるProMicroを繋ぐ
- 書き込む
余っている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.mk
にBOOTLOADER = 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_OUTPUT
やQMK_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を交換できることと薄さを両立するために隣に置く
できたもの
4x4x3
設計理念
- 基板を1枚あたり100mm×100mmに収め, 3枚繋げて使う
- モゲ対策のためFatProMicroを使う
- Kailhホットスワップソケット対応
できたもの
未公開
予定
- アクリルでボトムプレートを, アルミ基板でトッププレートを作る