Dactyl キーボードをリモデルする
Dactyl キーボードのケースは Clojure で書かれていてプログラマブルにリモデルできる
自作キーボード Advent Calendar:2017 12 日目の記事。
Dactyl キーボードとは
- 左右分離型
- おわん形状
- ケースが Clojure で書かれている
ケースが Clojure で書かれているとはどういうことか
farrellm/scad-clj: OpenSCAD DSL in Clojure パッケージで Clojure から OpenSCAD のファイルを生成する。キー位置のメソッドやキースイッチをはめ込む穴のメソッドを定義し、ループで回しながらキースイッチの穴を配置するというとイメージがわくだろうか。使っているうちにしっくりこない点があれば、自分でコードを書き換えてリモデルできる。3D モデリングソフトでメッシュを触る必要は一切ない。ソースコードは adereth/dactyl-keyboard: Parameterized ergonomic keyboard で公開されている。
リモデルの準備
Step 1. リポジトリを clone する
git clone git@github.com:adereth/dactyl-keyboard.git
Step 2. OpenSCAD のインストールと設定
マシンに OpenSCAD をインストールする。デフォルトの設定だと細部の要素のレンダリングが省略されるのでレンダリングする要素数の上限を上げておく。
Edit > Preferences
Advanced
タブTurn off rendering at
を1500000
に設定する
Step 3. OpenSCAD でプレビュー
OpenSCAD で things/dactyl-top-right.scad を開いておくと、Step 6 で.scad
ファイルがビルドされる度にリレンダリングしてプレビューされる。
Step 4. 実行ファイルを追加
README.md には repl でファイルをロードして実行しろと書いてあるけどモヤモヤするので、main.clj
を追加する。
project.clj の最終行に :main
を追加:
(defproject dactyl-keyboard "0.1.0-SNAPSHOT"
:description "A parametrized, split-hand, concave, columnar, erogonomic keyboard"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.7.0"]
[unicode-math "0.2.0"]
[scad-clj "0.4.0"]]
:main dactyl-keyboard.main)
src/dactyl-keyboard/main.clj を追加:
(ns dactyl-keyboard.main)(defn -main []
(require 'dactyl-keyboard.dactyl))
Step 5. イメージのビルド
マシン環境をなるべく汚したくないので Clojure ランタイムやパッケージマネージャの入った Docker イメージをビルドする。パッケージ依存を解決しておく。CMD
では Step 4. で追加した main.clj
が実行される。
Dockerfile:
FROM clojure:lein-2.7.1
WORKDIR /dactyl
COPY project.clj ./
RUN lein deps
CMD lein run
イメージをビルドしておく。
Terminal:
docker build . -t dactyl
Step 6. コンテナの実行
src/dactyl_keyboard/dactyl.clj を弄ってコンテナを実行すると、things/dactyl-XXXXX.scad が生成される。
Terminal:
docker run -v $(pwd)/src:/dactyl/src -v $(pwd)/things:/dactyl/things dactyl
ソースコードを書き換えては Step 6. を繰り返す。
実際に行ったカスタム
リモデル前後の diff と OpenSCAD のプレビューを貼っていく。
スイッチ穴の形状を変更
スイッチ穴の形状を ALPS スイッチから Cherry MX スイッチに変更する。予めメソッドが用意されていて :21 を single-plate
というメソッド名に変更し、:48 を discard する。
ネジ穴の追加と移動
Teensy カバーや I/O エクスパンダカバーの周辺はスイッチから全てのコードが集まってくるし、近くに TRRS ジャックの実装もあるため、コードが混雑する。多少コードの取り回しが雑でもケースが浮かないように、この周辺にネジ穴が欲しいと思い追加した。また、他のネジ穴も外側に移動した。:1008
Teensy サポートの撤去
デフォルトのモデルには Teensy を保持する用の機構が付いているが、保持力が弱いしなによりも USB 穴と位置があっていない。完全に保持されていないと各種ケーブルの脱着時にストレスを感じるので、Teensy も TRRS ジャックもホットグルーで下部ケースに接着することにし、このサポート機構自体を排除した。:1230
脚の底の窪みを浅くする
脚の底にAmazon | 3M しっかりつくクッションゴム 8x2mm 台形 22 粒 CS-04を付けたが、窪みの深さがゴムの高さより少し浅いだけだったのでゴムが少ししか脚の底から突出せずグリップ力が乏しかった。窪み自体を浅くする。:984
キーサイズの変更
キーのサイズも変更できる。プレビューは:301辺りを弄った例。
ソースコードのざっくりとした構成
src/dactyl_keyboard/dactyl.clj の構成をざっくりと抑えておくと弄りやすいはず。
- :8-:67: キースイッチの穴を定義
- :70-:111: キーキャップを定義
- :113-:181: キースイッチの位置のメソッド
- :183-:233: 上部メインケースの実装
- :235-:387: 上部親指ケースを実装
- :389-:743: 上部ケースのウォールの実装
- :745-:1049: 下部ケースの実装
- :1051-:1191: ネジ穴・Teensy カバー・I/O エクスパンダカバー・TRRS ジャック穴・USB 穴などの定義
- :1197-:1209: 下部ケースに Teensy カバーをつけてネジ穴と TRRS ジャック穴と USB 穴をあけて右手下部ケースを実装する
- :1211-:1222: 9. の Teensy カバーの代わりに I/O エクスパンダカバーを実装し左右反転して左手下部ケースを実装する
- :1224-:1232: スイッチ穴とその結合パーツ Teensy サポートにネジ穴をあけて右手上部ケースを実装する
- :1234-:1242: 11. から Teensy サポートを排除して左右反転し左手上部ケースを実装する
リモデルした感想
この記事はリモデルしたケースでビルドした Dactyl キーボードで書いた。長くなってしまったのでビルドログを別記事にした。