CoreXY な駆動方式の3Dプリンタには元々興味があって、とはいえ現状の Original Prusa i3 2.5 でそれほど問題もなかったのだが、Voron 2.4 という3Dプリンタを知り、なんかわからんが格好がいいので急に作ってみたくなった。

ハードウェア

3Dプリントパーツ以外をセットにして売ってるところがいくつかある。今回は FORMBOT の Aliexpress から買ってみた。UPS で結構届くのがはやかった。

Voron 2.4 はデフォルトでは Afterburner という名前がついたエクストルーダだが、実は Stealthburner という新しいバージョンがでており、新規で作るならこちらを作ったほうがよい。パーツに一部非互換があるので別途部品を買う必要がある。

届いたセット




exhaustまわり、操作画面部まわり、エンドストップ、Afterburner 相当のインジェクションモールドのプラパーツが「オマケ」でついてきた。ほぼプリント済みだったが Afterburner はまるっとプリントせずにいたので、とりあえず動かすことができそうでありがたい。

このプラパーツは機能的にはオリジナル同様だが細部が違う。インジェクションモールドでは袋状のものは作れないので2パーツ貼りあわせる必要があったりする。

Raspberry Pi は付属しないが SD カードは SunDisk の A1 のちゃんとしたのがついていた。パチもんではなくちゃんと製品登録もできた。

3Dプリントパーツ

Voron は基本的に全てのパーツを ABS (104℃ぐらいで軟化する) で出力することとしている。局所的に温度が高くなることがあるので PETG (84℃ぐらいで軟化する) も推奨されていないようだ。(Original Prusa はホットエンドダクト以外は PETG になっており ABS 出力も今のところ問題ないが……)

PETG は非常にプリントしやすいため、できれば PETG でやりたかったが、ここで不安を残すのも精神に良くないので ABS との和解を試みてすべて ABS で出力することにした。


だいぶ前に Original Prusa i3 にかぶせていたエンクロージャはABSをプリントしないこととなかなか邪魔なこともあって捨ててしまったので、一時的にということでダンボールで箱をつくった。これで内部は40~50℃ぐらいになる。

ABS はとにかくあらゆる部分が反るので嫌なのだがこのぐらいの温度なら割とマシになる。とはいえ接着性が低いのでベッドとノズルの調整がよりシビアだったり、パーツ形状によっては一時的に反った部分ができてノズルにあたるので気を使う。

出力するパーツ数は結構多い (Prusa が 3D プリント部品を最小限にしているのと対照的)し、大きいものが多い。動作に必須な部品だけでも3~4日かかる。全部プリントするには一週間以上かかると思ったほうが良い。パーツを注文しても全部届くまで1ヶ月ぐらいかかるだろうからのんびりやって良い。

リニアレールの潤滑

IPA(無水エタノールでもいいけど高いので…)と柔らかめのグリスが必要。この手順でやった。グリスはSuper Lube 21030というNLGI(ちょう度) 2 で PTFE系のプラスチックに安全なやつ。

グリスポートがあればグリスポートから注射器で注入するのが正しいようだが、安いリニアレールでは見せ掛けのグリスポートで中に入っていかない場合があるようだ。

組立

マニュアルがよくできていて迷うところはほぼない。Gantry の組み立てまわりはマニュアルだけだと完璧にできないと思うので YouTube とかを見るべき。

あとはA/Bベルトを通すのが以下の点でなかなか困難

  • 長い (250mmモデル なら 1600mm のベルト)
  • 2本ある
  • 全体的に狭い
  • 複雑 (特にモータ付近)
  • アイドラー通すのが激むずい

デッキサポート

https://github.com/VoronDesign/Voron-Trident/issues/65

Voron 2.4 のマニュアルにはデッキサポートが抜けてる。使いかたは Trident のドキュメントを見るとわかる。あとからだとやりにくいので罠

配線


あまり気にしてなかったが部品セットには配線も含まれており、これがとてもよくできていた。すべてのコネクタが圧着済みかつ長さも適切なので、デフォルト設計なら何も考えずに組み立てできる。

