自作キーボード用トラックボールケースの3DP用モデリング例(Keyball用 Plasticity編)

以前公開した、BlenderでKeyballのトラックボールケースを作ってみる記事が意外にも好評をいただけたのに加え、自分が最近よく使用しているソフトであるPlasticity版も望まれているようなので作成することにしました。
Blender同様Plasticityもまだまだ初心者の域を脱していませんが、一つの作業例として受け取っていただけたらと思います。
もっと効率的な方法をご存じの方は是非ともアドバイスを頂けたらありがたいです。

Plasticityとは

https://www.plasticity.xyz/
"CAD for artists."を謳う3Dモデリングアプリケーションです。
モデル形状を感覚的に作っていけるので楽しいツールです。半面、CADとして期待される機能があまりありません。(拘束やパラメトリック編集など)
操作感もBlenderに近いところがありBlender経験者ならすぐに慣れそうですが、他のCADを知っている方はかなり戸惑うと思います。
ライセンスの購入方法は買い切りのみでサブスクリプション契約はありませんが、試用期間が30日あるので気軽に試せます。ちなみに2024年のブラックフライデーの時期には少し安くなっていました。
購入したいけどブラックフライデーまで待てないよ~という方は、下の「Plasticity入門」で紹介している動画の概要欄に10% OFFクーポンが書いてあるのでそれを使って購入してもいいかもしれません。

個人的な話(読まなくても大丈夫です)

最近はBlenderをあまり触らず、Plasticityでモデリングを行っています。
Blenderを使わなくなった理由は主に2つあります。

●Bevel(面取り)の処理が不満
BlenderではBevelをかける時、複数のフェース(面)にまたがる処理は行えないようです。(直接編集・モディファイアともに)


この右上の辺にBevelをかけるとして・・・


単一のフェースには正しく面取りがかかっていますが・・・


複数のフェースにかけようとすると処理がおかしくなります。(もしくは設定次第で問題が起こらない位置で面取りがストップします)

そのためBevelをかけたいエッジや頂点の付近を事前に整理してきれいにしておく必要があります。
これが非常に面倒くさい!一回だけならまだしも、根本の形状を変更するとやり直しになるので修正が億劫になることもありました。
(有料のアドオンを導入すると解決できるらしいですが、試していません)


頑張って頂点を整理したときの例(cocot46plus用トラックボールケース)。R面取り付近の不規則な箇所が手作業で頂点を整理した部分。この34mm用の他に25mm用もやったので2倍大変でした。

●STEPファイルが出力できない
3Dプリンター向けにはSTLファイルが出力できれば十分ですが、Keyball44用削り出しケースであるSnowball44のトラックボールケースを作るためにはSTEPファイルを出力できるツールを使う必要がありました。しかしBlenderはポリゴンモデリングツールなのでSTEPファイルを出力できません。
ちょうどその少し前にPlasticityを購入していたので、習熟のために使い続けていました。
(STLファイルをSTEPファイルに変換するWebサービスなどもあるようですが、変換の正確性やデータの機密性などに不安があったので使用してません)


見ての通り、BlenderではSTEPファイルを出力できません。(Version: 4.2.1 LTS)

Plasticity入門

この記事では基本操作等は説明しません。(書くのが大変なので)
自分は下記の動画で基本的な操作を身につけました。
https://www.youtube.com/watch?v=kPpWgNZDDRE
もしくはこちらでも良さそうです。
https://www.youtube.com/watch?v=40WgTXPKcYI

操作に慣れてきたら、以下の動画で色々なテクニックを見ることができます。
テンポよく次々に説明が繰り出されるので、流し見するだけでPlasticityのおおよその雰囲気がわかります。
https://www.youtube.com/watch?v=IhKYs0jyqxg
https://www.youtube.com/watch?v=aCjmZ7dyi2U
https://www.youtube.com/watch?v=l3y3Ply-YQE

(ただPlasticityのバージョン2025にてUIが変わってしまい、いずれの動画もUIが古いので少しわかりづらいかもしれません)

キーボードショートカットは以下のページで確認できます。
https://doc.plasticity.xyz/all-commands/download-pdf

作成概要

この記事ではKeyball用 25mmトラックボール ボールベアリングケースを作成します。
基本的にはBlenderで行った手順と同じです。ガイドモデルを作り、内部をくりぬくためのモデルを作って外形とブーリアンします。
作成するモデルは右手用ですが、左手用が欲しければ最後に左右反転すればいいので気にせずに進めてください。

説明で使用するPlasticityのバージョンは25.1.8、ライセンスはIndieです。
無料版でも同じことができると思いますが、うまくいかない点があったらコメント欄で教えていただけると助かります。

あと、Blenderでトラックボールケースをつくる記事を書くのが大変すぎたので、今回は少し簡素にします。
分かりにくい個所があったらコメントで教えて頂ければ幸いです。

Plasticityのインストール

ソフトウェアのインストールの流れを簡単に説明します。説明はWindows11環境ですが、Macも大体同じです。
公式サイト https://www.plasticity.xyz/ から、環境にあったインストーラをダウンロードします。


ダウンロード出来たら、ダブルクリックして実行します。


「Next」→「Next」→「Install」とボタンを押して進めていきます。
インストールが完了したら「Finish」ボタンを押して終了します。


Plasticityのショートカットアイコンをダブルクリックして起動します。


起動するとユーザー登録を促されるので、アカウントを作成します。
購入済みであればライセンスキーを入力します。


うまくいけば立ち上がります。

初期設定


最初からおいてある箱はいらないので、クリックして選択した後にXキーかDelキーを押して削除しておきます。


ウィンドウ右側のUNITSの欄で単位をMillimeterに変更します。
そのすぐ上のGRIDの欄でグリッドサイズを0.1mmに、Snap to gridをONしておきます。
(状況に応じて0.5mmや1.0mmに変更してもOKです)


ウィンドウ左上のPアイコンから「Save as startup scene」を選ぶと今の状態が新規作成時のデフォルトになります。

ノートパソコンのトラックパッドで操作する場合は、以下の設定も必要です。


ウィンドウ左上のPアイコンから「Preferences」を選択します。


出てきたウィンドウのNavigationの中にある、NAVIGATION PRESETのリストから「Touchpad」を選択します。
(これを行わないとカメラが回転できません)

ガイドモデルの作成

トラックボールケースを作る基準となるガイドモデルを作成していきます。(Blenderで説明したのと同じです)
最初に直径が25mmのトラックボールを作成します。


左側のツールパレットのSphereをクリックして、原点(赤、緑、青の線が交わる部分)をクリックして直径25㎜の球を作成します。
マウスドラッグで球のサイズが変更されるときにTabキーを押すと数値入力できます。もしくは左クリックで適当にサイズを決めてからウィンドウ左下のRadiusの欄で半径を入力しても良いです。
直径25mm(もしくは半径12.5mm)に出来たら右クリックかEnterキーで球の作成を確定します。


球を作成するとウィンドウ左側にリストアップされます。名前をダブルクリックするか、選択してからF2キーを押すと名前の変更が可能です。分かりやすい適当な名前にしておくと良いです。


レンズを作ります。
先ほど作成した球を非表示にします。(左側のオブジェクトリストの目玉アイコンをクリックするか、オブジェクトを選択してHキーで非表示になります)
ウィンドウ右上の箱の天面かZをクリックして上からの視点に変更します。
左側のツールパレットのCorner rectangleをクリックして、原点(赤い線と緑の線の交点)をクリックして四角を作成します。
このときCキーを押すと始点を中心とした四角になります。
さらにTabキーを押して、幅3.4mm、奥行19mmにします。


作成した四角の内側(面の部分)をクリックすると自動的にEXTRUDE(押し出し)モードになります。
面が選択できない場合は、ウィンドウ左上の面選択アイコンをクリックするか、3キーを押して面選択状態にします。
または何も選択していない状態でTabキーを押すと点・辺・面・オブジェクトどれでも選択できるようになります。


面から生えている黄色い線の先端の黄色い丸をドラッグして上方向に適当に引っ張ります。
このときTabキーを押すと面に対して対象に押し出しが出来るようになります。
その状態になったら、高さを21.4mmにしたいのでDistanceの欄には半分の10.7と入力します。
入力したら右クリックかEnterキーで確定します。


四角はもう要らないので削除します。
四角を選択してXキーかDelキーを押すと削除されます。


レンズの角を丸めます。
Tabもしくは2キーを押して辺を選択できる状態にして、4つの角の辺を選択します。
SHIFTキーを押しながらクリックすると複数の辺を選択することができます。
辺を選択すると自動でFILLETモードになります。


ウィンドウ左下のDistanceの欄に7.0を入力し、右クリックかENTERキーで確定します。


Keyballに使用されているセンサーのpmw3360のデータシートを参考にして、レンズをトラックボールから2.4mm離した位置に配置します。
レンズを選択してGキーを押すと移動モードになります。
X座標値を16.6mm移動させれば球から2.4mm離れることになりますが、数値入力部分には数式を入れることもできます。
トラックボールの直径が25mm、レンズの厚さが3.4mm、離したい距離が2.4mmなので (25+3.4)/2+2.4 と入力すると計算されて16.6mmに変換されます。


球の目玉アイコンをクリックして表示し、右上の箱の面をクリックして横からのカメラに変更します。
球とレンズの間が2.4mmになっているのが確認できます。
レンズオブジェクトの名前をlensに変更しておきます。

センサーPCBをレンズの右側に接するように作成します。

左側のツールパレットからCorner rectangleを選び、手前から見た状態でのレンズの右上の点をクリックして四角形の作成を開始し、Tabキーを押して幅を1.6mm、高さを25mmにします。Enterキーかマウスクリックで確定します。


Gキーを押して、作成した四角形を下に4mm移動させます。Enterキーか右クリックで確定します。


カメラの向きを変えてみると、四角が奥行き方向の中央(赤い線の上)に居ません。
中央まで移動させたいので、Gキーを押して移動モードに入り、緑の矢印をドラッグして動かします。Ctrlキーを押しながらドラッグしてマウスカーソルを赤い線の上に持ってくると、その位置でピタリと止まるので便利です。Enterキーか右クリックで移動を確定します。


3キーかTabキーを押して面を選択できるようにして、四角形の面をクリックします。
面から生えている黄色い円をドラッグして箱を作ります。ここでもTabキーを押して面の両方に箱が出来るようにします。
ウィンドウ左下のDistanceの欄に11.1と入力します。Enterキーか右クリックで確定します。


箱を作るために作った四角形はもういらないので削除します。
2キーかTabキーを押して辺を選択できるようにしてから四角形を選択し、XキーかDelキーを押して削除します。


作成した箱の名前をcensor_pcbとしておきます。

同様に、センサーチップを作成します。

Corner rectangleでレンズの右上の角から幅4.8mm、高さ17mmの四角形を作成します。


Gキーを押し、3mm下げます。


視点を変え、四角が奥行方向の中央に来るようにします。


四角の面をクリックしてEXTRUDEモードに入り、黄色いハンドルをドラッグしながらTabキーを押して両面押し出し状態にして、Distanceに6mmを入力します。


四角形を選択してXキーかDelキーで削除します。


名前をcensor_chipに変更します。

ボトムプレートを作成します。すこし違う作成方法で説明します。


Corner boxツールで適当な場所に適当な大きさの箱を作成します。


サイズを100, 100, 2にした後にEnterキーか右クリックで確定します。


