OpenSCAD でキーキャップをデザインしてみた

つくりたいもの

前回、キーキャップをレジンで複製する方法を記事にしました。

今回は複製ではなく、自分の好みの形のキーキャップをデザインしてみます。

自分でキーキャップをデザインしたい理由ですが、こういう Artisan キーキャップをつくりたいというのが大きいです。

レジンで上の画像のようなキーキャップをつくるには、パックマンや鯉を封入するためのスペースがなければいけません。この図のようなイメージです。

こういう原型が必要なのですが、普通に買えるキーキャップにはこういう形のものはなかなかないので自分でつくってみようと思います。

せっかくつくるならXDAのようなかわいい形のキーキャップにしたいので、XDAよりも背を高くしつつころんとした形のキーキャップを目指してみようと思います。

OpenSCAD

キーキャップのモデリングには OpenSCAD を使いました。

OpenSCAD は、3Dモデリングをするためのプログラミング言語です。

引用元:OpenSCAD github

一般のプログラミング言語のように変数を使えるので、主要なパラメータを変数にしておいて後から変更可能にできます。 たとえばキーの高さや幅などのパラメータを変数にしておけば軸のスケールは変えずに高さや幅だけを変更したりすることが簡単にできます。

また、今回つくるキーキャップでは側面の丸みにこだわりたいのですが、OpenSCAD では数式で表現したカーブに沿って面を作ることなどもできるのでその点でも便利です。

OpenSCADでキーキャップをモデリングする方法については@zk_phiさんが記事にされています。

qiita.com

キーキャップをモデリングする方法が順を追って書かれていて大変勉強になりました。OpenSCADの文法の解説を交えながら基本的なキーキャップの形の作り方、キートップの凹みの作り方や、モデリング後にDMM.makeに発注するときの注意点まで丁寧にかかれているので、これからキーキャップをデザインしようと思っている人はまずはこちらの記事を読むのがおすすめです。

OpenSCADでできることを一通り勉強したい場合にはドットインストールに入門講座もあるので、しゅっと入門してしまいましょう。 

ドットインストール OpenSCAD 入門

書いてみた

ここからはOpenSCADのコードを交えて、どういう手順でモデリングしたかを紹介していきます。

この記事ではOpenSCADの文法の解説はしないのですが、OpenSCAD 使うとこういうことができるんだなーというイメージを持っていただければ幸いです。

Charry MX 軸

軸は円筒をベースにして十字部分を抜くことでつくります。

f:id:beikome:20190602004016p:plain

SCADのコードは以下のようになります。

module cherry_stem(stem_height) {
    // 軸の外径と十字の大きさを指定
    stem_outer_size = 5.5;
    stem_cross_length = 4.0;
    stem_cross_h = 1.25;
    stem_cross_v = 1.10;

    // 円筒と十字の差をとる
    difference() {
        // 円筒
        cylinder(d = stem_outer_size, h = stem_height);

        // 立方体を2つ組み合わせた十字形
        translate([- stem_cross_h / 2, - stem_cross_length / 2, 0]) {
            cube([stem_cross_h, stem_cross_length, stem_height]);
        }
        translate([- stem_cross_length / 2, - stem_cross_v / 2, 0]) {
            cube([stem_cross_length, stem_cross_v, stem_height]);
        }
    }
}

丸っこい形

土台

まずはシンプルな土台をつくってみます。

f:id:beikome:20190602005542p:plain

底面と天面を薄い立方体でつくり、その凸包をとりました。

key_bottom_size = 18;
key_top_size = 14;
key_top_height = 14;

 // hull() は3次元のオブジェクトの凸包を取るコマンド
 hull() {
     // キーキャップの底面
     translate([0, 0, 0]) {
         cube([key_bottom_size, key_bottom_size, 0.01], center=true);
     }
    // キーキャップの天面
     translate([0, 0, key_top_height]) {
         cube([key_top_size, key_top_size, 0.01], center=true);
     }
 }

まだカクカクです。

側面の丸み

丸っこい形にするために、底面から天面にかけてゆるやかにカーブを描くようにつなげたいと思います。

側面のカーブが円弧の一部になるように設計します。こういうイメージです。

天面の辺の長さを t 、底面の辺の長さを b , 高さを h とおき、円の半径 r と天面に対応する角度 {\theta}_{max} を求めます。

r \sin ( {\theta}_{max} ) = h
r \cos ( {\theta}_{max} ) = r - ( \dfrac {b} {2} - \dfrac {t} {2} )

が成り立ちます。

これを  r {\theta}_{max} について解いて、

 r = \dfrac {h ^ 2} {( b - t )} + \dfrac {(b - t)} {4}
 {\theta}_{max} = {\arcsin} ( \dfrac {h} {r} )