WAGO の接続端子が複数ついており、配線部分でははんだ付けをする必要がなかった (マニュアルの5端子WAGOコネクタに加えてヒーター接続用と思われるの2端子WAGOコネクタもついていた)。

ソフトウェア

Klipper

制御は Klipper という3Dプリンタ向けファームウェアを使うのが一般的のようだ。

Klipper は Raspberry Pi で動く Python のコードと、コントローラーボードに書きこむファームウェアからなる。gcode の解釈や補正など計算負荷が高いことは Raspberry Pi 上で行ない、コントローラボードはIOの制御だけをする。LinuxCNC と同じようなイメージ。

そして Klipper は既存の3Dプリンタのシリアルポートでの通信をエミュレートするようなインターフェイスになっている (/tmp/printer)。つまり Klipper 自体は gcode (など) を受けとってデバイスを制御するだけの役割を持つ。

UI はこのシリアルポートを利用できるものならなんでも使える。Voron のドキュメントではMainsail, Fluidd, Octoprint が列挙されている。

mainsail

Rasbperry Pi 3 B に Mainsail のイメージを書きこんで使うことにした。Mainsail は Raspberry Pi Imager のメニューに入ってるので気楽。Mainsail は Klipper のインターフェイスとなるソフトウェア。イメージを書きこめば GUI なしで、ウェブインターフェイスが勝手に起動するようにセットアップされている。

より正確にいうと Klipper とやりとりしているのは Moonraker という Klipper のウェブAPIフロントエンドで、Mainsail はそのクライアント実装といえる。

初期スタートアップ

Stealthburner 用の部品が届く前に本体の部品が一通りきてしまったので、とりあえず Afterburner を乗せて組み立てて動作確認をした。

テンプレートの printer.cfgからたくさん書きかえていく。最低限の設定をしたあと、G-code で動かしつつ調整する。

とりあえずステッピングモーターの方向がすべて逆だったので dir を反転した。

ベッドの max_power が 0.6 になっている。Rule of thumb is 0.4 watts / cm^2 と書いてある (経験則では 0.4W/cm^2 ぐらいが適切)。250x250mm なら 625cm^2 なので、250Wぐらいが適切。300Wヒーターなため、0.83 に設定する。

なんで最大パワーを出さないかというと、ヒーターは中央を加熱するため熱伝導が十分されていないとベッドが歪んでしまうからで、早く加熱してもメリットがないということのようだ。

なおヒーターは100V AC商用電源を SSR で PWM 制御する設計になってる。

Stealthburner 化

結局 Afterburner をつけて動作確認しているうちにすぐ部品が届いてしまったので、一度もホットエンドにフィラメントを通すことなく Stealthburner に換装した。

Afterburner と Stealthburner だと NeoPixel LED 用の配線が増えている。このことはわかっていたので、Afterburner をつけて組み立てる時点で1セット配線を追加しておいた。

X-carriage にも互換性がないのでA/Bベルトも外す必要があった。思ったより苦労はしなかった。

Stealthburner は gear_ratio: 50:10 なので printer.cfg を直す必要がある。NeoPixel はとりあえず Voron 公式の stealthburner_leds.cfg を使った。

そしていろいろ調整して一発目のプリントはとりあえず成功。角がちょっと膨らむのは Pressure Advance というので調整していくらしい。

vs Original Prusa i3 2.5

Voron 2.4 のいいところ

  • 筐体剛性と重さのせいか振動が少なくて全体的に静か
  • めちゃくちゃキビキビ動く (加速度が高い?)
  • スカートのファンが割とうるさい (60x20mm * 2)
  • ベッドの安定感がすごい。first layer がとても安定している。
    • mesh bed leveling がいらない
  • カスタマイズ性
  • 早くて綺麗