箱を選択状態で、Gキー→Fキー→右クリック→右クリックと操作すると箱が原点に移動します。


引き続き移動状態で、Vキーを押してPivot選択状態に入り、箱の上面のどこかをクリックします。
こうするとクリックした位置が移動の基準点になります。


Ctrlキーを押しながら青い矢印を上方向にドラッグし、マウスカーソルをセンサーPCBの上面の頂点に合わせます。


そこから再度青い矢印を下方向にドラッグし、25.4mm下げます。
(計測により、センサーPCBの上端からボトムプレートの上面までの距離が25.4mmだったのでそれに合わせています)


名前をbottom_plateに変更します。

メインPCBを作成します。


Corner boxツールで適当な場所に20mm, 20mm, 1.6mmの箱を作成します。
(注意:箱を作成するとき、ほかのオブジェクトの上で箱を作成するとくっついて一体化してしまいます。その場合はBキーを押すと別オブジェクトとして作成されます)


Gキー→Fキー→右クリック→右クリックで箱を原点に移動させます。


XYZ座標に29.9, 0.0, -16.1と入力します。この手順でやればオブジェクトに絶対座標をセットできます。
(なんでPlasticityは絶対座標を直接入力させてくれないのかな・・・もっといい方法を知っている方は教えてください🙇‍♂️)


名前をmain_pcbに変更します。

ここからは省略でいきます。


L字コンスルー
サイズ:3mm, 18.2mm, 4mm
位置:21.4mm, 0mm, -13.3mm
名前:l_conthrough


メインPCBその2
サイズ:20mm, 20mm, 1.6mm
位置:19.5mm, 24mm, -16.1mm
名前:main_pcb_2


メインPCBその3
サイズ:20mm, 20mm, 1.6mm
位置:-0.5mm, 27mm, -16.1mm
名前:main_pcb_3


スイッチプレート
サイズ:20mm, 20mm, 1.6mm
位置:39mm, 0mm, -11.1mm
名前:switch_plate


レンズのでっぱり
サイズ:1mm, 4mm, 2mm
位置:14.4mm, 0mm, 3.2mm
名前:lens_bump

※補足
箱のサイズをあとから変えたくなった時の説明をします。


サイズを変更したい箱を選択してからFキーを押します。するとコマンド選択ウィンドウが表示されます。


コマンド検索欄にdimと打つとDimensionというコマンドが出てくるので、そのままEnterキーを押すかマウスクリックで選択します。


幅、奥行き、高さを入力する欄が表示されるので、数値を入力します。Tabキーを押すと別の欄に移動できます。
入力したらEnterキーを押すと確定します。

※補足ここまで

最後に、作成したガイドモデルをグループにまとめます。


一番上のオブジェクトをクリックして選択し、一番下のオブジェクトをShiftキーを押しながらクリックすることでまとめて選択します。
その状態でCtrlキーを押しながらGキーを押すとグループが作成されます。(左上の+が書いてあるフォルダアイコンをクリックしてもOK)


グループ名をguideにしておきます。

以上でガイドモデルの作成は終わりです。

センサーカバー内部およびネジ穴

続いて、センサーボードやレンズをよけるための形状を作っていきます。(こちらもBlenderでの説明と同じです)


lens_bump, l_conthrough, main_pcb, bottom_plate, censor_chip, censor_pcb, lensを選択します。
3Dオブジェクトを選択する場合は4キーを押したあとにShiftキーを押しながらオブジェクトをクリックします。
左側のリストから選択する場合はCtrlキーを押しながらオブジェクト名をクリックします。


コピー&ペースト(Ctrl+C, Ctrl+V)で複製します。
ちなみにオブジェクト選択状態でShift+Dでも複製できますが、その場合は複製されたオブジェクトが元のオブジェクトと同じ場所に置かれ、コピー&ペーストの場合はルートに置かれます。
guideグループの右側の目玉アイコンをクリックして非表示にしておきます。


そのままでも構いませんが、説明のために複製したオブジェクトの名前を*_diffに変更します。


複製したレンズの下側のカーブはいらないので削除します。
3キーを押して面選択状態にしてカーブをクリックします。


面を選択している状態でXキーかDelキーを押すと曲面が削除されて角ができます。
(反対側もやります)


横からの視点に切り替えて、bottom_plate_diff以外のオブジェクトの面をすべて選択します。
※Plasticityでは左からの矩形選択(緑色)は矩形で囲んだものが、右からの矩形選択(紫色)では矩形に触れたものが選択されます。


面を選択するとPUSH FACEモードになるので、左下のDistanceの欄に0.3を入力して右クリックかEnterキーを押します。
この0.3mmはセンサー部品とのクリアランス(隙間)になります。


各オブジェクトの下の面を引き伸ばすため、Shiftキーを押しながら5か所選択します。
※右からの矩形選択だと側面も選択してしまうので、左から矩形選択します。
表示されたPUSH FACEハンドルをドラッグして、bottom_plate_diffを越えるくらいまで下方向に引き伸ばします。
これはセンサー部品を下から差し込むための通路となります。


適当にこれくらい下げておきます。


センサーがトラックボールの動きを読み取るための穴をあけます。
左方向からの視点に切り替えて、ツールパレットのCentor circleを選択して、原点から直径4mmの円を作成します。


ツールパレットのLineを選択して、作成した円の左端から上方向に4mm、右方向に4mm、下方向に4mmの線を引きます。最後に右クリックをして線の作成を終了させます。


視点を変えて、作成した円と線が囲んでできた面を選択します。(3キーを押した後、Shiftキーを押しながらクリック)
EXTRUDEモードになるので、黄色いハンドルを引っ張って立体化します。適当に5mmくらいの厚さにしておきます。右クリックかEnterキーで確定します。


4キーを押してオブジェクト選択モードに変更します。
さきほど作成した立体を選択して、Gキーを押してMOVEモードに入り、Vキーを押してレンズに近い側の点か辺をクリックして移動基準を設定します。


赤い矢印をドラッグして、Ctrlキーを押しながらlens_bump_diffの点か辺の位置でドラッグを離してぴったりくっつけます。右クリックかEnterキーで確定します。


円と線で作成した図形はもういらないので、それぞれ選択してXキーかDelキーで削除します。


作成した立体の名前をcensor_hole_diffにします。


トラックボールケース固定用のネジ穴を作ります。
ツールパレットからCylinderを選択し、bottom_plate_diff上の適当な位置に適当なサイズで作成してから、左下の入力欄でRadius: 0.8mm、Height: 4.0mmにします。 (トラックボールケースの固定にはM1.7ネジを用いるので、それより少し小さく直径1.6mm、半径0.8mmとしました。高さは適当です)
Bキーを押して新規オブジェクトとして作成されるようにしてから、右クリックかEnterキーで確定します。


円柱を移動させます。
絶対座標で指定したいので、円柱を選択した後にGキー → Fキー → 右クリック → 右クリックと操作してから左下のXYZ入力欄に6.2mm, 8.0mm, -16.7mmと入力します。最後に右クリックかEnterキーで確定します。


もう一つのネジ穴はY座標方向に対象の位置に作るので、ミラー機能を使用します。
円柱を選択した状態で、Altキーを押しながらXキーを押します。
原点の位置にMIRRORのハンドルが表示されるので、緑の部分をクリックします。ミラーされたオブジェクトが確認出来たら右クリックかEnterキーで確定します。


オブジェクト名をmount_screw_hole_diff_1, mount_screw_hole_diff_2にします。(両方同じ名前にしてもいいです)


main_pcb_diffがY方向に少し小さいので延ばさなきゃいけないのをすっかり忘れていました。
3キーを押して面選択できるようにして、main_pcb_diffの手前側の面を選択し、5mmほど延長しておきます。奥側の面も同様にします。


トラックボールケースの底に穴をあけます。(これはなくてもいいです。お好みで)
ツールパレットからCylinderを選択して、Z軸(青い線)とbottom_plate_diffとの交点をクリックして適当なサイズで円柱を作ります。
左下の欄に半径4mm、高さ8mmを入力して、Bキーを押して新規オブジェクトとして作成されるようにしてから右クリックかEnterキーで確定します。


名前をbottom_hole_diffにします。


トラックボール部分をくりぬく球を作成します。
ツールパレットからSphereを選択して、原点から適当なサイズで作成します。
そのあと左下の半径入力欄に12.5+0.75と入力するか、直接的に13.25mmと入力したあと、右クリックかEnterキーで確定します。
(25mm球の半径12.5と、クリアランス0.75です。トラックボールまわりのクリアランスが0.75mmが好みです)


名前をtrackball_diffにします。


これまで作成してきたオブジェクトを選択して、Ctrlキーを押しながらGキーを押してグループを作成します。
グループの名前はdiffsにしておきます。

以上でトラックボールケース内部の削りとる部分のモデリングは終了です。

ベアリング周りの設計

ここからベアリング周りのモデリングを行います。
ベアリングは外形4mm、内径1.5mm、幅2㎜のものをM1.4ネジ(長さ4mm)で固定する想定です。
異なるサイズの部品を使いたい場合は適宜読み替えてください。


ベアリングの大まかな位置決めを行います。
まずdiffsグループを非表示にして、手前からの視点にしてから原点に直径4mmの円を作成します。


3キーを押してから円の面を選択したあと、Tabキーで両面引き伸ばしにして1mm引き伸ばします。(合計2mm)


4キーを押してオブジェクト選択モードに変更します。
円柱を選択してGキーを押し、X座標に14.5mm移動させます。


Rキーを押しROTATEモードに入り、回転の中心を変更するためVキーを押して原点をクリックします。


Y軸周りに下方向に15度回転させます。
(この角度を10度にすると安定感高め・摩擦感強めになり、20度にすると安定感低め・摩擦感弱めになります。最初は15度から調整を始めるのが好みです。ただセラミック球による支持と違い、ボールベアリングはトラックボールを回転させる方向や指の位置によっては摩擦感を感じづらいこともあります)


円柱を選択している状態で、Shiftキーを押しながらDキーを押すのを2回行います。円柱が3つになります。


複製した円柱を、それぞれ原点を中心としたZ軸周りに+120度、-120度回転させます。(Rキー → Vキー → 原点をクリック → 回転)


円柱を3つ選択して、原点を中心にY軸周りに45度回転させます。


さらに、原点を中心にZ軸周りに20度回転させます。


guideグループかdiffsグループを表示させて、ベアリングの位置を確認します。
問題なければ、回転角度を忘れないように円柱の名前を変更しておきます。
bearing_y15_z0_y45_z20
bearing_y15_z120_y45_z20
bearing_y15_z120_y45_z20


ベアリングを配置するために穴をあけます。
ツールパレットのCenter circleを選択して、手前側のベアリングの下に向いている面の中心から直径6mmの円を作成します。
(マウスカーソルがほかのオブジェクトに吸い付いてしまう場合はTabキーを押して直接数値を入力してもOKです)


3キーを押して面選択モードにして、円の中の面を選択してEXTRUDEモードに入り、上方向に6mm押し出します。


名前をbearing_diffにします。


同じ位置に、直径1.3㎜の円を作成します。円の作成中にTabキーを押して1.3と入力します。
(M1.4ネジで固定するので、それより少し小さくしておきます)


中央の小さい円の面を選択して、下方向に2.0mm引き伸ばします。


名前をbearing_screw_hole_diffにします。


奥側のベアリング円柱に対しても同じことを行います。


