Dactyl キーボードをリモデルする

Dactyl キーボードのケースは Clojure で書かれていてプログラマブルにリモデルできる

Daisuke Mino
10 min readDec 12, 2017
リモデルしプリントアウトされたケース
リモデルしプリントアウトされたケース

自作キーボード 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 をインストールする。デフォルトの設定だと細部の要素のレンダリングが省略されるのでレンダリングする要素数の上限を上げておく。

  1. Edit > Preferences
  2. Advanced タブ
  3. Turn off rendering at1500000 に設定する
レンダリングする要素の上限を上げる
レンダリングする要素の上限を上げる

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 スイッチに変更する。予めメソッドが用意されていて :21single-plate というメソッド名に変更し、:48 を discard する。

スイッチを変更
スイッチを変更

ネジ穴の追加と移動

Teensy カバーや I/O エクスパンダカバーの周辺はスイッチから全てのコードが集まってくるし、近くに TRRS ジャックの実装もあるため、コードが混雑する。多少コードの取り回しが雑でもケースが浮かないように、この周辺にネジ穴が欲しいと思い追加した。また、他のネジ穴も外側に移動した。:1008

ネジ穴の追加と移動
ネジ穴の追加と移動

Teensy サポートの撤去

デフォルトのモデルには Teensy を保持する用の機構が付いているが、保持力が弱いしなによりも USB 穴と位置があっていない。完全に保持されていないと各種ケーブルの脱着時にストレスを感じるので、Teensy も TRRS ジャックもホットグルーで下部ケースに接着することにし、このサポート機構自体を排除した。:1230

Teensy サポートの撤去
Teensy サポートの撤去

ウォールの撤去

DSA や DCS といったあまり高さのないキーキャップを使う場合は、ケースのウォールから生えている突起にキーが埋もれてしまう。そのため、38を押す際に何度かこの突起に中指がぶつかってしまった。ウォールを低くしたりウォールから出ている突起を撤去したりという試行をしたが、そもそもウォール自体が必要ないのではという結論にいたりこれを撤去した。ウォールの中のモデリングは結構雑だったので頂点位置を細かく調整したり、壁面がなるべく垂直に近づくようにエッジ位置を調整した。:444-:1002

ウォールの撤去
ウォールの撤去

カバーの位置と大きさの調整

Teensy カバー周辺にネジ穴を追加したが、カバーに近すぎてねじ山が干渉してしまう。ネジ穴の位置はスイッチ穴の関係であまり融通が効かないので、カバー位置を動かし大きさを調整した。:1017-:1056

カバーの位置と大きさの調整
カバーの位置と大きさの調整

脚の底の窪みを浅くする

脚の底にAmazon | 3M しっかりつくクッションゴム 8x2mm 台形 22 粒 CS-04を付けたが、窪みの深さがゴムの高さより少し浅いだけだったのでゴムが少ししか脚の底から突出せずグリップ力が乏しかった。窪み自体を浅くする。:984

脚の底の窪みを浅くする
脚の底の窪みを浅くする

実施していないが試行したカスタム

ウォールを低くする

ウォールを撤去したくないが、ウォールにキーが埋もれる問題を解決したい場合はこれ。:43010 がウォールの高さ。更に、ウォールから生える出っ張りがが必要ない場合は top-coverfront-top-cover の呼び出しを削除する。:453-:456, :469-:471, :499-:506, :514-:516, :614-:621

ウォールの高さを 10 から 4 に下げカバーを撤去する
ウォールの高さを 10 から 4 に下げカバーを撤去する

キーサイズの変更

キーのサイズも変更できる。プレビューは:301辺りを弄った例。

親指のキーサイズを 1x3 から 1x1+2x1 に変更する
親指のキーサイズを 1x3 から 1x1+2x1 に変更する

ソースコードのざっくりとした構成

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 キーボードで書いた。長くなってしまったのでビルドログを別記事にした。

様子
様子

--

--

Responses (1)