Voron 2.4 のよくはないところ

  • Gantry の調整が難しい
  • 重い (250mm でもかなり重いので 350mm とかムキムキじゃないと無理だと思う)
  • スタートアップタイムが長い
    • Raspberry Pi が起動するまで使えない。最適化すればそこそこ早い
  • 電源切るタイミングがわかりにくい
    • Raspberry Pi をシャットダウンしたか確認する方法がない
    • overlayfs 化するほうがいいかもだけど、ログが結構でるので難しいかも……
  • Linux、Python、G-code にある程度慣れてないと設定でつまづくかもしれない
  1. トップ
  2. tech
  3. 3Dプリンタ Voron 2.4 を組み立てた

https://github.com/FaqT0tum/Orbion_3D_Space_Mouse

良い点・悪い点

良い点

  • TPU のクッションでジョイスティックの硬さのサポートをしてるところ
    • ありなしで使い比べたらわかるけどジョイスティック単体とはまるで操作感が違う
  • オープンソースである
    • ND ではあるがオープンではある
  • Arduino ベースなので書きこみが楽。挙動を変えたいならコード変えるのが一番楽
  • 頑張ればちゃんと使える

悪い点

  • 操作できるのはジョイスティック+エンコーダ (上下・左右・回転の3軸)
    • そんなにいろんな操作はできない… ジョイスティックを動かすとエンコーダが動いてしまうことがあるので結構むずかしい。あんまり期待しないほうがいい
    • ジョイスティックの硬さは上の3本のビスで決まる
    • 通常マウスと二刀流になると思うがそれならマウス+キーボードで良くない?という気がしてくる
  • カーソルも動いてしまう
    • マウス・キーボードとして認識させているだけなので普通にマウスが動いてしまう。マウスが操作範囲外に出ると操作できない
  • ライセンス
    • CCPL なのは良いが ND (派生不可) なのが致命的に扱いにくい
    • 改変したのを github に push することができないので手元で管理するしかない。めんどくさい
  • トレランスが厳しい
    • FDM 3Dプリント向けじゃないのかな? ってぐらいトレランスが少ない。プリントして無加工で作るのは無理がある
    • ジョイスティックやエンコーダーの取り付けは加工しないと入らないと思ったほうが良い
  • ファームウェアの品質
    • 使えはするけどという感じ。コード見たらわかると思う (byte と uint8_t が混在してたり、無意味なコードがあったりする)
    • メニューまわりは自分で直さないとイライラすると思う
    • エンコーダーもクリック2回で1つ進むみたいな挙動になってるので直したほうがいい
  • TPU のプリント難易度
    • TPU でクッションをプリントしないといけないが柔軟素材のプリントは難しい
  • 配線が大変
    • 柔らかいケーブルを使いましょう。いつものクセでカラーのフラットケーブル(を裂いやつ) を使ったが固めなので大変だった。
    • 200mm ぐらいのケーブルを Arduino に全部はんだ付けして、配線していくのが良いみたい


ちゃんと使おうと作ろうとすると以下3つの知識がそれぞれある程度ないと難しい。

  • 3Dプリントの知識 (正しい素材で正しくスライサーを使い、正確に出力できること)
  • 電子工作の知識 (ちゃんと配線できるか、配線した結果おかしいときデバッグできるか)
  • ソフトウェアの知識 (挙動がおかしいときファームウェアのコードを読んで直せるか)

ソフトウェア

Arduino のライブラリごりごりで書かれているのであまりコード量はなく複雑なこともやってない。

メニューを開いたとき、エンコーダの反応がすこぶる悪いが、ビジーループでエンコーダを読む設計なのに、i2c ディスプレイに毎ループデータを送ってるせいなので、そのへんのコードを直すとよくなる。結構同様のロジックがちらばっており、直すのに若干手間がかかる。

エンコーダを読むコード (scroll()) もなんか変なコードになっているので書きなおしたほうが手を入れやすい。

手元で加えた変更