上側のベアリングはトラックボールケースを貫通してねじ止めする必要があるため、bearing_diffの高さを3mmにして、追加で直径3.2mm, 高さ10mmの円柱を加えます。(使用するM1.4ネジの頭のサイズによって3.2mmの部分を調整してください)


円柱を作るために作った円はもういらないので、選択してXキーかDelキーを押して削除します。


ベアリング位置確認用のオブジェクト(bearing_y15...等)と、ベアリング配置場所用の差分オブジェクト(bearing...diff等)をそれぞれグループ化して、名前をbearings, bearing_diffsとします。

これでベアリングの配置まわりは終了ですが、実際には外形モデルを作成しながら位置・角度を調整したり何度かやり直したりもします。
この調整・やり直しが面倒くさいのがPlasticityの残念な部分です。

※かなり細かい話
使用しているベアリングの内径が1.5mm、それを留めるネジの直径が1.4mm、実はサイズがあっていません。
(M1.5のネジというのはあまり一般的ではない模様)
そのため上記の説明通りに作るとトラックボールが外側に0.05mm逃げることになります。((1.5mm - 1.4mm) / 2)
ほとんどの場合は問題ありませんが、25mmよりわずかに小さいトラックボールを使う場合ではボールケースの内側を擦ったりすることもあります。
問題が出た方や細かい部分にこだわりたい方はネジ穴の位置を決定するbearing_screw_hole_diffを球の中心方向に0.05mm寄せる対処を行ってみてください。

外形の作成

外形のつくりかたはいろいろありますが、ここでは自分がよくやる方法を説明します。


guideグループだけを表示している状態にして、上からの視点に変更し、Snap to gridの単位を1mmに変更します。
ツールパレットでLineを選択し、図のよう球の近くから開始して、右に28mm、下に26mm、左に28mmの線を引きます。
(main_pcb_2とswitch_plateとの隙間が1mmあくようにしています)


ツールパレットのCenter circleを左クリックで長押しして、Two-point circleを選択します。


線の端と端をつないで円を作成します。


視点を変えると、図形がbottom_plateに張り付くように配置されているのが確認できます。
(もし浮いている場合は移動させてください)


視点を手前からに変更します。
ツールパレットでLineを選択して、先ほど作成した図形の角の部分から線を引き始めます。
上に33.7mm、左に25mm、下に22mm、左に16mm、下に11.7mm、右に41mmです。


このまま進めてもいいですが面白味が足りないので、すこし遊びます。
先ほど作成した図形を選択している状態で、ウィンドウ下側の「・・・」をクリックして「Unjoin」を選択します。


図形が線ごとに分解されます。


2キーを押して辺選択モードにして、球に近い縦線と横線をShiftキーを押しながら選択します。


この状態でAltキーを押しながらSキーを2回押します。(Subdivideを2回行いました)
それぞれの辺の内部に小さい点が2つずつできます。


1キーを押して点選択モードに変更して、図の3点を選択します。


Gキーを押してMOVEモードに入り、左に6mm、下に1mm移動させます。


先ほど分解した線を全て選択して、ウィンドウ下側の「・・・」をクリックして「Join」を選択します。


バラバラの線が再び一つの図形にまとまります。


見やすい位置に視点を回転させます。
3キーを押して面選択モードに切り替えて、底面の図形を(2つの部分に分かれているのでShiftを押しながら)選択します。


EXTRUDEモードの黄色いハンドルを上方向に引っ張って、高さ35㎜の立体を作成します。


立体の向こう側に見える図形の面を選択します。


EXTRUDEモードの黄色いハンドルを手前方向に引っ張って、奥行30㎜の立体を作成します。


4キーを押してオブジェクト選択モードに切り替えて、作成した2つの立体を選択します。


Qキーを押してBOOLEANモードに入り、OperationをIntersection(交差)にします。


右クリックかEnterキーを押して確定すると、立体が重なっている部分だけが残ります。
これを外形の基本形状として編集していきます。以下は外形に対する味付け的なモデリングなので気に入った作業だけ行えばOKです。


外形を作成するために作った図形をCtrl+Gでグループにまとめて非表示にしておきます。
グループ名をlinesにします。


外形オブジェクトを選択した状態で.(ピリオド)キーを押すと、選択しているオブジェクトだけの表示になります。
ウィンドウ上部の「Isolated」をクリックすると元に戻ります。


3キーを押して面選択モードに切り替え、外形オブジェクトの底面を8mm上方向に上げます。


底面を選択している状態でShiftキーを押しながらDキーを押して、面を複製します。
自動的に複製された面のMOVEモードに入るので、5mm, 0mm, -8mm移動させます。


元の立体のほうの底面を選択します。


Shiftキーを押しながらXキーを押して、選択している面だけを削除します。


下からの視点に切り替えます。
ツールパレットからLineを選択して、図の位置(センサーチップ側の壁と同じ位置)の線の上にマウスカーソルを乗せます。


この状態でShiftキーを押して離すと、紫色の補助線が引かれます。


補助線を利用して、面の少し上から少し下まで線を引きます。
(長さは適当でOKです)


線を選択した状態でCキーを押してCUTモードに入り、複製して移動した底面をクリックします。


視点を変えると、カットする面が赤く表示されているのが確認できます。
右クリックかEnterキーでCUTを確定します。


底面がカットされました。
カットするために作成した線と、カットされた底面の切れ端をXキーかDelキーで削除します。


視点を手前からに変更します。
2キーを押して辺選択モードに切り替えて、図のように底面だった部分と複製して移動した底面の辺を同時に(左からの矩形で)選択します。


辺が選択されている状態で、ウィンドウ下部の「・・・」→「Loft」を選択します。
(もしくはLキーを押してもOK)


Loftが実行されて辺と辺の間に面が作成されました。


底面付近がむにゅっとなっているのが気に入らないので、図の「G1」という部分を2回クリックして「G0」に変更します。
形状に納得がいったら右クリックかEnterキーを押して確定します。


外形の上側の部分、底面、先ほどLoftで作成した部分を選択して、ウィンドウ下部の「・・・」→「Join」を選択します。
(もしくはJキーを押してもOK)


3つのSheets(面)がくっついて1つのSolids(立体)になりました。
(PlasticityではCurvesが閉じていればSheetsに、Sheetsが閉じていればSolidsになります)


2キーを押して辺選択モードに切り替え、図を参考にセンサーカバー部の辺を選択します。(複数選択なのでShiftキーを押しながらクリック)
自動的にFILLETモードのハンドル(黄色い丸と線)が表示されるのでドラッグして角を丸めます。
(辺の選択順序によってハンドルが出る位置が変わりますが、どこでもOKです)


角の外側に引っ張ると、フィレット(R面取り)ができます。
Distance(フィレットの半径)は9mmくらいにします。


外形モデルのへこんでいる部分はRが3mmのフィレットにします。


トラックボールをはめ込む部分のフチの辺の一部を選択します。


FILLETのハンドルを角の内側方向(オブジェクト内部に向かう方向)に引っ張ると、CHAMFER(C面取り)になります。
トラックボールをはめ込む部分のフチは、見た目のメリハリのために1mmのC面取りにします。(R面取りがよければそれでもOKです)


オブジェクト名をouterにしておきます。
これで外形の完成です。

組み合わせ

これまで作成してきたオブジェクトを組み合わせてトラックボールケースを仕立て上げます。


グループをすべて非表示にします。
outerオブジェクトをShift+Dもしくはコピー&ペーストで複製して、名前をtrackball_caseにします。
(Plasticityは作業履歴もスクリプトもパラメトリック編集も無いので、手動で途中形状を残しておくのがいいと思います)


diffsグループの左側の > をクリックして、含まれるオブジェクトが見えるようにします。


trackball_caseオブジェクトを選択します。


diffsグループのすぐ下に書いてあるSolidsを、Ctrlキーを押しながらクリックします。


Qキーを押してBOOLEANモードに入ります。


Tキーを押してKeep tools状態にします。
(これをしないとBOOLEANに使用したdiffsのオブジェクトは消費され消えてしまいます。Tキーを押しておくと消えません)


右クリックかEnterキーを押して確定します。


bearing_diffsグループに対しても同じ操作を行います。
(trackball_caseを選択 → Ctrlキーを押しながらbearing_diffsグループのSolidsをクリック → Qキー → Tキー → 右クリック)


完成です。
お疲れさまでした。

STLファイルのエクスポート

3DプリンターでプリントするためのSTLファイルを出力します。


trackball_caseオブジェクトを選択します。


ウィンドウ左上のPアイコンをクリックして、メニューのExportを選択します。


ファイルの種類をSTLにして、保存ボタンを押します。


※この時点ではまだファイルに保存されていません。
左下のDensityでポリゴンの細かさを設定できます。
デフォルトでは0.5ですが、今回は曲面が多い形状を作ったので0.9くらいがお勧めです。1.0を指定するとポリゴンが非常に細かくなりますが、ファイルサイズも大きくなります。
(無料版だと細かさの設定が出来ないかもしれません)
右クリックかEnterキーを押すとファイル出力が行われます。


3Dプリントして取り付けます。
操作感に問題がないか確認しましょう。(問題があったら頑張って直してください!)

おわりに

本記事には自分がいつもトラックボールケースを作るときの手順をいろいろ詰め込みました。Plasticityを楽しむきっかけになったでしょうか。
もっといいやり方を知っている方、いいやり方を見つけた方は是非ともコメント欄で教えてください!!🙇‍♂️🙇‍♂️🙇‍♂️

自作キーボード用トラックボールケースの3DP用モデリング例(Keyball用 Blender編)

この記事では、実際にトラックボールケース(Keyball用、34mm球、セラミック球支持)をモデリングする手順を簡単になぞっていきます。
もちろんこれが正解というわけではないですし、自分はBlenderについても初心者なので効率がよくなかったりヘンな手順だったりするかもしれません。
ですがこの記事によって最低限使用できるものが作れるようになるはずです。
トラックボールケースはキーボードケースよりサイズが小さく出力時間も短くて済むので作りやすいですし、個性が出やすいので意外と楽しいです。気になった方はトライしてみてください。

記事にあるスクリーンショットの操作する個所について

マウス操作やキー入力が必要な個所はオレンジ色の枠で囲っています。
3Dビュー上でショートカットキー入力が必要な場合は左下に文字で表示しています。
操作によって変化するところや注目すべき場所は緑色の枠で囲っています。

インストール

公式サイトからインストーラをダウンロードします。記事執筆時のバージョンは4.2.1LTSです。
https://www.blender.org/download/

ダウンロードが終了したら、blender-4.2.1-windows-x64.msiをダブルクリックします。
インストール時の設定はデフォルトのまま進めてOKです。




初回起動時

インストールが完了したらBlender 4.2のアイコンをダブルクリックして起動します。

初回起動時には基本的な設定を行う小さいウィンドウが表示されます。
こだわりがなければそのままで問題ありません。オススメは言語設定を英語にすることです。わからない事柄を検索する際に見つけやすくなります。

次に出る小さいウィンドウは毎回の起動時に表示されます。
今は用がないので、このウィンドウ外をクリックすれば消えます。

最初に起動すると以下のようなウィンドウが表示されます。

最初からシーンに箱とカメラとライトが配置されています。
これらは必要ないので、マウスの左ドラッグでまとめて選択して、Xキーを押して削除します。

画面がスッキリしました。

