実感としてはそうだろうが、これをもってして「だから走り続けなければならない」とするのにはとても抵抗がある。そういうマインドを持っていると困ったことになることが目に見えている。

そもそも走り続けるのは疲れるので無理である。必ず休憩が必要であって、休憩をしなければどこかで倒れるはめになる。他人にそんなことさせてはいけない。


知の高速道路のことを考える。あとからくるものは整備されより洗練された学習をして、早いスピードで成長する。さきにいるものはよりよい道への貢献、そして邪魔をしないことに尽きる。

ある個人が「その場にいつづける」ことはそもそも「不老長寿」を求めていることと等しく、まったくでたらめである。

しばらくコンテンツ消費する気力もわかず見てない作品が多かったので一気にみた

  • ぼっち・ざ・ろっく! 12話
    • きらら系だけど「この子が可愛い」みたいなのがない
    • 1ミリも悪い人出てこないのに世界が悪意に満ちあふれている感じがする
  • カッコウの許嫁 24話
    • 幸が可愛い。青い人がかなりいけすかない
    • 割とあからさまに演出で印象を操作されているメタな感覚があり複雑な気分になる
  • 4人はそれぞれウソをつく 11話
    • 翼(剛)の絶妙な孤独感がよかった。主人公不在の六畳間の侵略者みたいな趣がある
  • 五等分の花嫁 12+12+1
    • 絵的に見てなかったけど見続けたら気にならなくなった。2期はそもそも制作会社変わってて結構絵が違う。
    • ヒロインによって主人公に好意が向くまで長くて飽きにくい。2期の最後までいっても明確に好意が描かれないヒロインがいる。
  • 異世界おじさん 12話
    • まだ最終話がなくてわらった。テンポいいし女の子が異様に可愛い

dtoverlay=gpio-poweroff 使うのが確実っぽいが若干クセがある。

https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README

dtoverlay=gpio-poweroff,gpiopin=26,active_low=1,timeout_ms=60000

timeout_ms はデフォルトだと3秒になっている。別にこれでもいいのだが、仕様上、timeout_ms 以内に電源断しなければカーネルがWARNを吐いて未定義動作になるとされている (別にそうなったからといってほぼ問題ないだろうが)。理想的にはraspiへの電源供給をしている電源のEN端子とかに繋ぐんだろう。

raspi は1ピンあたりの絶対最大定格電流は3.3Vだと17mA程度となっているので、LED を直接繋ぐ場合10mA程度に収めるほうが良いだろうと思う。高輝度LEDなら十分明るい。

  1. トップ
  2. tech
  3. raspi で確実に電源断できるタイミングをLEDで知る

dig lowreal.net type65 で存在は確認できるがパースしてくれない。dns.google 使うのが簡単っぽい。JSON でパース済みの結果をかえしてくれる (ただし設定されている値そのままではなく、パースした結果を再構成したものが表示される)

https://dns.google/resolve?name=lowreal.net&type=HTTPS

  1. トップ
  2. tech
  3. DNS HTTPS レコードを確認する

https://lowreal.net/2018/08/02/2 ecdsa 521bit を使っているが ed25519 (256bit固定) のほうが安全性もパフォーマンスも良いらしい。一方で 2014年1月の OpenSSH 6.5 から導入されたため古い実装で使えない

ssh-keygen -t ed25519
  1. トップ
  2. tech
  3. ssh-keygen

ThinkPad X13 Gen 3 AMD を買った。2022-10-06 に購入して、何度か出荷予定が伸び、2022-12-02 に届いた。

一応セットアップしつつ、それほどノートPCを使うケースがなかったので数日に一度しか開いてなかったが、その過程でスリープの挙動がおかしいことに気付いた。

具体的には

  • スリープして数分ぐらいなら正常に復帰する(スリープと復帰自体は可能)
  • スリープしてしばらくすると休止状態からの復帰になる (lenovo ロゴから起動)
  • スリープして長い時間放置するとすると電源が切れメモリ状態が失われる
    • ゼロからの起動になる。イベントマネージャで Kernel-Power を確認したとき操作していない時間に不正終了の記録が残る
    • おそらくモダンスタンバイ中だけの現象。電源に接続しているときだけ発生する

スリープして長い時間放置した場合に電源が落ちるのは完全におかしい。タイミングはよくわからないので再現させるのが難しいが度々再現した。

結論からいうと結局 Lenovo に送り、システムボードの交換になった。修理センター着後すぐ修理され「『スリープ進行後異常終了となる』および『タイマーによるスリープ進行しないことがある』を確認」と書いてある修理票と共に戻ってきた。

頻繁に使用したり起動しっぱなしの場合まず気付かないし、確実に再現する問題ではないので実際に起きていても気のせいと思ってしまうかもしれない。数日モダンスタンバイで放置しておかしくないか気にしたほうがよいようだ……

  1. トップ
  2. tech
  3. ThinkPad X13 Gen 3 AMD の購入とスリープ後不正終了する問題

5年に一度リフレッシュ休暇10日というのが付与されるので、年末年始に有給消化と繋げて取得した。結論からいうとこの取得方法は完全に失敗であった。