角度が  {\theta} のときの辺の長さ x は以下のように求められます。

 x = b - 2 r (1 - cos((\theta)))

急に高校数学みたいになりました。

以上の式をそのままコードにしていきます。

n = 20; // 底面から天面までの分割数

b = key_bottom_size;
t = key_top_size;
h = key_top_height;

r = h * h / (b - t) + (b - t)  / 4;
theta_max = asin(h / r);

hull() {
    // 底面から theta_max / n ずつ角度を変えて面を作成
    for (i = [0 : n]) {
        translate([0, 0, r * sin(theta_max * i / n) ]) {
            x = b - 2 * r * (1 - cos(theta_max * i / n));
            cube([x, x, 0.01], center=true);
        }
    }
}

f:id:beikome:20190602151839p:plain

辺の丸み

まだ側面の辺がカクカクしているのでこれをなめらかにしていきます。

ここまではcubeを積み重ねて形をつくっていましたが、これを角丸のものに置き換えてみます。

角丸の立方体をこのように定義しておきます。

module rounded_cube(size, r) {
    h = 0.0001;
    minkowski() {
        cube([size[0] - r * 2, size[1] - r * 2, size[2] - h], center = true);
        cylinder(r = r, h = h);
    }
}
rounded_cube([14, 14, 0.01], 3);

f:id:beikome:20190602164906p:plain

cube() をこの rounded_cube() で置き換えるとこんな感じになります。下から上にむかってだんだん丸く変化するようにしてみました。

round = 3; // 角丸の半径

hull() {
    for (i = [0 : n]) {
        translate([0, 0, r * sin(theta_max * i / n) ]) {
            x = b - 2 * r * (1 - cos(theta_max * i / n));
            rounded_cube([x, x, 0.01], round * i / n);  // cubeを置き換え 
        }
    }
}

f:id:beikome:20190602165716p:plain

だいぶ丸っこくかわいくなりました。

天面の丸み

仕上げに、天面に指をのせたときにぴったりくるようにカーブをつくります。

このあたりの操作は @zk_phiさんの記事 に詳しい解説がありますので、そちらを参照してください。

function dish_r(w, d) = (w * w + 4 * d * d) / (8 * d);

module keycap_dish(key_top_size, key_top_size, dish_depth) {
    translate([0, 0, key_top_height + dish_r(key_top_size * sqrt(2), dish_depth) - dish_depth]) {
        sphere(dish_r(key_top_size * sqrt(2), dish_depth));
    }
}

difference() {
    keycap_round_base(key_bottom_size, key_top_size, key_top_height, r);
    keycap_dish(key_top_size, key_top_height, dish_depth);
}

f:id:beikome:20190602171111p:plain

完成形

ここまでで作った外形の中をくりぬいて、軸と組み合わせて完成です。

module keycap(key_bottom_size, key_top_size, key_top_height, r = 3, dish_depth = 1) {
    key_inner_height = 5;
    thickness = 1.5;

    // 軸
    cherry_stem(key_inner_height);

    // キーキャップの中をくり抜く
    difference() {
        keycap_outer_shape(key_bottom_size, key_top_size, key_top_height, r, dish_depth);
        keycap_outer_shape(key_bottom_size - 2 * thickness, key_top_size, key_inner_height, r, 0);
    }
}

最終的な形はこうなりました。

f:id:beikome:20190603210212p:plain

f:id:beikome:20190603205952p:plain

各パラメータが変数になっているので、高さや大きさを変えるときもすぐ対応できます。

丸っこさはそのままに背だけを低くするとこんな感じになります。XDAっぽい。

f:id:beikome:20190604224921p:plain

完成形のコードとモデルはこちらに置きました。

github.com

印刷

作ったモデルを光造形3Dプリンターで印刷したものがこちらです。

印刷したままでは積層痕が目立つので磨いてみました。

f:id:beikome:20190603210915p:plain

ころんとしたキーキャップができました!

レジン複製

色付きレジンで複製してみました。

🍺大好きなので🍺のキーキャップもつくってみました。

泡が入っててもキニシナイ。🍺なので。

まとめ

OpenSCAD でキーキャップをデザインできるようになりました。

ころっとした形が実現できたし、レジンの層を厚くつくったので二色成形もできるようになり、つくれるものの幅がひろがって楽しいです。

レジンの中にものを封入するのもこれから実験していきたいと思います!

 

キーキャップを自作してみた

はじめに

最近自作キーボードにはまっています。特にかわいいキーキャップを集めるのにはまっています。

直近では Canvas や Baby Miami Backlit のセットを買いました。持っているキーボードの数よりもキーキャップセットの数の方が多くなってしまいました。