Blenderの距離単位のデフォルトはメートルなので、ミリメートルに変更します。

その少し上にあるUnit Scaleを0.001にします。

Viewport Overlays設定で、グリッドガイドのサイズを0.001にします。
StatisticsをONにして、ウィンドウ左上に頂点数などの情報が表示させます。
Face OrientationをONにして、ポリゴンの表裏が色で判別できるようにします(表→青、裏→赤)。

ウィンドウの一番下の部分を右クリックしてメニューを表示させ、Scene Statisticsにチェックを入れます。
ウィンドウ右下にシーンの情報やオブジェクト選択状況などが表示されるようになります。

シーンのビュー設定を調整します。
メインの3Dビューの右側に設定タブが表示されていない場合、小さい「く」の字のようなアイコンをクリックします。またはNキーを押してもいいです。

Viewタブをクリックしたら、Clip Startを0.1mmに、Endを100000mmに変更します。

初期設定が完了したので、保存しておきます。
ウィンドウ上部のメインメニューから、File -> Defaults -> Save Startup Fileを選択します。

以上で初期設定は終了です。
この設定は以下の動画を大いに参考にしています。ほかにも役立ちそうな設定があるので興味がある方は見てください。
https://www.youtube.com/watch?v=R-Vq2O-hvfo

ガイドモデルの作成

トラックボールケースをモデリングする前に、基準となるKeyballの構成要素となる仮モデルを作っておきます。
ガイドとなるモデルを作っておくことで、トラックボールケースをキーボードにフィットさせたり、干渉を事前にチェック出来たりします。

最初にグループ名を変更しておきます。
ウィンドウ右上のアウトライナの白い箱のアイコンの名前をダブルクリックするかF2キーを押して名前を変更します。ここではguideとしておきます。

トラックボールの球を作成します。
ウィンドウ上部のメニューのAdd -> Mesh -> UV Sphereを選択します。
(またはShift+Aでもオブジェクトの追加が出来ます)
中央に球が作成されて、ウィンドウ左下に詳細設定の窓が現れるので半径を17mmにします。
(キーボードで入力するとき、単位のmmを入力する必要はありません)

球の名前もわかりやすくtrackball 34mmに変更しておきます。

センサー回りのガイドモデルを作る前に情報収集します。
Keyballシリーズで採用されているトラックボールセンサーはPMW3360というものらしいので、"pmw3360 datasheet"で検索して出てくるデータシートをもとに各サイズを決めます。
データシートによるとレンズパーツの大体のサイズは、(Keyball設置基準で)縦が21.35mm、横が19.00mm、厚みは形状が複雑なのでノギスで適当に採寸し3.4mmを得たとします。
(もしくは全部の形状をノギスで採寸してもいいです)

球の追加と同様の操作で、箱を追加します。

TransformのDimensionsで箱のサイズを決めます。
個人的経験から、家庭用3Dプリンターの精度で0.1mmより細かい値で調整することはほぼないので、Blender上のサイズも0.1mm単位で扱っています。
というわけで、箱のサイズを3.4mm x 19.0mm x 21.4mmにします。

データシートによるとレンズから検知位置(机)までの距離は2.4mmになっていますが、もともとマウス用センサーなことを考えるとトラックボールの球面に対してどう調整すればいいかよくわかりません。まぁ2.4mmにします。
またセンサーが反応する部分はレンズの上から10.97mmとなっていますが、面倒なのでおおよそ中央だとみなします。
したがって、レンズの位置は(21.1, 0, 0)に設定します。

レンズが箱のままなので、角を丸めます。
レンズオブジェクトを選択状態でTabキーを押して、オブジェクトの頂点・辺・面を調整できるEditModeに入ります。
EditModeで1キーを押すと頂点(Vertex)モード、2キーを押すと辺(Edge)モード、3キーを押すと面(Face)モードです。
2キーを押して辺モードに切り替えます。

面の向こうが見えないと都合が悪いのでウィンドウ右上の線画の球ボタンを押してワイヤーフレーム描画に切り替えます。

マウスの左ボタンドラッグで上部の長い辺2本を選択します。

Shiftキーを押しながら、左・右・下の長い辺2本ずつを選択します。

この状態でマウスの右クリックを押して、Subdivideを選択します。
ここで辺を分割するのは、後の手順で箱の角を丸める際にこの辺が丸くならないようにするための対処です。
(RMBはRight Mouse Buttonの略です)

1キーを押して頂点モードに切り替え、角の頂点8つを選択したあと、Ctrl+Gキーを押します。

Assign to New Groupボタンを押すと、選択していた頂点がグループとして登録されます。

Tabキーを押してObjectモードに戻ります。

次の作業に影響が出てしまうので、オブジェクトに設定されている拡大率を頂点に適用します。
(見た目の大きさをそのままに、拡大率が1倍になるように頂点位置を自動的に移動させます)
Ctrl+Aを押して出てきたメニューからScaleを選択します。

オブジェクトの角を丸める要素(モディファイア)を追加します。
ウィンドウ右下でModifiersタブをクリックしてAdd Modifierボタンを押します。

続けて、Generate -> Bevelを選択します。

Limit MethodをVertex Groupに変更します。

Vertex Groupの右側の空欄をクリックして、先ほど登録した頂点グループであるGroupを選択します。

データシートによるとレンズパーツの角のRは7.1mmとなっているので、Amountを7mmに、Segmentsを8にします。
(この時、オブジェクトのScaleが1.0でない場合はBevelのサイズが正しく反映されません)

箱オブジェクトの名前をlensに変更します。

次はセンサーPCBです。
現物をノギスで計測します。高さが25.0mm、幅が22.2mm、厚さが1.6mm、レンズの上端とPCBの上端との差が4.0mmでした。
上部メニューのAddもしくはShift+AからCubeを作成し、サイズを1.6mm x 22.2mm x 25.0mmに設定します。

今回は3Dビュー上で箱を移動させます。
ウィンドウ左側の矢印アイコンをクリックしてオブジェクト移動モードに変更します。
ウィンドウ上部の磁石アイコンをONにしてオブジェクトの移動がグリッドに沿うようにします。(中途半端な値になるのを避けられます)
ウィンドウ右上のXYZ軸表示の-Y(薄い緑色)をクリックするか、テンキーの1を押して視点を正面からのビューに切り替えます。
視点の平行移動はウィンドウ右側の手のアイコンをドラッグするか、Shift+マウスホイールドラッグです。

箱の中央にある矢印をドラッグするか、Gキーを押して移動させます。
まずはレンズの右側ピッタリに配置します。マウスホイールでズームインすると移動単位が0.1mmになるので適宜調整してください。

そのあと、箱を4mm下に移動させます。
箱の位置は(23.6mm, 0mm, -5.8mm)になっているはずです。

箱の名前をcensor pcbにします。

同様に、センサーチップのサイズをノギスで測ります。端子の足や出っ張った部分、レンズパーツの接合部などを含めると、幅12.0mm、高さ17.0mm、厚み(レンズまでの距離)4.8mm、センサーレンズとの高さの差は-3.0mmでした。
Blender上でShift+A → Mesh → Cubeを作成し、サイズをセットして、レンズの右側にピッタリつき上端がレンズから3mm低い位置に調整します。位置は(25.2mm, 0mm, -0.8mm)です。
オブジェクト名をcensor chipにします。

次はボトムプレートの位置を調べます。
センサーPCBをKeyballのL字コンスルーに取り付け、センサーPCBの上端からボトムプレートまでの距離をノギスで測ります。高さの差は25.4mm、ボトムプレートのアクリル板の厚みは2mmでした。
箱を作成し、サイズを(100mm, 100mm, 2mm)、位置を(0mm, 0mm, -19.7mm)、オブジェクト名をbottom plateにそれぞれ設定します。

このように地道に計測とモデル配置を行っていきます。

メインPCB(L字コンスルーの下)
厚み 1.6mm、ボトムプレートとの隙間 1.8mm
Cube サイズ(20mm, 20mm, 1.6mm)、位置(34.4mm, 0mm, -16.1mm)、オブジェクト名 main pcb 1

L字コンスルー
Cube サイズ(3mm, 18.2mm, 4mm)、位置(25.9mm, 0mm, -13.3mm)、オブジェクト名 L conthrough

メインPCB(L字コンスルーの向こう側)
Cube サイズ(20mm, 20mm, 1.6mm)、位置(24mm, 24mm, -16.1mm)、オブジェクト名 main pcb 2
(上からの視点に切り替えています)

メインPCB(上記のすぐ左側、段差がある部分)
Cube サイズ(20mm, 20mm, 1.6mm)、位置(4mm, 27mm, -16.1mm)、オブジェクト名 main pcb 3

スイッチプレート(L字コンスルーの後ろ側)
Cube サイズ(20mm, 20mm, 1.6mm)、位置(43.4mm, 0mm, -11.1mm)、オブジェクト名 switch plate
(手前からの視点に切り替えています)

以上でガイドモデルの作成は終わりです。

ホルダー部

トラックボールを保持する部分を作成していきます。ここではこれをホルダー部と呼びます。
これから作成するオブジェクトがガイドモデルと混ざるとややこしいので、作業場所を作成します。
ウィンドウ右上のアウトライナのScene Collectionを右クリックして、New Collectionを選択します。
新しくできたコレクション(白い箱)の名前の部分をダブルクリックするかF2キーを押して、holderに変更します。

さらに作業途中のオブジェクト置き場として、holderの下にholder workを作成します。

ガイドモデルは邪魔なので、いったん非表示にします。
アウトライナの右側にある目のアイコンをクリックすると非表示になります。

最初に、ボールホルダーの外側を作ります。
トラックボールのサイズが34mmなので、それより大きめの39mmの球(UV Sphere)を作成します。Radiusは半径なので39mmの半分の19.5を入力します。
また、3Dモデルを出力したときに滑らかになるように、球を細かい面で分割するようにします。
Segments 128, Rings 64, Radius 19.5mm オブジェクト名 holder shell (パソコンのスペックが心もとない方はSegments 32, Rings 16のままでもOKです。あとから精細なオブジェクトに取り換えることもできます)

次に、トラックボールを引っ掛ける部分を作ります。
箱(Cube)を作成し、サイズを(60mm, 60mm, 60mm)、X軸回転を45度、オブジェクト名をholder areaにします。

この箱を縦方向につぶしたいので、箱を選択中に3DビューでCtrl+Aを押して、出てきたメニューからRotationとScaleを選択します。

これによって、箱が回転なし、拡大なしの状態になります。

箱の角を丸めるために、Bevelモディファイアを追加します。

ここではとりあえずAmountを6mm、Segmentsを8としておきます。

LocationのZ値にScaleのZ値に-9mm、ScaleのZ値に0.4を入力します。

球とひし形の重なった部分を取り出します。
holder shellを選択して、Booleanモディファイアを作成します。

BooleanのモードをInsersectに切り替え、Objectの空欄をクリックしてholder areaを選択します。
(アウトライナからholder areaをドラッグ&ドロップでもOK)

holder areaを非表示にすると、球と重なった部分だけが残っているのがわかると思います。

同様の手順で、ホルダーの内部をくりぬきます。
球(UV Sphere)を作成し、直径を35.5mm(半径17.75mm)、オブジェクト名をholder innerにします。

内側の球の部分を削り取ります。
holder shellを選択して、Booleanモディファイアを作成します。

Objectの欄をクリックしてholder innerを選択します。