年末年始は何かと忙しい上に、子どもが冬休みに入って家にいることが多いので精神的な自由度が低かった。

一ヶ月ぐらい休んだらもっと元気になるかと思ったがそうでもなかった。多少はマシだと思うけど仕事が疲弊の直接的原因ではないのかもしれない。

もっと遠くに一人で旅行でも行くかとも思っていたが結局ほとんど外出しなかった。もともと出不精だけど、思いつきで遠くにいけるほど感染状況が落ち着いているともいえないし、外出して嫌なこと起きるぐらいなら外出しないほうがマシという気持ちになってしまった。

そんなに複雑なことをしたいわけではないつもりだが、結果的に若干複雑なので記録しておく。

Notepad-8FX のわかりにくいところ

このミキサに限らないが、どこの信号がどこに入るのかわかりにくい。

USB に関してはドライバを入れると、USB Input 1+2 (ステレオライン入力として認識される) にくる信号をいくつか選べる

  • Mic Input 1+2 (1ch / 2ch がそれぞれ L/R になって入力される)
    • 当然 1ch にだけマイクを繋ぐとLchだけの信号となる。
    • ハイパスフィルタのあと、イコライザやFXの前
  • Stereo Input 3+4 (LINE 3/4 入力)
  • Stereo Input 5+6 (LINE 5/6 入力)
    • トリムの後
  • Mix L+R
    • Master ミックス後・フェーダー前
    • Mic Input はモノラルとしてPANにしたがいL/Rに振られるので、マイク音はL/Rチャンネル両方にくる

USB Out は 7/8ch として Master にミックスされるため、USB 出力を Notepad に設定した場合、Mix L+R はループバックということになる。(この機種はループバックできるできないという情報が混在してるが結論からいえばドライバいれればできる)

AUXとFX

AUXとFXはつまみは共有しているが信号としては独立している。ややこしい。

そもそもAUXとは何か?

  • Master とは別系統のもう1つの auxiliary (補助) 出力
    • モニターなどの用途が想定されている
  • この出力のミックスレベルは各チャンネルの AUX/FX つまみで決まる
  • AUX出力にはFXはかからない

FXは何か?

  • 内蔵エフェクト(リバーブなど)
  • 各チャンネルのAUX/FXで送る量を決められる
  • 効果のパラメータを PARAMETER つまみで決められる (全ch共通)
  • FXを通った結果は Master へミックスされる
    • 元の信号のMasterボリュームがゼロでないなら、元の信号に追加でミックスされる

FXの利用とAUXの利用は排他と考えたほうがすっきりする。というか、FXを使う場合、AUX 出力は FX を通る前の信号のモニタリングという用途に限定される。

ループバックしつつ、デスクトップ音量をコントロールする

自分はデスクトップ音とマイクのモニター音を常に聞くが、マイク入力には基本的にはマイク音しか入れない。ということをしたい場合、2通りの方法がある

  1. USB Input 1+2 を Mic Input 1+2 にし、Master mix を聞く
    • シンプルだがマイク入力しか入れることができない
    • マイク入力もミキサ上のイコライザを通した音にはならない
  2. USB Input 1+2 を Mix LR にし、AUX を聞く
    • イコライザなどミキサ上の設定が反映される
    • デスクトップ音のループバックができる
    • 他のチャンネルに入力した信号もコントロールして USB 入力にできる

後者のほうが自由度が高いので後者で考える。

やりたいこと

一旦 Mic1 + USB Out だけを考える。(Mic 2, LINE 3/4, LINE 5/6 は使わない)

ヘッドフォンOUTにヘッドフォンを接続して

  • マイク(1ch)をモニター
  • デスクトップ音(7/8ch)をモニター

かつ、USB 入力としては

  • マイク(1ch)を入れる
  • デスクトップ音(7/8ch)は入れない (というよりコントローラブルにする)

としたい。

この場合出力したいミックス系統がUSB入力音とモニター音とで2つあるため、Master 出力と AUX 出力を使うことになる。USB 入力できるのは Master 出力なため、AUX がモニター音になる。

運用方法

USB Input 1+2 を Mix L+R (ループバック) にしつつ、Notepad 側で 7/8ch の Master Level を調整する。

1ch と 7/8ch を AUX に送るようにする。

MASTER/AUX スイッチでヘッドフォンOUTに出力される音を MASTER と AUX で切り替えられる。つまりデスクトップ音を入れたマイク音と、実際にPCに入力されているマイク音を切り替えられる。

Master のフェーダーはUSB入力には影響しないので基本的に使わない。がPC側の入力ゲインとLEDの点灯が近いようにゲイン調整するとミキサ側で状態がわかりやすい。

問題点: FXは使えない。FX に送る信号量は前述の通り AUX ノブと共通なので、デスクトップ音を AUX に送っていると FX をオンにしたとき Master に FX 経由の音が漏れてきてしまう。

あとPC側でモニタ音を入れてはいけない。

ゲイン調整

マイクゲインが一番融通きかないのでここからはじめる。イコライザを中点にし、100Hzのハイパスフィルタを入れてゲインを3時ぐらいまで上げる。