https://massdrop-s3.imgix.net/product-images/massdrop-x-mito-canvas-xda-custom-keycap-set/FP/B4up2Tb4Qnag2tkWgNmY_CB5A9231-copy.jpg?auto=format&fm=jpg&fit=crop&w=473&bg=f0f0f0&dpr=2 https://massdrop-s3.imgix.net/product-images/tai-hao-paradise-pbt-backlit-keycap-set/FP/57Udd8RGTLuVbchjNTGw_Page%20Image.jpg?auto=format&fm=jpg&fit=crop&w=955&bg=f0f0f0&dpr=2

はーかわいいです。

ただ、キーキャップセットは少量しか生産されていないことも多く、欲しいものがなかなか手に入らなかったりします。 下の写真の Rainbow POM Jelly は2013年頃?に販売されたものらしいのですが、少数しか製造されなかったのか今はどこを探しても売っていません。

http://dchpra.dm1.livefilestore.com/y2pD8bhKAKMndWBEV_5_dv8Tn3ef0xQofIC9MnJ9eh5QBR2XKVnChDb8D3fVnA1MMRy5hU_ZMunhqlZcfn4dF9m2JzWgpyo_G5dVEZkw1d5hPk/20130907_5.jpg?psid=1

なかなか手に入らないなら自分で作ってしまえばいいのでは?と思い、キーキャップ作りを始めてみました。 何度か失敗しましたが、4回目でかわいいキーキャップができました。

これからキーキャップ作りを始めたい人の参考になるかもしれないので、うまくいかなかった部分も含めて記録を残しておこうと思います。

作り方の概要

今回はこのキーキャップの複製をつくることを目標にしました。XDAプロファイル、ころんとしていてかわいいです。

シリコンなどでキーキャップの型をとり、型にレジンを流し込んで固めて複製します。下の図のようなイメージです。

f:id:beikome:20190325231329p:plain

用意したもの

  • キーキャップ
  • UVレジン
  • UVライト
  • おゆまる(お湯でやわらかくなる粘土)
  • シリコン
  • 竹串 or 楊枝
  • ボンド
  • レゴブロック
  • ワセリン
  • 絵筆

キーキャップの素材には紫外線で固まるUVレジンを使いました。UVレジンはダイソーのハンドメイドコーナーに手芸用品などと並んで売っています。硬さや色がいろいろあるのですが、どれがうまくいくか試すためにいろいろ買ってみました。

UVレジンは晴れた日に日光があたるところに置いておけば30分くらいで固まるのですが、効率化のためにUVライトを買いました。ネイルアートに使うものです。

私が買ったのは5Wの小型のもので、magic mouse とほぼ大きさで場所をとりません。UVライトは36Wか9Wのものが一般的なので5Wはかなり低出力な方ですが、キーキャップなら5分もあれば固まりました。

シリコンはこちらのものを使いました。6時間ほどで固まるタイプです。

その他の材料は家にあったものを使ったり100均で購入したりしました。

型とり&成形

1. シリコン型

キーキャップをつくっている方のブログを参考にして、シリコンでキーキャップの型をとってみることにしました。

mob-gadget.hateblo.jp

レゴブロックで枠をつくり、シリコン→キーキャップ→シリコンの順で入れます。軸に楊枝をボンドで軽く接着して、空気穴をつくっておきます。

f:id:beikome:20190326235441j:plain

固まった状態のものがこちら。寒天ゼリーみたいでおいしそうです。

f:id:beikome:20190326235726j:plain

キーキャップを型から取り出すためにキーキャップの軸側にL字の切り込みをいれて、シリコンをぐにゃっと曲げながらキーキャップを取り出しました。 (このあたりは作業に必死だったので写真が残っていません。)

レジンの注入口は確保していなかったので、キーキャップを取り出すときに作った切り込みからレジンを流し込みます。 切り込みにレジンのチューブの先をいれ、えいやとレジンを出して固めたものがこちらです。

レジンを流し込んだときに大きな気泡をつくってしまい、穴あきキーキャップになってしまいました。片手でシリコン型を広げながら片手でレジンを注入したのですが、レジンがどのくらいはいっているのか見えなくて難しかったです。注入口はあらかじめ確保したほうがよいですね。

2. おゆまる型

自作キーボード仲間のだんごさん(@dango_shippo)がキーキャップの作り方の動画を上げてくれていました。

この動画でおゆまるくんの存在を初めて知りました。 氷水で冷やすだけで固まるのでシリコンより手軽でいいな〜と思い、おゆまるを買ってきて動画の真似をして作ってみました。

そしてできたのがこちら。

f:id:beikome:20190327230223j:plain

だんごさんのとぜんぜん違う(笑)

バリが多いのもそうですが、全体的に形が歪んでしまいました。型とりの作業しているうちにおゆまるが冷えて固まってきてしまい、力をかけながらキーキャップを包んだのですが、そのときの歪みが型に残ってしまったのかもしれないです。おゆまるをよく柔らかくしておいて手早くやるのが大事そうです。