NDでコードを公開できないのでやったことだけ

  • エンコーダ読みだし回りを綺麗に
  • ディスプレイ表示の効率化 + menu の反応を良くする
  • LED関係設定のとき、選択にあわせて光りかたを変えるように
  • ニュートラルに戻ったときに、操作した分のマウス移動量をキャンセルするように
    • ニュートラルに戻すたびにカーソルが元の位置に戻るので、画面端に到達して操作できなくなることが減る
  • 連続して操作するとき、ダブルクリックにならないようにする

感想

あんまり作ってる人がいなくてなんでかなーと思っていたが難易度の高さの割に得るものがそれほどでもない点にあるのかなと思った。ハードウェアの形的にはかっこいい。

  1. トップ
  2. tech
  3. Orbion The OpenSource 3D Space Mouse

液晶風の画面は決まった形をオン・オフするだけなので、canvas にコードで描くのは大変なだけで無駄が多い。かといってセグメントを1つ1つ画像にわけて座標指定で配置していくのも面倒くさい。

と考えていくと SVG を埋めこんで、SVG の要素を JS で操作するのが効率が良い。ワークフローとしては SVG の作成と JS の実装で綺麗に境界を作ることができる。

Inkscape


Inkscape の良いところは以下の点

  • XML エディタが UI と連動している
    • レイヤーやオブジェクトを選択すると該当箇所にエディタ上で跳べる
  • 構造をコントロールしやすい
    • 画像を編集するというより SVG の XML を編集するUIというイメージ

Inkscape でオブジェクトに名前をつけると、svg 上では inkscape:label 属性に入る。これを利用して JS から操作すれば Inkscape で保存した SVG をそのまま利用できる。

JSで扱う

Inkscape で保存した SVG をそのままファイルとして置いて、fetch() で取得し、HTML5 な HTML で特定の要素の innerHTML に入れてしまうのが手っ取りばやい。(XML の Processing Instruction については Chrome ではコメントに変換されるが、仕様上パースエラーなので消しておく)

名前空間の扱いが謎だが、querySelector() の場合以下のような形で指定することができる (つまり名前空間を扱わず、prefix も含めて属性名とする)

svg.querySelectorAll('g[inkscape\\:label="digits"] > g')

あとは適当に style.visibility を操作するだけなので省略

svg の HTML Living Standard 的解釈

svg 要素は HTML では SVG 2 で定義されると書いてある。つまり「HTML は SVG を知っている」。SVG 2 では HTML 内でも svg が使えることを考慮して書かれている。

SVG の仕様上、HTML 内では SVG の名前空間は HTML パーサによって与えられると書いてある。このため、HTML 内 svg 要素には xmlns は必要ない。 https://svgwg.org/svg2-draft/single-page.html#struct-Namespace

HTML LS

In HTML, the xmlns attribute has absolutely no effect. It is basically a talisman. It is allowed merely to make migration to and from XML mildly easier. When parsed by an HTML parser, the attribute ends up in no namespace, not the "http://www.w3.org/2000/xmlns/" namespace like namespace declaration attributes in XML do.

また https://html.spec.whatwg.org/#elements-2 に例示があるが、HTML としては xmlns は何の効果もうみ出さない。例えば svg 要素の中に xmlns:foo="foo" という宣言と共に <foo:bar /> というのがあっても、これは HTML パーサによって自動的に与えられる svg の名前空間に属し、foo:bar という要素名になる。

  1. トップ
  2. tech
  3. JS+SVGで液晶画面風の表示をつくる

2016年の6月に組んでからCPUマザボを変更せずにきたが、この Core i7 6700 が Windows11 非対応だったり、今時さすがに4コア8スレだったり、PCIe レーン数が少なすぎて NVMe SSD が使いにくかったりで、そろそろかと思い組替えることにした。

ケースとグラボ以外はほぼ新調。ここに書いてない SATA のドライブは継続して接続している。あとはケースファンもすべて入れ替えた。

電源は 80+ Platinum で安かったやつ(1万円ぐらい)を買ってみたがパッケージやケーブルが良くできていて非常に豪華だった。

Intel か AMD か?