イコライザは下から12kHz shelf, 2kHz bell, 80Hz shelf。

  1. トップ
  2. tech
  3. Notepad-8FX の運用方法メモ

最近のノートPCは「モダンスタンバイ」あるいは「スタンバイ (S0低電力)」という、CPU はS0(非スリープ)だが低消費電力で動き続けるという仕様になっている。これに伴ってか、スリープから時間が経過すると休止(ハイバネート)状態になるハイブリッドスリープをユーザ側でオフにできないらしい。

がいろいろ試した結果この挙動をある程度制御できることがわかった。

powercfg

コントロールパネルの電源オプションはコマンドラインからだと powercfg というコマンドで設定できる。上の画像はデスクトップPCの電源オプションで、「次の時間が経過後休止状態にする」という項目が表示されているが、ノートPCだと表示されないことがある。

powercfg で設定状況をすべて表示するには以下のようにする。

powercfg /q

HIBERNATEIDLE

休止状態に入るまでの時間は HIBERNATEIDLEという項目に設定されている。

単位秒 0x12c (300) がDC電源だとデフォルトだった。AC電源だと0で、休止に入らない設定になっていた。

48時間に設定する

powercfg -setdcvalueindex  381b4222-f694-41f0-9685-ff5bb260df2e 238c9fa8-0aad-41ed-83f4-97be242c8f20 9d7815a6-7ee4-497e-8888-515a05f02364 172800

デフォルトに戻す場合 (5分で休止)

powercfg -setdcvalueindex  381b4222-f694-41f0-9685-ff5bb260df2e 238c9fa8-0aad-41ed-83f4-97be242c8f20 9d7815a6-7ee4-497e-8888-515a05f02364 300

この設定をしていても、バッテリー残量が規定量減ると別途休止に入る制御が入っているようだが、ここからは特に設定が見えないのでよくわからない。

  1. トップ
  2. tech
  3. モダンスタンバイ環境のハイブリッドスリープを制御する

3Dプリンタでロータリーエンコーダやボリュームのノブをプリントする場合、プレスフィット設計だとうまくいかないことが多くて面倒くさい。確実に固定したい場合、ヒートセットナットを埋めてセットスクリューで固定するのが楽。

https://www.thingiverse.com/thing:6194

これを使うと楽そう。特にヒートセットナット専用のものではない。

setscrew_dia = setscrew_nut_w = 3.9 や 4.2 (ヒートセットの下穴経) をいれ、setscrew_nut_t = 0 にする。これで丸穴になるので、あとは好きなように形を設定する。

  1. トップ
  2. tech
  3. ヒートセットナットを使うノブ

FORMBOT のセットを買ってみた (先にいっておくとおすすめしない)。Aliexpress だとエクストルーダーの種類が選べないことに気付いたので、FORMBOT 公式サイトから PayPal で購入した。Dragon Hotend Standard Flow にした。

届いたセットに Z motor が含まれておらず、お問合せ。30分ぐらいで返信がきて対応は早かったが、さすがに届くのに1週間ぐらいはかかった…… (本体はUPSだったがZモーターはCNEで発送された)

1515 押し出し

A/B と H/C は端のM3タップの有無だけなので、セットのものはすべてタップが切ってあった。後述するけど、このタップがひどかった。

F/G は穴の有無だけなので同一のものが3つ入っていた。ベッドフレームだが、今回これらは使わない。

Kirigami mod

Kirigami mod というベッドのマウントをアルミ押し出しではなく板金にするmodがあるのだがこれも同時に注文した。鉄だと思ったが FORMBOT のものは磁石にくっつかず軽いのでアルミっぽい。

ベッドマウントがデフォルトのアルミ押し出しで何がダメか?

  • 剛性が低い
    • 伸びている2本の押し出しは blind joint ネジで止めてるにすぎない
  • ネジの増し締めがしにくい
    • 組立後にアクセスできない位置にネジがある
    • 3Dプリンタのねじはネジロックしない限り確実に緩むので厳しい

これらを解決するのが1枚板から折り曲げた Kirigami mod になる。

1515アルミ押し出しのタップ問題

端の穴にM3のタップが切ってある。トルクをかけなければ10mmのビスは最後まで入るので、一見問題なさそうだが、実はこの時点でかなりグラグラ。トルクをかけて締めることができなかった。下穴径がかなり大きいのだろう…… 不良品といえる。一応タップは切ってあるので、クレームいれてどうにかなるか面倒なため自分でなんとかすることにした。

Voron 2.4 の 2020 押し出しはクオリティ良かったが今回の 1515 は表面処理からして微妙な感じ。おそらく供給元が違うのだろう。Aliexpress で Voron 0.1 の 1515 だけのセットとかを見ていると「タップ穴がちゃんとしてます!」みたいな主張をしているショップがあるので「あるある」っぽい。

ということでこのネジ穴で「固定」することはできない。ほんの仮固定ぐらいが精々。