3. おゆまる分割型

キートップ側の形もしっかり作りたいので、次はキートップ側と軸側でわけて型をとってみることにしました。

まずキートップ側だけおゆまるで包みます。手早く!

f:id:beikome:20190329001458j:plain

とれた型はこんな感じ。 f:id:beikome:20190329001742j:plain

軸側の型もおゆまるで取ります。 f:id:beikome:20190329001933j:plain

ワンタンのようでおいしそうです。

そしてできた上下の型がこちらです。いい感じ。

f:id:beikome:20190329001958j:plain

軸の部分だけ先にレジンを流し込み、一旦ライトで固めます。

f:id:beikome:20190329002043j:plain

キートップ側にもレジンを流し込み、上下の型を重ねて型全体にレジンをいきわたらせます。

f:id:beikome:20190329002106j:plain

ここで気づいたのですが、上下の型の位置合わせのことを考えていませんでした。

位置合わせができないので軸がキーの真ん中にきているか怪しいですが...えいやと固めてみました。

f:id:beikome:20190329003023j:plain

f:id:beikome:20190329003033j:plain

軸、真ん中にきませんでした。側面も片側が厚く、片側が薄くなってしまっていますね。

型を上下にわけて作る作戦自体はよさそうです。キートップも軸もきれいに複製できているので、あとは位置合わせさえちゃんとできればうまくいきそう。

4. シリコン分割型

hdbx.hateblo.jp

id:hdbx さんが上下分割型を使ってキーキャップを複製されていました。こちらのブログ記事では、LEGO to Keycap (L2K) ADAPTERS という治具を使い、レゴの凸凹を利用して位置合わせができるように型をつくっているようです。

L2K ADAPTERS すごい、私もほしい!と思ったのですが、

入手方法ですが、今のところは公式サイトのリンク先にあるShapewaysで3Dプリントをオーダーして購入する方法しかありません。私が注文したときは、オランダからの送料が$26くらいかかったのでTwitter共同購入を持ちかけて購入しました。

だそうです。うーん。

しばらく考えて、レゴの凸凹を利用して位置合わせをするだけならL2Kがなくてもできるのでは?と思いついて試してみることにしました。

まず、キーキャップの軸におゆまるの塊をつけて、レゴのプレートに固定します。キーキャップの下がプレートにぴったりとつくようにします。

f:id:beikome:20190329003100j:plain

キーキャップの周りに枠をつくり、そこにシリコンを流し込みます。固まった状態でプレートからはがしたものがこちら。

f:id:beikome:20190330182030j:plain

これでキートップ側の型がとれました。キーキャップのまわりにレゴの凸部分の型もとれています。 次にこれをひっくり返して軸側の型をつくります。シリコン同士がくっつかないようにするために、シリコンの表面にワセリンを塗ります。

f:id:beikome:20190329003135j:plain

凹の部分にもワセリンがつくように絵筆でしっかり塗り込みました。

空気穴とレジンの注入口をつくるために、キーキャップの四隅と軸の上に棒をつけます。 竹串を短く切ったものを木工用ボンドではりつけました。

f:id:beikome:20190329003158j:plain

シリコンを流し込みます。

f:id:beikome:20190329003212j:plain

シリコンを流し込んだときに竹串が一本はずれました。

できあがった型がこちらです。ワセリンを塗っていた面がきれいにはがれました。レゴの凹凸も複製できています。

f:id:beikome:20190329003234j:plain

凹凸がはまるように上下の型を組み合わせて、穴からレジンを注ぎ込みます。

f:id:beikome:20190330215127j:plain

UVライトにあてて、とりだしたものがこちら。

f:id:beikome:20190330215150j:plain

おお!できている!?

ばりをとったら良い感じになりました。

f:id:beikome:20190330215231j:plain

よくみると細かい泡が入っていたりはしますが、ついにかわいいキーキャップができました。

他の色のレジンでも試してみました。

f:id:beikome:20190330220042j:plain

ミルキーカラーは粉末色素が混ざっているのですが、なぜか小さな気泡が発生しやすく、よくみるとところどころ泡が残っています。 クリアカラーの方が気泡が発生しづらくきれいにできました。

まとめ

レジンでキーキャップを複製することができるようになりました。

f:id:beikome:20190329003334j:plain

第1弾から第4弾まで並べてみると、ずいぶんと進歩しました。

ミルキーカラーでも気泡をいれずに作れるようになりたいなとか、強度がもうちょっと欲しいなとか、慣れたら複製じゃなくて犬やうさぎモチーフのキーキャップがつくりたいなとかの野望もあるので、今後もいろいろ試してみようと思います。

以上、レジンを使ったキーキャップの複製方法でした!