holder innerを非表示にすると、内側がくりぬかれているのが確認できます。

上からの視点に切り替えて、メジャーツールを使ってホールド部分の距離を測ります。
メジャーの端が上手くフチにくっ付かないときはマウスホイールで十分にズームアップすると簡単になります。

測定された距離は32.6348mmと表示されています。
トラックボールは34mmなので、ちょっとはめ込みがキツい可能性があります。
3Dプリンターの精度にもよりますが、大体トラックボールのサイズより0.5mm~1.0mmほど狭いくらいが良いです。

フチの位置を決めているのはholder areaなので、holder areaを選択して位置を調整します。
holder areaを選択して、非表示のままでLocationのZ値を少しだけ下げます。
holder areaの位置を変更したら、メジャーの端をドラッグしてフチの間の距離を再度測定します。
Z値を-10mmにしたところ、フチの間の距離は33.427mmになりました。ひとまずこの値で進めます。
3Dプリンターで出力した後でキツイ・ゆるい場合はこの個所を再度調整します。

※ちなみに、メジャーを調整した直後にXキーを押すとメジャーを削除できます。

作業領域とは別に、実際に使用するホルダーの部品を置く場所を作成します。
アウトライナのholderを右クリックしてNewを選択したあと、名前をholder partsに変更します。

holder shellを選択した後、マウスカーソルを3Dビューのほうに置いた状態でShift+Dを押してオブジェクトを複製します。
複製した直後はマウスカーソルに応じてオブジェクトが移動するので、ESCキーを押して移動をキャンセルします。

アウトライナ上で、複製されたholder shell.001をholder partsコレクションに移動(ドラッグ&ドロップ)したあと、名前をholder cupに変更します。

このあとholder cupを回転させますが、Booleanモディファイアで使っているオブジェクトは付いてこないので、ここでholder cupに適用します。
holder cupを選択した後、上のBooleanモディファイア(Intersect)の小さいvの字のアイコンをクリックしてメニューからApplyを選択します。

内側をくりぬくのは後で行いたいので、もう一つのBooleanモディファイア(Difference)は×ボタンを押して削除します。

作業用のholder workコレクションを非表示にしたあと、holder cupを回転させます。
holder cupのY軸回転に-50度を設定します。

holder cupを支える柱を立てます。
目安のために、guideコレクションの表示をONにします。

Shift+A → Mesh → Cylinderで円柱を作成し、適当に配置します。
ここではVertices 128、Radius 12mm、Depth 10mm、Location Z -16mmとしました。

オブジェクト名をholder baseにしておきます。

以上でホルダー部の作成は終了です。

センサーカバー内部

センサーカバーの外側を作る前に、センサーカバーの内部を作成します。
内部を作成するというのは、センサーPCBやレンズが入るように穴をあけることを指します。

最初に、作業場所となるコレクションを作成します。
ウィンドウ右上のアウトライナのScene Collectionを右クリックしてNew Collectionを選択し、作成されたコレクションの名前をcensor coverにします。

さらにcensor coverの下にcensor cover diffsを作成します。

センサーカバーの内部の穴となる形状は、ガイドモデルをもとに作成します。
guideコレクションの中にあるbottom plate、censor chip、censor pcb、L conthrough、lens、main pcb 1を選択します。
(Ctrlキーを押しながら左クリックで一つずつ選択するか、bottom plateを左クリックした後でShiftキーを押しながらmain pcb 1をクリックしてください)
選択状態でCtrl+Cを押してコピーをした後、censor cover diffsコレクションを選択してからCtrl+Vを押してペーストします。

部品を入れ込むにはその部品の大きさよりもすこし広い穴をあける必要があります。
3Dプリンターの精度にも因りますが、平面方向(X軸方向とY軸方向)は0.3mmくらい広げれば大体は問題ないです。
垂直方向(Z軸方向)は精度があまり出ないので、少し多めにマージンを取ったほうがいいです。とりあえず上面を0.5mm上げることにします。

頂点を数値入力で調整する場合、オブジェクトに拡大がかかっていると意図した結果になりません。
先ほどペーストで複製したオブジェクトを選択して、Ctrl+Aを押し、出てきたメニューからScaleを選択します。

最初はレンズ部分から始めます。
lens.001オブジェクトを選択して、正面からの視点に切り替えます。(右上の-Y軸をクリックするかテンキーの1を押す)

オブジェクトを選択している状態でスラッシュ(/)キーを押すと、そのオブジェクトだけの表示になります。再びスラッシュキーを押すと元に戻ります。
頂点を選択しやすいように、右上のアイコンを押して表示をワイヤーフレームモードに切り替えます。

Tabキーを押してEditモードに変更したあと、1キーを押して頂点選択モードにします。

マウスの左ボタンをドラッグして、左側の頂点をまとめて選択します。
(左クリックで頂点を一つずつ選択していくと、向こう側の頂点が選択できないので注意)

右上を見ると、X座標の値が-1.7mmとなっています。ここから0.3mm左(-X方向)にずらしたいので、-2.0mmをセットします。

同様に、右側の頂点を選択します。

X座標の値が1.7mmなので、0.3mm足して2.0mmにします。

上側の頂点を選択します。

Z軸の値が10.7mmなので、0.5mm足して11.2mmにします。

下側の頂点を選択します。

センサー部品はセンサーケースの下側から入れるため、下方向に穴をつなげる必要があります。
下側の頂点のZ座標値は適当に-30.0mmとしておきます。

手前側と奥側にもずらす必要があるので、右上の青いZを押すか、テンキーの7を押して上からの視点にします。

奥側の頂点を選択します。

選択している頂点のY座標値は9.5mmとなっています。
ここから+Y方向に0.3mmずらしたいので、9.8mmと入力します。

手前側の頂点を選択します。

Y座標値に-9.8mmと入力します。

前後左右上下の頂点の調整が終わったので、Tabキーを押してオブジェクトモードに戻り、スラッシュキーを押してほかのオブジェクトの表示をもとに戻します。

上記の頂点の調整を、censor chip.001、censor pcb.001、L conthrough.001に対して同じように行います。
一つずつオブジェクトを選択してスラッシュキーで単独表示にしたあとTabキーでEditモードに入り、XY方向に±0.3mmずらす、+Z方向に+0.5mmずらす、-Zには-20mmを入力してください。

ガイドモデルと同時に表示すると、少し膨らんでいるのが確認できます。

上からも確認しておくと、調整し忘れを防止できます。

トラックボールケースの下側に出っ張った余計な部分を削り取るため、ボトムプレート部分も調整しておきます。
ボトムプレートはトラックボールケースの底の部分になるので上面は調整する必要ありません。
下の部分だけ多めに広げておけばOKです。
bottom plate.001オブジェクトを選択して、スラッシュキーを押し、Tabキーと1キーを押します。

下側の頂点を選択します。

Z座標値に-20mmと入力します。

Tabキーとスラッシュキーを押して元の状態に戻します。

L字コンスルーが乗っているメインPCBの部分も削り取っておく必要がありますが、ガイドモデルを適当に作っていたため、他のオブジェクトより多めに頂点をずらす必要があります。

main pcb 1.001を選択してスラッシュキーとTabキーと1キーを押します。

左側の頂点を-X方向に0.3mmずらします。

上側の頂点を+Z方向に0.5mmずらします。

下側の頂点を-Z方向に適当に大きくずらします。

上からの視点にして、奥側の頂点を選択し、適当に大きくずらします。

手前側の頂点を選択し、適当に大きくずらします。

Tabキーとスラッシュキーを押して元の視点に戻します。

そういえばレンズパーツの中央近くに三角形の出っ張りがあるんですが、これが引っ掛からないようにするための穴をあける必要があるんでした。
(ガイドモデルで作っておくべきでしたが、忘れていました)
箱を作成し、サイズを(2mm, 5mm, 30mm)、位置を(19mm, 0mm, -10mm)、オブジェクト名をlens deppari yokeにします。

トラックボールの動きを感知させるための、センサーレンズの前にあける穴を作ります。
データシートによると、円と四角を組み合わせたような形の穴をあけるよう指定があります。
まず円柱を作成し、半径を2mmに設定します。高さ(Depth)は適当に5mmにしておきます。

Y軸回転に90度を設定して円柱を横に寝かします。

頂点を編集するので、スラッシュキー、Tabキーを押します。
そのあと視点を右側からに切り替えるために右上のX軸をクリックするか、テンキーの3を押します。

上半分(真ん中は含まない)の頂点を選択します。

Xキーを押すと削除メニューが表示されるので、Verticesを選択して頂点を削除します。

選択していた頂点が消えました。

一番上に見えている頂点をマウスの左ボタンドラッグで選択します。
4頂点選択されているはずです。

Fキーを押すと、選択している頂点の形で面が作成されます。

上の面が選択された状態でEキーを押すと、面の押し出しが出来ます。
Eキーを押した後にマウスを上方向に移動させて面を4mm押し出します。

3Dビューの表示をソリッド表示に切り替えます。
ワイヤーフレーム状態ではわかりませんでしたが、円柱の頂点を半分削除したときにその頂点に属していた面も消えたため、オブジェクトに穴が開いてしまっています。

穴の開き方が単純な場合は、頂点を全選択してFキーを押せば穴がふさがります。
全選択はAキーです。

Tabキーとスラッシュキーを押して元の視点に戻します。

ホルダー部とセンサー部の間に配置します。(18mm, 0mm, 0mm)

オブジェクト名をcensor holeにします。

以上でセンサーカバー内部のモデリングは終了です。

センサーカバー

センサー部品を覆うセンサーカバーを作成します。
オブジェクトを配置するコレクションを作成します。
ウィンドウ右上のアウトライナのcensor coverコレクションを右クリックしてNewを選択し、作成されたコレクションの名前をcensor cover partsにします。

内部のオブジェクトを覆い、外部のオブジェクトと干渉しなければどんな形でもいいですが、Keyball純正のトラックボールケースっぽい丸みを帯びた形状を作成していきます。
ワイヤーフレーム表示に切り替え、箱を作成し、サイズ(16mm, 26mm, 33mm)、位置(24mm, 0mm, -3mm)に設定します。

Ctrl+Aを押してメニューからScaleを選択して拡大率を頂点に適用します。

Tabキーを押してEditモードに切り替えます。

Aキーを押して頂点を全選択し、マウスの右クリックのメニューからSubdivideを選択します。
中割りの頂点が増えます。

下の画像の11個の頂点を選択し、Ctrl+Gを押してAssign to New Gruopをクリックして新しい頂点グループを作成します。
Shiftを押しながらクリックしていくと複数の頂点を選択できます。

同様に、下の画像の7つの頂点を選択して新しい頂点グループを作成します。

Tabキーを押してObjectモードに戻り、手前からの視点に切り替えます。

Bevelモディファイアを作成し、Amount:8mm、Segments:8、Limit Method:Vertex Group、Vertex Group:Groupに設定します。
センサーカバーの内部形状にぶつからないように注意します。

2つめのBevelモディファイアを作成し、Amount:4mm、Segments:8、Limit Method:Vertex Group、Vertex Group:Group.001に設定します。

オブジェクト名をcensor cover shellに変更します。

以上でセンサーカバーの作成は終了です。

セラミック支持球を埋め込む穴

支持球として2mmのセラミック球を使用するので、2mmの穴をあけます。
オブジェクトの置き場所のコレクションを作成します。
アウトライナのholderコレクションを右クリックしてNewを選択し、新しいコレクションの名前をbearing diffsにします。