ネジ穴を埋めてタップを切りなおすとか、いろいろ考えてみたが強度的に安定させたかったので、アングルでスロットから固定することにした。追加のM3ナットを入れておく必要があったり、ほかのパーツと干渉しないか考える必要があるが、3D CAD を見ながら配置を決めた。

Z軸上側はA/Bドライブによってスロット同士も直角に固定されるが、下側は固定されないので、ここをサポートするアングルを追加。


あとは左右のフレームの上下前後四隅、及び全面フレームの下をアングルで固定した。右フレームの上の前側は Klicky をつけたかったため、Klicky のマウントとアングルを合体させたみたいなものをプリントした。

Mini Afterburner

なかなか組み立てが難しいツールヘッドみたいだし実際苦労した。組み立てが大変なのはともかく、エクストルーダー部分の設計がなんか微妙な感じがする。アイドラーのストッパ的なものがなくギアが全力で当たっていてよくない感じがする。

検索してみるとやはりエクストルーダー部分に不満がある人が結構いて、Mini-AfterSherpaというエクストルーダー部分をモジュール化する mod が出ていたりする。そしてこれの Kilicky 対応版まである。

Sherpa Mini は Mini Afterburner とほぼ部品共通で作りやすいかな?3mm シャフトだけ追加で必要

とりあえずは Mini Afterburner を使うことにする。ただ、アイドラー圧だけ気になるので、M2 のビスをアイドラーにねじこみ、圧を調整できるようにはした。

M3 Tナット


https://github.com/VoronDesign/VoronUsers/tree/master/printer_mods/Zen3D/V0_1515_T-nut

M3 ナットをそのまま T スロットに入れると重力に従ってあっちこっちいってしまうので、このTナット化するモデルをプリントして使った。これは本当によかった。

ただナット幅が増えるため、ハンドルの受け側の磁石を埋めるパーツだけはうまく固定できず、1本のビスで止めることになる。特に力がかかるところではないので、あんまり問題ない。

ケーブルチェーン

7x7mmのケーブルチェーンにJST 2ピンコネクタは通らないので、先にケーブルを通してからコネクタをつけないといけない。(圧着端子自体はもちろん通るので、つけてしまったら、一旦ハウジングから外すということ)

ついてきたケーブルチェーンは若干長かったため、数個リンクを外す必要があった。前述の通り、コネクタはチェーンを通らないので、先に調整しなければならない。めんどくさかった。

SKR Mini E3 V3

SKR Mini E3 V3.0 Pin 回路図

0.1 のマニュアルのマザーボードは SKR Mini E3 V2 なので、V3 だと微妙にというか結構違うので気をつけて配線しないといけない。

  • 24V入力端子は1つになっており入力方向が変わっている
  • ファン端子が1つ増えている
  • I/O 端子が増えている
  • SPI ヘッダの端子が増えておりピンアウトが変わっている

など。

ref. SKR Mini E3 V2.0 Pin

設定

デフォルトの設定だとベッドの max_power は設定されていない。ヒーターは24V 60W。120x120mm だと 144cm^2 なので、Rule of thumb is 0.4 watts / cm^2 に従うなら57.6Wぐらいが適切。60W で温めてもいいということだろう。

A/B モータの接続がマニュアル通りだと逆だった。なんでかはよくわからない。

X/Y/Z エンドストップの物理的な調整と position_endstop の調整。120x120x120 の印刷範囲があるが、これはベッドのサイズであると同時に、ツールヘッドの移動可能範囲と一緒なのでギリギリの設定をしっかり詰めてしないと物理的なリミットにあたってステップが飛んでしまう。

X/Y はレバー式のマイクロスイッチなので、 position_endstop は 119 ぐらいにして1mmほど余計に押せるように調整しとくと良さそう。

Zは調整が難しい。kirigami のせいかマニュアルのビス長だと短くてエンドストップにあたらなかった。長いのに交換して調整した。が初回プリントで使っただけで、後述する Klicky による仮想Zエンドストップを使っており、もともとのZエンドストップは使っていない。

V0-Umbilical

https://github.com/VoronDesign/Voron-Hardware/tree/master/V0-Umbilical/Software

FORMBOT のキットにはツールヘッドPCB及びマザーボード側のPCBのセットが同梱されていた。chamber temp のサーミスタもついている。

ただ chamber temp 用の配線ケーブルは入ってなかったので、自分で用意する必要がある。前述の通りだが V2 と V3 で SPI ヘッダのピンアウトが変わっているので気をつけて配線する。MISO が 10kΩのプルアップなのは変わってないのでソフトウェアの設定はそのままでいい。

Klicky プローブ

Voron 0.1 のデフォルト設計ではプローブを組みこむようにできていない。しかしどう考えてもプローブはあったほうがよいので、最初から Klicky を組みこむことを前提に作りはじめていた。Mini Afterburner も Klicky をマウントをつけれるタイプを使った。

SKR Mini E3 では BLTouch 用のヘッダの端2ピンが Probe (PC14) になっている。XH コネクタ2ピンのロック部分を切り飛ばしてはしっこだけ入れている。というのもこのヘッダからホットエンドファンにも接続する必要があるため。

なおこのプローブを仮想Zエンドストップにしてる。