プロセスルールの数字が良いからなんとなく最近なら AM5 ソケットになった Ryzen 7000 シリーズかなと思っていたが、13th Intel が結構強いようだった。個人的には以下の点で Intel 優勢とおもった

  • アイドル時の電力が低め
  • DDR4 メモリが使える (DDR5 メモリが高い)
  • 12th (1年前) のマザーボードが使える
  • 性能的にはどっこいどっこい

DDR5 が十分性能と価格が落ちつくには何年もかかりそう。そして AM5 なマザーボードはだいぶ高い。Intel なら手元の DDR4 メモリも利用できる。

i5 か i7 か i9 か

i9 は水冷するような超ハイエンド向けというイメージがあり、i5 はちょっと微妙というイメージがある (別にそんなことないみたいだが)。

  • CPU ヘビーな状態が続くことはあまりないが時々ある
  • クーラーは空冷
  • Core i7 6700 でもそれほど苦痛になることはなかった (エンコードぐらい…)

と考えていくと理性的に最適なのは i5 ではないかと思うが、大は小を兼ねるので i7 とした。i9 は高すぎる。

フルロードせず電力制限をかけたとしても、その制限においてはクロックが上がるので上位CPUが無駄というわけではない。

Windows 11 のクリーンインストール

Windows 11 にアップグレード不可な PC に入っていた Windows 10 のライセンスだったが、普通に Windows 11 のインストールメディアをつくってインストールし、構成を変更したという宣言をしたら引き継ぐことができた。

電力消費

マザーボードデフォルト設定だとCPU電力無制限になるようだ。つまりサーマルスロットリングが常時起こるまで発熱し、クーラーの排熱性能上限ぐらいのパッケージ消費電力で落ちつくという挙動になる。

  • 電源にクランプして読むとアイドル時で50~60W程度
  • HWiNFO 読みで
    • CPU Package Power は最大 250W
    • GPU Power は最大 155W ぐらい

アイドル時の CPU の Package Power は 5W~10W ぐらい。GPU Power が 15W ぐらい。Z690チップセットが TDP としては 6W。

効率カーブが載っているPSU の評価結果 2% of spec = 13.2W 出力時の効率が 42% 程度で、20~30W ぐらいの効率は50~60%程度のように見える。つまりセンサ読み Package Power が 25W なら電源クランプで読むと 50W ぐらいになってしまう (実際はマザボ上のVRMの効率もあるわけで)。

なおこのマザボは多少光るけどオフにしても消費電力への影響は微々たるもの。

電力リミット

電力無制限で cinebench を回すと当然サーマルスロットリングが起き、最初は250Wぐらいだが徐々に Package Power が落ちて 220W 前後で落ちついてくる。これがこのクーラーの限界ということになる。実際、AS500 というクーラーはTDP 220Wまで対応と書いてあるので、実測でもその通りといえる。

あんまり限界性能を出すのも恐いので、UEFI から最大電力 (long / short duration power limit) を 180W に制限することにした。PL は原理的にシングルスレッド~数スレッドでは超えないので、全コア使い尽くすようなときに若干性能が下がるイメージだと思う。

定格は3.4GHz(Pコア)/2.5GHz(Eコア)ターボブーストで5.3GHz(Pコア)/4.2GHz(Eコア)。

なお Tjunction max はいわゆる絶対最大定格ではないようだ。Intel 的な絶対定格は内部に非公開で持っており、必要とあらばシャットダウンする仕掛けで、Tjunction max はこれを目標にサーマルスロットリングするぞという値。

つまり基本的には CPU 側で防衛しており、サーマルスロットリング自体も「問題ない」とされている。クーラーの性能上限(=サーマルスロットリングが起こる状態)までCPUは電力を消費して発熱する設計になっている。

  1. トップ
  2. tech
  3. 13世代のIntelにPC更新

Widgets.exe 関係で msedgewebview2.exe がやたら VRAM (GPUメモリ) を消費している。全く使わない機能なのでアンインストールする。

winget uninstall "windows web experience pack"
  1. トップ
  2. tech
  3. Windows11 msedgewebview2.exe/Widgets.exe をアンインストール