セラミック球を埋め込むための穴を六角柱(Cylinder)で作成します。
Vertices:6、Radius:1mm、Depth:2mm、オブジェクト名をbearing diffに設定します。

Dimensions(オブジェクトのサイズ)をよく見ると、Xが1.73mm、Yが2mmとなっています。
六角形の角と角の距離は2mmですが、辺と辺の距離は1.73mmだと2mmの支持球が入らないので、すこし拡大します。
(2.0 / 1.73 = 1.156)

穴の向きを回転させ、トラックボールに接する位置まで移動します。
X軸回転とZ軸回転に90度を、X座標値に18mmを入力します。(トラックボールの半径17mm+支持球の半径1mm)

位置、回転、拡大をすべて頂点に適用するために、Ctrl+Aを押してAll Transformsを選択します。
この状態にすることで、原点を中心とした回転調整が行えるようになります。

支持球の配置を決めます。
この角度の設定によってトラックボールの操球感に影響があります。
角度が小さいと安定感が高くトラックボールがカタカタしづらくなりますが、摩擦感が高くなり滑りが悪く感じられます。
角度が大きいと安定感が低くなりトラックボールがカタカタしやすくなりますが、摩擦感が低く滑らかに滑ります。
今回は安定感重視の15度で進めます。Y軸の回転角度に15と入力します。

支持球は3つ必要なので、Ctrl+Cでコピーを行い、Ctrl+Vでのペーストを2回行います。

bearing diff.001を選択して、Z軸回転に120を入力します。

bearing diff.002を選択して、Z軸回転に-120を入力します。

3つの支持球の全体的な角度を設定します。
視点を正面からに切り替えて、3つのbearing diffオブジェクトを選択し、Rキーを押して回転モードに入ったあとすぐにマウスの左クリックをします。

左下のRotateのAngle欄で角度の調整をします。
ひとまず-40度を設定します。 Keyballをテンティングして使用している方はもっと大きく傾けると安定感が向上します。

支持球を埋めるための穴あけはこれでOKですが、トラックボールを入れるための穴が直径35.5mmの球なので、これだと0.5mmのくぼみしか作れません。
なので、支持球を埋めるための補助的な造形を行います。
また支持球の穴が外側に貫通するのを防ぐため、外側に追加で厚みを持たせます。

オブジェクト配置コレクションをholderコレクションの下に作成し、bearing supportsと名付けます。

半径2mmの球(UV Sphere)を作成します。

X軸方向のサイズを1.6mm、X座標値を18mmに設定します。

選択中のSphereをコピー&ペーストで一つ複製し、Sphere.001を選択した後にX座標値を19.3mmに設定します。

オブジェクト名をそれぞれbearing support inner、bearing support outerとします。

ここからはbearing diffで行った作業と同じことを行います。
Ctrl+A → All Transformsで移動と拡大を頂点に適用する、Y軸回転角度に15度をセット、コピー&ペーストでそれぞれ2つずつ追加する、ペーストしたオブジェクトのZ軸回転角度をそれぞれ120度と-120度にする、bearing support全部を選択して正面視点で-40度回転させる、です。
これらを行うとbearing supportがbearing diffと同じ位置に来ているはずです。

以上で支持球を埋め込む穴をあける作業は終了です。

トラックボールケース取り付け用のネジ穴

トラックボールケースをボトムプレートの下からネジ止めしてとめるための足と穴を作ります。
オブジェクトの置き場所となるコレクションをholderの下に作り、foot diffsと名付けます。

ネジ穴として六角形の柱を作成します。
Keyballに付属しているネジはM1.7なので、それより少し小さく六角形の辺の間の長さを1.6mmにします。
Radiusを0.925mmにすると良い感じです。
Depthは適当に5mmとしておきます。

オブジェクトを(10.7mm, 8mm, -17mm)に配置し、名前をfoot screw holeに変更します。

コピー&ペーストかShift+Dでfoot screw holeオブジェクトを複製し、(10.7mm, -8mm, -17mm)に配置します。

足の柱を作成していきます。
オブジェクト配置場所のコレクションをholderの下に作成し、名前をfoot partsにします。

柱を作成し、Vertices:32、Radius:4mm、Depth:12mmに設定します。

オブジェクトを(10.7mm, -8mm, -13mm)に配置し、名前をfootにします。

footを複製し、(10.7mm, -8mm, -13mm)に配置します。

以上で取り付け用の足の作成は終了です。

組み合わせ

今まで作成してきたオブジェクトたちを組み合わせて、トラックボールケースにします。

アウトライナのScene Collectionを右クリックしてNew Collectionを選択し、trackball caseにします。

特別感を出すために、trackball caseコレクションを右クリックして、好きな色を選択します。

オブジェクトをまとめるためのオブジェクトを用意します。
箱や球などでもいいですが、平面(Place)を作成します。

オブジェクト名をtrackball caseにします。

作成したオブジェクトの形状は使用しないので、TabキーでEditモードに入り、Aキーで全選択し、Xキーで頂点の削除を行った後にTabキーを押してObjectモードに戻ります。
この作業を行うと、頂点数の表示が0になります。

アウトライナでtrackball caseコレクション以外のコレクションを非表示にします。

Booleanモディファイアを作成し、Realtimeボタン(ディスプレイの見た目のアイコン)をOFFにします。
これがONのままだと処理が重たくなります。パソコンのスペックに自信がある方はONのままでも問題ないかもしれません。

BooleanモードをUnionに、Operand TypeをCollectionに、Collectionをholder partsに設定します。

2つ目のBooleanモディファイアを作成し、RealtimeをOFF、Unionモード、OperandTypeをCollection、Collectionをcensor cover partsに設定します。

3つ目のBooleanモディファイアを作成し、RealtimeをOFF、Unionモード、OperandTypeをCollection、Collectionをfoot partsに設定します。

4つ目のBooleanモディファイアを作成し、RealtimeをOFF、Differenceモード、OperandTypeをCollection、Collectionをcensor cover diffsに設定します。

5つ目のBooleanモディファイアを作成し、RealtimeをOFF、Differenceモード、OperandTypeをCollection、Collectionをfoot diffsに設定します。

6つ目のBooleanモディファイアを作成し、RealtimeをOFF、Differenceモード、OperandTypeをObject、Objectをholder innerに設定します。

7つ目のBooleanモディファイアを作成し、RealtimeをOFF、Unionモード、OperandTypeをCollection、Collectionをbearing supportsに設定します。

8つ目のBooleanモディファイアを作成し、RealtimeをOFF、Differenceモード、OperandTypeをCollection、Collectionをbearing diffsに設定します。

8つのBooleanモディファイアを作成し設定が終わったら、すべてのRealtimeボタンをONにして有効化していきます。
このときPCの処理負荷が上がり数秒~十数秒かかることがありますが、焦らず待ちましょう。

すべてのRealtimeボタンをONにしたらトラックボールケースのモデルデータの完成です。

STLファイルのエクスポート

3Dプリンターで出力(印刷)するために、作成したオブジェクトモデルをSTLファイルとして出力します。
ファイルに出力したいオブジェクトを選択したあと、ウィンドウ上部にあるメインメニューから、File → Export → STL (.stl)を選択します。

出力ウィンドウの右側にあるSelection Onlyにチェックを入れ、ファイル名を決めたらExport STLボタンを押します。

あとはお手持ちの3Dプリンター用のスライサーソフトでSTLファイルを開き、印刷すればOKです。

3Dプリント・確認

完成したらお手持ちの3Dプリンターで出力してみましょう。
以下が簡単なチェック項目です。

  • センサー部品がケース内にセットできる。
  • トラックボールを適度な力で入れることが出来る。
  • トラックボールを適度な力で取り出すことができる。
  • トラックボールを出し入れする際にケースが割れたりしない。
  • 2mmセラミック球が穴に強く押し込むだけで入る。
  • 逆さにしても2mmセラミック球が落ちてこない。
  • Keyball本体に取り付ける際に問題なくネジ止め出来る。(強く締めすぎるとネジ穴がダメになるので注意)
  • トラックボールを操作したときに、どこにも干渉していない。
  • トラックボールケースがキーボード本体やキーキャップに干渉していない。

問題点がなければひとまず完成です。
問題が見つかったら修正を試みてみましょう。
(記事に不備があった場合は教えていただけるとありがたいです🙏)

修正・調整を行う場合

3Dモデルを印刷すると、新たな問題点に気づくことがあります。
そのような場合はモデルデータの修正や調整を行いますが、そのまま作業を行うとオブジェクトを統合したtrackball caseオブジェクトに登録したBooleanモディファイアの再計算が入ってしまい、動作が遅すぎてまともに作業が出来なくなります。
そのような場合はアウトライナのコレクションの右側に表示されているチェックボックスをOFFにすると、非表示になるだけでなく再計算も行われなくなるので作業がスムーズになります。
ここではトラックボールケースの下に穴を開け忘れたので、例としてそれをやっていきます。

まずはコレクションを無効化します。

次に穴をあけるための柱を作成しますが、専用のコレクションを用意するのも面倒なのでcensor cover diffsコレクションを間借りします。
censor coverコレクションを表示状態にして、censor cover diffsを選択します。

円柱を作成し、半径5mm、高さ10mm、Z座標値を-15mmにします。

オブジェクト名をlower holeにします。

censor coverコレクションの表示をOFFにして、trackball caseコレクションを有効化すると、無事に穴があいてるのが確認できます。

終わりに

トラックボールケースを作成してみる説明は以上となります。
作業行程は長いですが操作は難しくないと思うので、自分だけのカスタムKeyballを目指している方は作ってみてください。
また、間違っているところなどあればコメントもしくはX(Twitter)の@kepeooまでお知らせいただければ幸いです。

自作キーボードのトラックボールケースの作成に関する話

自分がKeyball用のトラックボールケースを作成しはじめておよそ1年が経ちました。
ありがたいことに多くの人に使ってもらっていますが、手の大きさ・置き方・テンティングの角度は人それぞれなので「もうちょっと⚪︎⚪︎だったら良かったのにな」という感想の方もいるかと思います。
ある程度の要望のキャッチアップは行ってきたつもりですが限界はあります。また、ThingiverseではSTLファイルしか共有していないため、各自で調整が行いづらい状況です。かといって作業ファイル(Blenderの)はゴチャゴチャしすぎていてアップしたくない・・・。
このような思いと、「Twitterで呟くばかりで記事書いてないな」と言う思いがあったので、自分がいつもトラックボールケースのモデリングをするときに行なっていることを文章で簡単にまとめておきます。

とはいえ自分も素人なので変なことを言っていたり、間違っていたりするかもしれません。
少しでも誰かの参考になれば幸いです。

トラックボールの球の大きさ

日本国内でトラックボールの球だけの入手が容易なのは、34mm球と25mm球です。
(Perixxさん、Elecomさん、ありがとうございます)

トラックボールの支持の種類