Klicky (というか Probe の) メリットとしては

  • SCREWS_TILT_CALCULATE が使える。(紙を使う職人芸なしにベッドを水平にできる)
  • Zエンドストップの変わりになる (調整・設定項目がすくなくなる)
    • 0.1 は 2.4 みたいにノズルで押すエンドストップじゃないので、Zエンドストップを使うメリットがない

プローブ側は Unklicky にした。ロングタイプの Unklicky はバネ用の磁石を別につけるのだが、これがツールヘッドの磁石とくっついてガタガタいうので鬱陶しかった。機能的には問題なかったものの、0.2mm のスチールシートを切って貼ったらいい感じになった。

まあでも普通のKlickyでよかったかな…… Unklickyはsafe zがどうしても高くなるのでコンパクト感がない。

サーボで出てくるブラシ

https://www.printables.com/model/181785-voron-v01-nozzle-brush これをつけることにした。MG90S を使う。似たような小型サーボがいくつかあるが微妙に寸法が違うので MG90S しかフィットしない。

NeoPixel ヘッダから電源および制御をとるようにと書いてあるが、自分はそこは使わず、SPI の 5V / GND と I/O の PD0 に接続するようにした。

ブラシだけではなくパージバケツも欲しかったのでモデリングして追加した。

フロントディスプレイ+エンコーダー

https://www.printables.com/model/341330-voron-01-front-skirt-with-display

手持ちの I2C OLED とロータリーエンコーダを全面に取り付けた。どちらも SKR E3 ではなく Raspberry Pi 側に接続している。

Raspberry Pi 側に接続することで、systemd の起動/終了時にOLEDに簡単な文字を出すような制御をすることができる。

ノズル高さの調整の覚書

Klicky + 仮想Zエンドストップの場合、Probe Offset のキャリブレーションになる (Z Endstop キャリブレーションではない)。

  1. SCREWS_TILT_CALCULATE MAX_DEVIATION=0.025 でベッドのスクリューを調整して水平にする
    • 表示される hh:mm 表記は時計の時間表記でどのぐらい回せばいいかを表示している。00:10 なら10分にあたる角度を調整する。
    • CW/CCW はベッド上から見た方向
  2. ベッド中央で PROBE_CALIBRATE して高さを決定する。ここは紙を使う

ベッドメッシュすべきか

このサイズでこの厚さのベッドだと、ベッドメッシュは不要なのだが、Zホーミングはプローブと違い複数回サンプルをとって外れ値を除外するということができないため、Z原点の精度が信頼できない。これを補正するためにベッドメッシュをしている。ベッドメッシュは最低でも3x3はしなければならない。

Probe して結果をそのまま Z_OFFSET にぶちこむようなコードを書けばすみそうだが面倒なのでベッドメッシュしているという感じ。

トップハットのパネル厚さが厚い

どうやら0.5mmほど設計よりも厚いパネルのようで、うまく組み立てられなかった。Lower Corner Clip を少し修正するといい感じになった。

トップハットは全体的に若干高さを上げつつヒンジを追加する変更を入れて使っている。https://www.printables.com/model/109713-voron-v01-tophat-spacer-with-hinges

エレクトロニクスファンの追加

https://www.printables.com/model/345341-voron-01-splitted-backpanel-with-fan

Voron 0.1 は Raspberry Pi やコントローラーボードの排熱が考慮されておらず、排熱の行き場がないためプリント中は室温25℃程度でも、Raspberry Pi で60℃以上になってしまう。同じスペースにA/Bモーターもあるので、夏場は耐えられないのではと思いエアフローをつくることにした。

SKR E3 のファン端子はFETのローサイドスイッチになっているので、別途電源を供給しつつ - 側だけ配線することで任意の電圧をスイッチできるようになっている。実際 Voron 0.1 の設計上のホットエンドファンは 5V であり、この方法で制御するようになっている。

なので 12V ファンに 5V を供給し、GND は FAN2 の GND に接続するようにした。電圧的に速度調整はできないが、オンオフはできる

感想

Voron 2.4 は割とすんなり組み立てられたが、Voron 0.1 はかなりいろいろ手を加える必要があった。

上に細かく書いてないがX/Yジョイントがいまいちで固定しようとするとスムーズに動かなくて苦労したりもした (シムを入れて解決)し、トップハットは印刷しなおしたりもしている。

ただ小さくて可愛いし、高加速度設定にできるし、小さいぶんウォームアップタイプも早いので、小さいパーツを作るには良い感じがしている。

  1. トップ
  2. tech
  3. Voron 0.1 を組み立てた

ボード組み込みで8個まで、BIGTREETECH DCDC5V V1.0 module をつけて30個までらしい。ref. https://biqu.equipment/products/bigtreetech-dcdc5v-v1-0-power-module-5v-for-skr-mini-e3-v1-2-skr-mini-e3-v3-0-32bit-control-board-rgb-light

オンボードはMP1584ENによるスイッチングの最大5V 3A だが、この 5V は MCU の 3.3V への供給 (AS1117 800mA シリーズレギュレータ) にも使われ、1.1Aのヒューズがついている。NeoPixel は1つあたり約50mAだから400mAぐらいがRGB LEDで使える限度ということっぽい。基本的に、RGB LED をつけるなら、5V の外部電源が必要と思ったほうが良い。

Voron 0.1 の場合、5V 10AのDC/DCコンバータは既についているので、NeoPixel はこちらから電源をとったほうが良い。ただ、SKR Mini E3 V3 は 5V モジュールをとりつける用のピンヘッダがついており、ここに接続してやれば NeoPixel ヘッダをいじらずに 5V の供給元を変えることができる。

本来この「外部電源」というのは「BIGTREETECH DCDC5V V1.0 module」のことを差していて、POWER 近くの Vin から Vout を繋ぐような基板になっている。

Neo-PWR1 がオンボードの 5V レギュレータと外部電源を切り替えるジャンパになっている。そのすぐ隣に Vout というピンヘッダがたっているが、これが外部電源の接続口になっている。

  1. トップ
  2. tech
  3. SKR Mini E3 V3 の NeoPixel ピンの最大数

  • ノズル 245℃
  • ベッド 100℃
  • エンクロージャ (40~50℃)

この条件でも場合によっては反って剥れてくる。厚みがでるにつれて (25~30レイヤー)すぐ浮いてくるので形状と加工時間どちらも気にしたほうがいい。

ブリム

  • 原則 5mm のブリム

ブリムの効果は絶大で、5mm 程度でほぼ剥れてこなくなる。1layer目に追加の出力をするだけなので追加のコストは最低限といえる。欠点は外すのが面倒くさく、うまくやらないと後が汚くなってしまうところと、印刷可能最大サイズが減るところ。

原則的に ABS はブリム必須と考えたほうが良い。長辺10mm以下だったりある程度までの大きさの円形なら例外的にブリム不要にできるが特殊な例になる。

複数オブジェクトある場合、ブリムが重なるように、3mm 程度の間隔で配置する。

ただし非常に大きいオブジェクトの場合、ブリムをつけても負けて剥れてくることがある。なので

  • 長辺 150mm以上の場合ブリム10mm

とする。

反り

ブリムをつけても印刷中に剥れてこなくなるというだけで、反り自体は起こる。アスペクト比が極端だと外したあとに盛大に変形することがある。どうしようもない。

  1. トップ
  2. tech
  3. ABS 3Dプリントの条件

Klicky

https://github.com/jlas1/Klicky-Probe

Klicky はプローブ(ベッドの高さを測るセンサ)の実装の1つで、誘導プローブを置き換えて使えるような設計になっている。

誘導プローブの変わりにマイクロスイッチを使うのが基本形。誘導プローブは運用温度が案外狭く、温度の影響をうけて不安定になる。ノズルはかなり高温になり、測定対象も高温のベッドとなるので、誘導プローブが溶けたりする問題もある。

ということで物理的な接触スイッチのほうがプローブとして都合が良いが、ノズルよりも下にスイッチがこなければベッドにノズルがあたってしまうという物理的な問題がある。ということでプローブ自体を取り外し可能にしたり、サーボで一時的にスイッチを展開したりしてがんばるほうに発展しているが、そのひとつが Klicky になる。

メリットは温度にあまり関係なくなりプローブが安定することろ。デメリットは設定が難しいところ。

動作のおもしろさ

磁石が電気的接点とドッキング機構・アライメントを兼ねている。

ドッキングできなくてベッドに衝突することはないのか?と思うが、スイッチはノーマリクローズ (プローブがトリガーするとオープンになる) が前提なため、これによってドッキング失敗を検出することができる (プローブがオンにならない高さでプローブがトリガーされているならば、ドッキングされていないと判定できる)

Auto Z Calibration

https://github.com/protoloft/klipper_z_calibration

これもいれるとZオフセットを自動算出するようになる。Klicky によるベッドのプローブと Voron に元々ある Z エンドストップ(ノズルで押してノズル位置を決定できるプローブ)の差分をつかう。

これによりベッドの高さが多少変化してもノズルとベッドの関係(3Dプリントにおいて一番重要)を一定にできる。

ノズルとベッドの関係は最終的には switch_offset という値によって決まる。

Unklicky

Klicky はマイクロスイッチを使うのが基本だが、マイクロスイッチはそもそも精密位置決め向けではなく、そこそこオペレーションポイント(オンになるポイント)がずれる。何度か測定して平均をとったり外れ値を除外したりして対処してソフトウェア的に精度を高めるが、トレードオフとして時間がかかる。

Unklicky は 3D プリントパーツで接触プローブを作るというもので、構造的には精密位置決めに使われるタッチスイッチとよく似ている。おもしろいのはバネなどは使わず、手に入りやすい (そして Klicky でも大量に使う) 6x3mm磁石を採用してるところ。

Unklicky にするとマイクロスイッチのときにあったプローブのやりなおしが劇的に減る。

  1. トップ
  2. tech
  3. Voron2.4 Klicky、Auto Z Calibration、そして Unklicky

Octopus の場合 STOP 用のターミナル (Stop_0~Stop_7) ならどこでも良いっぽい? 一応 PG12 か PG13 が指定らしい。ので Stop_4 = PG12 に繋ぐことに。