トラックボールケース内に滑る素材を3つ配置してトラックボールを支えます。
代表的なのは以下のものです。

  • セラミック球
    比較的安価で入手性が良いです。
    サイズはいろいろありますが、トラックボールケースには直径が2mmのものが使いやすいです。
    Amazonでは色が白いものと黒いものがありますが、自分には大きな差異が感じられなかったので好きな色を買えばいいと思います。

  • ローラーベアリング
    セラミック球に比べて静止摩擦係数が非常に小さく、トラックボールの動かしはじめがとても軽やかです。
    反面、トラックボールの中央以外を操作するとローラーベアリングに対して横方向に球が動くことになるので、マウスポインタの動きに引っ掛かりを感じたり、思わぬ方向に流れて行ったりすることがあります。
    トラックボールを動かす際の音は少々うるさいです。
    こだわる方には国産のベアリングをお勧めします。自分はモノタロウで購入しています。

  • BTU (Ball transfer units)
    自分は使ったことがないですが、全方位に回転するローラーベアリングのようなものがあるようです。
    写真で見た感じだとそれなりのサイズ感なので、自作キーボードのトラックボールケースに使うには難しいような気がしています。

トラックボールの支持位置の影響

セラミック球など(以下、支持球と呼称する)を適当に配置してもトラックボールは動作しますが、支持位置を調整することでより良い操作感が得られます。

摩擦感

支持位置がトラックボールケースの浅い位置にあるほど摩擦感が強くなり、深い位置にあるほど摩擦感が弱くなります。
正確な検証はしていませんが、支持球がトラックボールを挟み込むが大きくなるためだと考えています。


安定感

ここで「安定感」とは、トラックボールがカタカタせずに動かせるか、ということを指します。
トラックボールがカタカタする直接的な原因は支持球のいずれかがトラックボールから離れてしまうことによります。トラックボールが浮き上がることで操作が不連続になったり雑音が発生したりして少し不快な気分になります。

指がトラックボールをおさえるとき、力の方向が3つの支持球からなる三角形の内側に入っていればトラックボールは安定します。三角形が大きいほど安定感には有利です。
よって、支持位置がトラックボールケースの浅い位置にあるほど安定感が大きくなり、深い位置にあるほど安定感が小さくなります。


また、支持球(三角形の頂点)に向かって力がかかるときは安定感が高く、支持球の間(三角形の辺)に向かって力がかかるときはトラックボールが支持球を乗り越えやすくなるので安定感が低くなります。

トラックボールの大きさ誤差への耐性

トラックボールの実際の大きさが設計の大きさよりわずかに大きかったり小さかったりするとき、支持球が深い位置にあるほど誤差の影響が小さく、支持球が浅い位置にあるほど誤差の影響が大きくなります。
誤差の影響が大きいと、トラックボールとセンサーとの距離が大きく変わってしまうためセンサーが操球を認識しづらくなる場合や、トラックボールがケースの内壁に接触したりする場合があります。

大きな青い円が34mmトラックボールの設計上の位置、小さな青い円が支持球2mm、黄色い円が33.8mmだった場合のトラックボールの位置です。
支持球が浅い位置にある場合は33.8mmのトラックボールが下に深く下がっているのが確認できます。
支持球が深い位置にある場合は33.8mmのトラックボールの下がり具合は軽微です。


おすすめ角度

基本的には支持位置による摩擦感および安定感への影響はトレードオフの関係にあります。
自分の経験として、水平からおよそ15度〜25度くらいがちょうどいいと思います。
安定感重視の場合は15度、摩擦感低減重視の場合は25度で設計を始めて、試作を重ねて角度の調整を行なっています。

トラックボールの落下防止方法

キーボードを動かしたり持ち運んだりする時にトラックボールを落としてしまうと、トラックボールもしくは床がへこんでしまう可能性があります。
なるべくならトラックボールは落下しないほうが嬉しいです。

はめこみ式(ツメ)

トラックボールケースの素材の弾力を利用して、トラックボールを押し込んで固定します。
調整が少し大変です。開口部が広いと保持がゆるくて落ちてしまい、開口部が狭いと取り出せなくなったり、またはトラックボールを入れるときにケースが割れたりします。特にFFF方式の3Dプリンターによる出力品は積層の密着が弱いため割れやすく、設計時に注意する必要があります。

cocot46plus
写真引用元:https://shop.yushakobo.jp/products/6955

Keyball44
写真引用元:https://shop.yushakobo.jp/products/8337

カバー式(フタ)

下側の部品に支持球を配置してトラックボールを支え、上側の部品を固定することでトラックボールの落下を防ぐ方法です。個人的に好む設計スタイルです。
はめ込み式のような調整は必要ありませんが、こちらは上側の部品の固定方法や、2つの部品のクリアランスやがたつきの解消などの調整の必要があります。

上側の部品の固定方法は以下のようなものが考えられます。

  • ネジ留め
    上側のパーツをネジで直接固定します。cocot46plusの初期型がこの形式でした。
    固定は確実ですが、支持球のメンテナンスをするためにはドライバーでネジを外す必要があり面倒です。

    cocot46plus
    写真引用元:https://github.com/aki27kbd/cocot46plus/blob/main/doc/buildguide.md

  • 磁石
    上記のねじ止めによる固定を、磁力が強いネオジム磁石に置き換えたものです。
    磁石の相手は同じ磁石でもいいですが、鉄製のネジを用いると省スペースとコスト削減が両立できて良いです。

    初期cocot46plus用 自作カバー

  • ねじ込み
    上側の部品をペットボトルキャップのようにねじ込んで固定する方法です。自分がKeyballの25mmトラックボール用に作成したトラックボールケースで試してみました。
    設計とモデリングがやや大変です。

    Keyball用 25mmトラックボール用 自作ケース

モデリングのチュートリアル

上記の文章を読んでも、どうやってモデリングしていけばいいかわからない方もいると思います。
次のページでは一例としてBlenderを使用したモデリング方法を説明します。
https://kepeo.hatenablog.com/entry/2024/09/08/142046

自作キーボードキット「Riemann」のビルドログ

先日行われたキー部8%にて、KKaKさんにキーボードキットを頂いてしまいました!
しかも設計したて、製造ほやほやの新しいキーボードです。すごい!
せっかくなので普通に組み立てるだけじゃなく、ビルドログを書こうかと思い立ちました。
普段はTwitter(X)やBlueskyで制作の報告をするばかりで自作キーボードの記事を書くのは初めてです。よろしくおねがいします。

目次

キット同梱物、ほか

頂いたキットの内容物は以下の通りです。

  • PCB
    部品をはんだ付けしていく、メインとなる基板です。スイッチプレートとボトムプレートの間に配置されます。

  • スイッチプレート
    PCBと同じ素材の、穴がたくさん開いた枠のような板です。
    この穴にキースイッチがはめ込まれます。

  • ボトムプレート
    はんだ付けしたキーボード部品を保護するために、底側に取り付ける板です。これもPCBと同じ素材です。
    キーボードの名前「Riemann」のロゴが大きく描かれていてカッコイイです。

  • 独自のUSBコネクタ部品「TinyDash」
    独特な形の板の先にUSBコネクタが付いている部品です。
    この部品がRiemannの薄さに貢献しているそうです。
    TinyDashにつけるための小さいタクトスイッチ1つと、固定用のネジとナットが3つずつ付属しています。

  • スイッチプレート固定用ネジ類
    スイッチプレートとPCBを固定するためのネジ・ワッシャー・ナットが8つずつ入っていました。

  • スペーサー
    スイッチプレートとボトムプレートを固定するための金色のスペーサーが8つ入っています。
    これを止めるネジは同梱されていなかったので、手持ちのストックを使用しました。

※このキーボードは今後頒布される予定とのことですが、その際はここに記述したものと異なる可能性が高いのでご注意ください。

今回購入した部品は以下の通りです。

  • キースイッチ
    Lofree Flow Phantom
    https://shop.dailycraft.jp/products/lofree_shadow_series_switch?variant=42611168411845
    普段はCherryMX互換のタクタイルスイッチを使っていてChocスイッチのことをよく知らないので、KKaKさんがキー部で展示していたRiemannのキースイッチがこれだった気がしたので真似しました。

  • キーキャップ
    XVX PBTキーキャップ
    https://www.amazon.co.jp/dp/B0C4SMS3RW
    安くてLEDの光を透過するものを適当に買ってみました。
    色はスイッチプレート、ボトムプレートの黒色に合わせました。

  • マイコン
    RP2040 Tiny
    https://www.switch-science.com/products/9092
    キーボードのプログラムを格納するための部品です。
    メイン基板単品のものも販売されていますが、USBコネクタと接続するためのフラットケーブルが必要なので、「開発キット」という方を購入します。
    また、「Tiny 2040」という似た名前の開発用ボードもありますがRiemannでは使用できません。

  • Chocスイッチ用ソケット
    https://shop.dailycraft.jp/products/keyswitch_socket
    手元にストックがなかったので購入しました。

以下のものはストックとして持っているものを使用しました。

  • 表面実装用ダイオード
    https://shop.dailycraft.jp/products/diode_smd
    自分は自作キーボードを設計しないのでよくわかっていませんが、どのキーが押されたかを判別するための部品だそうです。

  • フルカラーLED
    SK6812mini-e
    https://akizukidenshi.com/catalog/g/g115478/
    光らせなくてもキーボードとしては使用できますが、光るのなら光る方がもちろん良いのは言うまでもありません。
    秋月電子で購入すると少し安いです。

  • ネジ類
    自作キーボードの設計は行わないものの、キーボードケースの自作は少し嗜むためそこそこネジはストックしており、今回必要だった分に足りました。

  • ゴム足
    https://www.amazon.co.jp/gp/product/B00V5MQQB4
    キーボードが滑ってしまうのを防ぐために、ボトムプレートに貼り付けるゴム足です。

道具

今回のキーボード組み立てのために購入したものはなく、すべて以前から持っていたものです。

  • はんだごて
    HAKKO FX600-02
    https://www.amazon.co.jp/dp/B006MQD7M4
    自作キーボードを組み立てるために以前購入しました。LEDを取り付けるなら温度調整機能はあったほうが良いです。

  • こて先
    T18-CF2
    https://www.amazon.co.jp/gp/product/B004OR4JAM
    はんだを乗せやすい形をしていて、自作キーボードを組み立てるのに向いています。

  • はんだごて台
    ST77
    https://www.amazon.co.jp/dp/B001UNTRTG
    かなり昔に買っのではんだごてと形が合わずガタガタしやすいですが、使えないわけでは無いし、買い換えると捨てなきゃいけなくなるのが忍びないので惰性で使っています。

  • はんだ
    FS402-02
    https://www.hakko.com/japan/products/hakko_hexsol_set.html
    融点が低いので初心者に優しいタイプのはんだです。
    自作キーボードをいくつか組み立てているといつの間にかになくなっているので、少し大きめのものを買っています。
    が、今調べたら販売終了していたんですね。

  • はんだリール台
    611-1
    https://www.amazon.co.jp/gp/product/B000W9IVBY
    「こういうのは3Dプリンターで作れば安上がりじゃん!」と思ってWebにあがっているデータを2時間かけて出力したものの10分くらいで壊れたので、大人しくちゃんとしたものを購入しました。

  • ピンセット
    HOZAN P-891
    https://www.hozan.co.jp/corp/g/g6891/
    ダイオードなど小さい部品をはんだ付けする際に必須です。

  • マスキングテープ
    https://www.amazon.co.jp/gp/product/B00EXGSYCS
    部品を一時的に固定するのに使用します。

  • 作業用ゴーグル
    https://www.amazon.co.jp/dp/B00B4TLJV0
    はんだ付けをしていると時々はんだが爆ぜてくるので、目の安全を守るために使っています。

  • 卓上型の小型ファン
    はんだ付けのときに立ち上るけむりは吸うと害があるようなので、ファンで煙を飛ばしています。窓を開けての換気にも気をつけています。

  • カッターマット
    https://www.amazon.co.jp/dp/B000CED21S
    はんだ付けの際に下に敷いています。耐熱性はないので専用品のほうがいいのでしょうが、買うのが面倒なので横着しています。

  • ハイマッキー 黒
    https://www.amazon.co.jp/dp/B0060RXDII
    スイッチプレート、PCB、ボトムプレートの側面を黒く塗るために使います。