BigtreeTech Smart Filament Sensor を使うことにしてみた。この記事の解説が割と詳しい。

BTT SFS の端子は PH (2.0mm) 4PIN。付属ケーブルは XH 3PIN (BTT Octopus とかにはそのままつけられる配線)

XH3PIN な Stop_4 のターミナルを右スカートに延長して外から接続するようにした。フィラメントセンサはなんとなく壊れやすそうなので、あまり中に組みこみたくない。あとで気が変わって単純なスイッチにしたりもできるように。

スマートフィラメントセンサーってなんなのか?

マイクロスイッチとかで単純にフィラメントの有無を検出する方法もあり、こちらのほうがよりシンプルである。ただフィラメントの有無の検知だけなので「フィラメント切れ」は検知できるがより「フィラメントの停止」は検知できない。

スマートフィラメントセンサーはフィラメントの動きを検知する。このため「フィラメントの停止」も検知できる。例えば

  • フィラメントの絡まり
  • エクストルーダの不良(モーターのオーバーヒートやギアのゴミなど)

これらは単純なフィラメント切れよりも重大なトラブルなので、はやめに検知して止められるのはありがたい。

設定

BTT Smart Filament Sensor は Klipper 的には filament_motion_sensor になる。以下のように設定する。

[filament_motion_sensor filament_sensor]
detection_length: 7.0
extruder: extruder
switch_pin: PG12
event_delay: 3.0
pause_delay: 0.5
pause_on_runout: False
runout_gcode:
    {action_respond_info("RUNOUT: Filament runout")}
    {% if printer.idle_timeout.state == "Printing" %}
    PAUSE
    {% endif %}
insert_gcode:
    {action_respond_info("RUNOUT: Filament inserted")}

filament_motion_sensor はフィラメントが動いている場合、該当のピンをon/offするという伝えかたをする。ソフトウェア的には以下のように処理している。

  • extrude しているのに、想定される信号がこなかった場合 runout
    • 具体的には detection_length [mm] 分 extrude しても信号がない場合
  • runout している状態で信号がくれば inserted

filament_switch_sensor と違って、フィラメントが実際にセンサー部分にあるかどうかは判断しないので注意がいる。つまり extrude して runout 状態にならなければ実際にフィラメントを入れても insert_gcode は実行されないし、フィラメントを抜いても extrude されなければ runout_gcode は実行されない。

  1. トップ
  2. tech
  3. Voron 2.4 に BTT Smart Filament Sensor を追加

Raspberry Pi の負荷が高くなると mcu との通信に支障がおこり、最悪プリンタが止まる。なので cron をできるだけ止める

apt

https://blog.turai.work/entry/20191005/1570271926

systemctl stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl stop apt-daily.service
systemctl disable apt-daily.service

/etc/apt/apt.conf.d/02periodicに以下

APT::Periodic::Enable "0";

man-db

raspi で man 見ない

sudo chmod ugo-x /etc/cron.daily/man-db
sudo chmod ugo-x  /etc/cron.weekly/man-db
systemctl stop man-db.timer
systemctl disable man-db.timer

bsdmainutils

calendar -a が動いているが使わない。

sudo chmod ugo-x /etc/cron.daily/bsdmainutils
  1. トップ
  2. tech
  3. Klipper 用の raspiberry pi のカスタマイズ

基本的に Klipper のドキュメントに従うのみ。ただ準備がなかなか面倒くさい

https://www.klipper3d.org/Measuring_Resonances.html

ADXL345 用の SPI コネクタを外だし

ADXL345 は SPI 接続するため、Raspberry Pi の SPI (SPI0) をパネルに出してくるような配線をした。Qi コネクタ 3x2 ピンを使うことにした。

ピン配列は AVR ISP に似たような感じにした。

ケーブル配線

1m のフラットなLANケーブルを切って配線した。以下のペアになるように配線。8P8Cだと1ペア余る。

GND+MISO
3.3V+MOSI
SCLK+CS

Stealthburner への取り付け

Stealthburner は最初から ADXL345 をとりつける治具と場所が用意されているのでそれに従うだけ。

測定

MEASURE_AXES_NOISE からはじめる。全体的に若干ノイズが多いが、特に z 方向のノイズが多い。

Axes noise for xy-axis accelerometer: 138.329734 (x), 93.558179 (y), 339.566789 (z)
Axes noise for xy-axis accelerometer: 138.329734 (x), 93.558179 (y), 339.566789 (z)
Axes noise for xy-axis accelerometer: 109.878052 (x), 98.976760 (y), 286.407229 (z)

で手順通りやってグラフ化したのが以下 (結果 csv を手元にダウンロードして、klipper/scripts/calibrate_shaper.py は手元で実行した)


TUNING_TOWER による共振周波数測定だと、

shaper_freq_x: 53
shaper_freq_y: 72
shaper_type: mzv

だったが、ADXL345 で測定した結果は

shaper_freq_x: 54.8
shaper_type_x: mzv
shaper_freq_y: 41.8
shaper_type_y: mzv

だった。X の周波数は結構近くだったが y がだいぶずれていた (yは複数共振が見られたので TUNING_TOWER だと測定が難しかった)

max_accel は 5100 未満と、あまり高くできなそう。

  1. トップ
  2. tech
  3. Voron 2.4 ADXL345で共振周波数を測定する

デフォルトでプライベートIPアドレスを許可するようなLAN内向けのアプリケーションがあったりする。つまり192.168.0.13 とかでアクセスする分には特に設定せず問題なく繋がるというもの。

IP アドレスを調べる手間をはぶくため、mDNS 対応していて、voron2.local というホスト名でアクセスできるようになっているとする。この場合、このホスト名でアクセスするときだけうまくアプリケーションが動かないという挙動をすることがある。

mDNS で voron2.local などとアクセスした場合、解決されるアドレスは環境によって IPv4 だったり IPv6 だったりになる。IPv4 で解決されるなら 192.168.0.13 などでアクセスしたことと同じで、問題ない。

問題は IPv6 かつ、しっかりグローバルIPアドレスを持っている場合で、アプリケーションはグローバルIPアドレスからのアクセスをデフォルトで許可するわけにはいかないので拒否される。

この件でやっかいなのは、アプリケーション自体はデュアルスタックで IPv6 対応しているが、IPアドレスベースのアクセス制限をかけているというところで、アクセス制限をかけてない部分には問題なくアクセスできる。

これは localhost と書くと IPv6 対応したときに死ぬことがあると同種の問題といえる。ホスト名はデュアルスタック環境だとどちらに解決されるか環境依存なので、IPv6 環境になり、特に今回の場合はグローバルアドレスが付与されているという条件付きでうまく動作しない環境ができあがる。

正攻法

IPv6 の Link local アドレスならデフォルトで許可しやすいので、mDNS でこのアドレスをひければ一番良いが、avahi でそのような設定を行うことは不可能なようだ (mDNS の仕様的にできないっぽい?)。

または自分と同じ IPv6 prefix を持つなら許可するみたいな動的なアクセス制御を行うようにすればいいがこれは実装が必要になる。

あるいは明示的に現在持っている IPv6 prefix を許可するようにする。が prefix がいつ変化するかよくわからないのでやりたくない。

IPv6 を無効にする

あまりやりたくはないが mDNS 時に利便性が悪 すぎるので、今回は該当機の IPv6 を無効にすることにした。

以下を /etc/sysctl.conf に書く。

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

これで aaaa が解決できなくなる。

dig aaaa voron2.local
  1. トップ
  2. tech
  3. mDNS と IPv6 とアクセス制限

プリント中に一部のオブジェクトだけ反って浮いてきてしまった場合やベッドから外れてしまった場合などに、該当するオブジェクトだけスキップして他のを完成させることができる。

スライサ・ユーザインターフェイス・G-code 実行器でそれぞれやることがあり、協調しないと実現しないので、なかなか難しい機能といえる。

Mainsail のドキュメント https://docs.mainsail.xyz/features/exclude_objects に従えばほぼ良いが、事前処理についてはスライサで完結させたほうが良い。

スライサの設定

スライサ側の設定「オブジェクトに名前をつける」をオンにし、G-code の生成後に preprocess_cancellationを通すようにする。

preprocess_cancellation 自体は moonraker (mainsail のバックエンド) へ enable_object_processing を設定することでも同様のことができるが、この設定はかなり重いようなので手元で処理してしまったほうが良さそう。G-code からオブジェクトの領域を算出しているようで、ちゃんとした CPU の手元でやってももそこそこ遅い。

どうなるか

キャンセルボタンが拡張され、一部のオブジェクトだけキャンセルできるようなUIが追加される。

  1. トップ
  2. tech
  3. 3Dプリンタの Object Cancellation (Klipper + Mainsail)

原則として、オーバーヒートしない限りできるだけたくさん電流を流すほうが安定する (トルクが高い)。

手元の Voron 2.4 の ABZ のモーターは Ralted Current 2A となっている。

RMS電流の最大は 0.707 をかけて 1.414A、ただし TMC2209 の最大電流が1.2Aなのでそっちで最大がきまる。

デフォルトは0.8Aになっていた。Zモーターは外に出ていて4つで重量を分けあってるが、A/B モーターは庫内でかなり加熱するのでちょっとこわい。

TMC2209 のリミットにあてるのも恐いので、とりあえず 1.0A にすることにした。→ 長時間やったあとサーモカメラでA/Bモーターの温度を見たところ60℃いかないぐらいだったので 1.1A に増やした。→音がやたらうるさくなったと感じたので1.0Aに戻した

ステッピングモータの熱

スペック上130℃の絶縁階級(B種)となっている。これは絶対最大定格にあたるので内部がこれを超えることがあってはいけない。

だいたい目安としてはケースで100℃ぐらいまで。触れないレベルで熱いのは危険。

ref. https://docs.vorondesign.com/community/howto/120decibell/calculating_driver_current.html

  1. トップ
  2. tech
  3. 3Dプリンタのステッピングモーターの電流 (run_current)