ダイオードのはんだ付け

はんだ付け作業は基本的に背の低い部品から行っていくのが良いとされているらしいので、今回一番小さい部品であるダイオードからはんだ付けを行います。
まず、ダイオードには取り付ける向きが矢印のような表示で指定されているので、それを確認します。

自作キーボードキットによっては場所によってダイオード取り付けの向きが違っている場合があり、テンポよく作業を行っていると間違って取り付けてしまうことがよくあります。
幸いRiemannのダイオード取り付け向きは線が上側になる向きで統一されているので、混乱がなく安心です。

ダイオード用のパッド(PCBの銀色の部分)の片方に予備はんだをします。
はんだごての温度は320度に設定しています。

三角形の隣にある線とダイオードの線の位置を合わせて、ダイオードをピンセットでつかみ、はんだごてで予備はんだを温めながら片方の端子を仮止めをします。
ダイオードがPCBから浮いて固定されないように気をつけます。
ここでは綺麗なはんだ付けにはなりませんが、取れなければOKです。

全てのダイオードの仮止めができたら、ダイオードの向きが合っているか確認します。
この時点でダイオードの向きの間違いに気づければリカバーは簡単です。
幸い、間違って取り付けているダイオードはありませんでした。

ダイオードのもう一方の端子をはんだ付けしていきます。
ここでは綺麗なはんだ付けを心がけます。
それが終わったら仮止めしている方の端子をはんだ付けしなおします。

これはちょっとはんだを盛りすぎかもしれないですね。

LEDのはんだ付け

ダイオードと同じく、取り付け向きを確認します。
PCBのシルク(印刷表示)で白い線の角になっている箇所がLEDの端子が欠けている箇所と対応します。 キーボード全体の白い線の角の方向をチェックします。
LEDも全ての箇所で同じ向きで良さそうです。設計者の思いやりが感じられますね。

LEDのパッドに予備はんだをします。
4つのうちどこでも構わないですが、確認しやすいように欠けの無い端子のパッドに予備はんだします。
向きに注意しながら、LEDを仮止めします。

LEDは熱に弱いのではんだごての温度を下げてはんだ付けを行うのがよく推奨されていますが、自分は320度のままはんだ付けしています。熱でLEDが壊れたことはないので、たぶん大丈夫です。
仮止めが終わったら、LEDの向きを再確認します。

もし欠けのある端子をはんだ付けして確認しづらくなったら、LEDの光る側をみればこちらにも欠けがあるので向きのチェックができます。

すべてのLEDの向きがそろっていればOKです。

LEDの他の端子をはんだ付けします。
LEDに熱が溜まるのを防ぐため、端子一つをはんだ付けしたら隣のLEDに移ります。
それを繰り返し、仮止めした端子も含めてはんだ付けします。

はんだを薄く乗せるの難しいですね・・・。

スイッチソケットのはんだ付け

Chocソケットは点対象のように見えて、実は向きの指定があるので注意が必要です。ソケットの角が斜めに面取りしてあるほうをスイッチの真ん中に寄るように配置します。

このキーボードは中央の2キーだけソケットの位置の上下が異なるので、その部分も注意します。

ソケットはずれにくいので予備はんだをせずに片方ずつ、PCBから浮き上がらないように注意しながらはんだ付けします。ほかに比べて部品サイズも大きいので簡単です。
すべてのソケットの片方をはんだ付けしたら向きのチェックを行います。ソケットの中央に刻印されている「kailh」の文字の向きを見るとチェックしやすいです。

ソケットの向きが正しいことを確認したら、反対側の端子もはんだ付けします。

基板側面の塗装

ここらへんで、いつもやっている作業である、基板の側面をペンで塗るのを忘れていることに気づきました。
基板の色が黒いので、側面も黒くすると見た目が引き締まります。PCB、スイッチプレート、ボトムプレートそれぞれ塗ります。
マッキーで塗るときは2度塗りするのが好みです。

マイコンのはんだ付け

マイコン(RP2040 Tiny)のはんだ付けをします。
このマイコンを使うのは初めてなので取り付け方法を迷いましたが、予備はんだをしてから取り付けることにしました。
マスキングテープで固定してからはんだ付けする方法も考えましたが、ずれたり浮いたりしやすそうなので今回はやめておきました。

まず適当な端子に予備はんだします。シルクで「0」と書かれているところにしました。

そのあと、マイコンの端子とPCBのパッドをピッタリ合わせて指で押さえ、仮止めします。
このときマイコンに衝撃を与えるとPCBのパッドがはがれてしまう恐れがあるので、慎重に作業します。

マイコンの位置に問題がなければ、残りの端子をはんだ付けします。
マイコンに乗っている部品が近いので、はんだごてを当てないように気を付けます。

TinyDashのタクトスイッチのはんだ付け

TinyDashのBOOTボタンとなるタクトスイッチのはんだ付けをします。

TinyDashが小さい部品なのではんだ付けするときにずれないように、マスキングテープで位置を固定します。

4つあるパッドのいずれかに予備はんだを行ってから取り付けます。向きの指定はありません。

ここまでくれば、はんだ付けは終了です。(はんだ付け忘れが無ければ)

TinyDashの取り付け

PCBにTinyDashを取り付けます。
USBコネクタから遠い位置の2つの穴と、USBコネクタの中央に近いほうの穴1つを、付属のネジとナットで固定します。

フラットケーブルの接続

RP2040 Tinyに付属してきたフラットケーブルを接続します。
まずRP2040 Tinyのフラットケーブル接続部にある黒い部分を持ち上げて立てます。
黒い部分の下あたりに、フラットケーブルの青い面を上にして差し込みます。手で差し込むのが難しい場合はピンセットを使います。

フラットケーブルを差し込んだら、黒い部分をフラットケーブルの方向に倒します。これでフラットケーブルが固定され、抜けなくなります。

同じようにTinyDashのフラットケーブル接続部の黒い部分を立てて、フラットケーブルを差し込み、黒い部分をUSBコネクタ側に倒します。

フラットケーブルは長いので、動かないようにマスキングテープでPCBに貼り付けて固定しておきます。

ファームウェアのインストール

ここらでキースイッチとLEDの動作確認を行いたいですが、まだファームウェアをもらっていないんでした。
KKaKさんに連絡したらすぐ対応してくれました。感謝!🙏
BOOTボタンを押しながらPCに接続するとディスクドライブとして認識されます。

認識されたディスクドライブにファームウェア(uf2ファイル)をドラッグ&ドロップして書き込みをすると自動的にキーボードデバイスに切り替わります。

VialでLEDとキースイッチの機能確認

RiemannのファームウェアはVialというものが使われているので、以下のサイトにGoogle ChromeかMicrosoft Edgeでアクセスします。
https://vial.rocks/
ウィンドウの真ん中にある「Start Vial」というボタンを押すとデバイス選択ウィンドウが出るので、riemannを選びます。

少し待つと入力キーを変更する画面が現れます。

まずはLEDの確認を行います。「Lighting」タブを選択して「Underglow Effect」を「RGB Test」に切り替えるとLEDが赤、緑、青に光ります。

この時光っていないLEDや色のおかしいLEDがある場合、大体がはんだ付け不良です。はんだごてで端子を温めたり、はんだを足したりすくって取り除いたりするうちに大体直ります。(加熱しすぎに注意)

問題なければ、まぶしいのでLEDをOFFにします。

次に「Matrix tester」タブを選択するとキーの入力確認画面が出るので、ピンセットでキーソケットの端子に触れるか、キースイッチを一つ取り付けて押すかして確認します。

押しても反応しないキーがある場合、はんだ付け忘れ、またはダイオードのはんだ付け不良の可能性が高いです。これも端子を温めると大体直ります。
すべてのキーが反応するのを確認出来たらOKです。

スイッチプレートの取り付け

スイッチプレート(キーボードの一番上に取り付ける板)をPCBに取り付けます。Riemannのロゴが書いてある面が上側です。
スイッチプレートの上側からネジを、スイッチプレートとPCBの間に黒いワッシャーを、PCBの下側にナットを配置するようにネジ止めします。

が、一つずつネジ止めしていくのは至難の業です。
そこで以下の手順で組み立てを行いました。

  • スイッチプレートの上側からネジを差し込み、マスキングテープで固定します。

  • スイッチプレートを裏返して、飛び出ているネジにワッシャーを乗せます。

  • PCBを裏返して乗せ、ナットを手で軽く締めます。

  • スイッチプレート+PCBをひっくり返し、ネジの部分に貼ったマスキングテープをはがしてネジの本締めをします。

スペーサーの取り付け

スイッチプレートとボトムプレートを固定するための金色のスペーサーを取り付けます。
PCBの裏側から指定の場所にスペーサーを置いて指で保持し、スイッチプレートの上側からネジ止めします。
ここで使用したネジはM2 3mmの低頭ネジです。

ボトムプレートの取り付け

ボトムプレートの取り付けを行います。大きくRiemannのロゴが書いてある面が下側です。
こちらは普通にネジ止めするだけです。使用したネジは同じくM2 3mmの低頭ネジです。

キースイッチの取り付け

キーボードにキースイッチを取り付けます。
差し込む際に、キースイッチの金属端子が折れ曲がらないように気を付けます。
もし折れ曲がってしまったら、いったん外してラジオペンチ等で端子をまっすぐに戻します。

Vialでキースイッチの機能確認(二回目)

すべてのキースイッチの取り付けが出来たら、キー入力の確認を行います。
先ほどと同じようにVialに接続して確認画面でキーを押していきます。
が、反応しないキーが3つありました。さっきはちゃんと反応したのに・・・。

原因はスイッチソケットのはんだ付け忘れでした。3か所も・・・。
片付けてしまったはんだ付けセットを再度取り出してはんだ付け。これでちゃんとキーが反応するようになりました。ランド剥がれが起こらなくてよかった・・・!

キーキャップの取り付け

キースイッチにキーキャップを取り付けます。
アルファベットのキーはいいとして、それ以外のキーは印字が合うものが基本的にないので適当に装着します。

ゴム足の貼り付け

滑り止めと底面のネジのこすれを防止するために、キーボードの裏側の角にゴム足を貼り付けます。
KKaKさんからチルト(キーボードの奥側を持ち上げるように斜めにする)する台となる3Dモデルをいただいていましたが、黒色のフィラメントの残りが少なかったので赤色のフィラメントで印刷したところ、あんまりマッチしなかったのでいったんゴム足だけにしました。

キーボード全体が薄いためUSBケーブルが机に干渉するのを危惧していましたが、とりあえず問題なさそうです。コネクタ部分が太いUSBケーブルを使う場合は注意が必要です。

完成!

完成したので写真を撮って、Twitterにアップします。
薄型でタイピングしやすいです。Lofreeのキースイッチも軽快で上質な感じがしますね。
ちなみにキーキャップのKとLを逆に取り付けていたのに気づいたのは2日後でした。

KKakさん、ありがとうございました!