MoonrakerでSSRやスマートプラグを制御して3Dプリンタ本体電源と連動させる改造(Klipper、MainsailOS)



エラーが出た3Dプリンターを非常停止信号で安全停止させる話

防火対策の一環

動作試験の様子

前置き

Raspberry piでklipperサービスとMainsailフロントエンドをつなぐMoonrakerというAPIサーバーがある

こいつのconfigに「プリンタの電源をGPIOで操作するんでおなしゃす」と数行書くだけでいとも簡単にプリンタ電源をSSR(ソリッドステートリレー)で動作させることができる

Raspberry Piからスマートコンセントを叩くこともできるが、結局自宅内のネットワークを経由するのでネットワーク障害がつきまとう

スマートコンセントのファームウェアアップデートで突然非対応になってしまう恐れもある

エラーを検出したプリンタファームウェア自身がスタンドアロンで直接リレーを叩けるというのがすばらしい

もちろん、電源のSSR化をしなくてもプリンタはFETをOFFにするので一定の安全性は確保されている

ただ、FETがショートモードで故障した場合はヒーターを最大出力で際限なく加熱してしまう恐れがある

エラー時にプリンタへ供給される100Vの一次電源を遮断できるというのはとても大事なのだ

緊急遮断させるのは3Dプリンタの電源だけなのでRaspbery piに保存されたログが破損する恐れはない

個人的にはRaspberry Piを常時起動させてプリンタの電源だけON-OFFさせる方針だし、それを推奨しているが、Raspberry piでプリンタ電源を制御するということはRaspberry Piの起動、停止とプリンタ電源が嫌でも連動する為、Raspberry Piを毎回シャットダウンしたい人にとっても便利な使い方となる

モデル配布先

電源からACインレットを取り外しモデル台座をねじで固定
Raspberry Piと上蓋をM2.5かM2.6のネジ10mm〜20mmで固定させる
SSRはM3 10mmで固定

電気工事について

今回の改造だとどうしても100V側の配線工事が必要になる
コンセントの2次側(外側)における電線の電気工事は軽微な電気工事に該当し、電気工事士の資格無しで行うことができる
法律上はできるが、工具は高いし部材も高いし正直現実的ではない
なのでスマートコンセントを利用する方法もページの最後に紹介しておく
(自宅内のルーターを経由するから理想的ではないというだけで、スマートコンセントを利用する方法も現実的かつ有効である)
※最近はオーダーハーネスの業者さんなんかもあるみたいなので頼めばやってくれるかもしれない

使用した電材、工具

ソリッドステートリレー
端子台付きのSSR
秋月で1000円ぐらいで売ってる
SSR15DAでも大丈夫だろうけど容量の大きい方が発熱が少なさそうなんで一番メジャーな40DAを使っている
個人的に端子台が好みなだけで、秋月のSSRキット(35Aタイプ)とか使えばもっとコンパクトになる

キャブタイヤケーブル
VCTFK 2x1.25sq
ホームセンターで切り売りしている

電工ペンチ
P-958
使おうと思ったら見つからなかったのでカッターとニッパーで作業した

コンセントキャップ
個人的にWH4019が好き

圧着端子
TMEV 2-4M
3Dプリンタの電源端子台用
4M型番が最適だが入手性が悪い
TMV B-2
電線同士を圧着する

R2-3.5
コンセントキャップ用

圧着ペンチ

絶縁被覆付きの圧着端子用のやつ

裸圧着端子用のやつ

中継ヒューズコネクタ
15Aまで対応する

ヒューズ
多く見積もっても4Aなので4Aのやつを買った
もう少し上の容量を買っても良かったかもしれない

結線図



スイッチングのSSRやヒューズはL線に入れる
最初はユニバーサル基板でHATを作ろうと思ったがXHコネクタがそのまま入ってしまったのでこれでええやんになった
GPIOは任意の場所から使えばいい
今回はGPIO4とその隣のGNDから信号を取った
電源ボタンの改造で使われるGPIO3が隣りにあるので3極のコネクタでGPIO3.GPIO4.GNDを取るのも面白そう

配線の作り方

VCTFKを次の長さで2本切り出す
・450mm
・345mm

450mm電線の加工
片側を40mm
もう片側を20mm剥く

スマートプラグを使わないけど、一応左側にN線が来るように加工したい

芯線の被覆を5mmむいて圧着する

写真のようになる

反対側はN線(白)に電源用の圧着端子をつけ、L線(黒)はスリーブを圧着する

450mmの電線はひとまず完成

350mmの電線の片側を20mm剥く
350mm電線はどちらもL線だが便宜上色を指定して加工する
右側に黒線が来るようにして丸型端子を圧着する
白線は写真の様に20mmから5mmカットしてスリーブを圧着する
こちらは電源側になる

写真のようになる

もう片側を45mm剥いて丸型端子を圧着する
こちらはSSR側になる
極性はどちらでもいいが、写真のように左を白、右を黒としておく

450mmの電線と350mmの電線を電源の端子台にそれぞれネジ止めする
Nに450mmの白線、Lに350mmの黒線をつなぐ

ヒューズ中継コネクタをの電線を現物合わせでいい感じの長さにカットして圧着する

写真のようになる

モデルと電源を組む
350mm線をSSRに接続する
この段階で長さの余ったコンセント電線やRaspberry Piの電源線をボックスの中に押し込むといい
押し込めるだけ押し込んで組み上げ後に必要な分を引っ張って取り出すぐらいでちょうどいい

Raspberry Piをネジ止めして完成


Moonrakerの設定

公式ドキュメント

ブラウザ(Mainsail)からmoonraker.conf の編集画面を開き次のように記述を追記する

[power printer]
type: gpio
pin: gpio4
off_when_shutdown: True
initial_state: on

注意点
locked_while_printing: Trueを使用するとエマージェンシーストップ時に電源遮断してくれなかったので使わないほうがみたい
(逆に言えばエマージェンシーストップ時にも使いたいプリンタ以外の機器があるのならTrueにすればいい)

スマートコンセントを利用する方法

必要な部材

TP-LINKのスマートコンセント
moonrakerに対応して日本で買えるのはTP-LINKのやつだけ
アマゾンでいつも週末にセールしてる
2個セットが2000円ぐらい
廉価版の新型も出ているがそちらも使えるかまでは試してない

結線図


これを結線図と言っていいのか?
とにかくコンセントにさすだけなので、SSRと比較すると死ぬほど簡単
スマホに専用アプリをインストールしての初期設定が必要

Moonrakerの設定

公式ドキュメント

ブラウザ(Mainsail)からmoonraker.conf の編集画面を開き次のように記述を追記する

[power 寿司🍣]
type: tplink_smartplug
address: 192.168.1.123

注意点
IPアドレスは実際にスマートプラグに配布されている値を入力する
KASAアプリからスマートプラグのMACアドレスを確認できるのでルータの管理画面でログと照らし合わせればすぐにわかる
スマートプラグのIPは動的なのでルーター側でMACアドレスに決まったIPを配布する機能とかを利用する
GPIOリレーの方で紹介したMoonrakerの起動と合わせて電源をONにする機能はスマートプラグデバイスには用意されていない
Raspberry Piのシャットダウンに合わせてプリンタの電源をオフにするoff_when_shutdown: True はスマートプラグでも使えるとのことだったが自分が軽く試した限りでは使えなかった
エマージェンシーと連動して電源をオフにする機能はしっかり使えたのでまあ十分だろう
どうしても連動させたければOS上からtplink_smartplug.pyを叩けるのでスクリプトを書けばいい

動作の様子

印刷終了後などのアイドル時に電源を落とす設定(スマートプラグ、GPIO共通)

こちらも
に書いてある通り

printer.cfgに次のコードを追記する


[gcode_macro POWER_OFF_PRINTER]
gcode:
{action_call_remote_method("set_device_power",
device="printer",
state="off")}
[delayed_gcode delayed_printer_off]
initial_duration: 0.
gcode:
{% if printer.idle_timeout.state == "Idle" %}
POWER_OFF_PRINTER
{% endif %}

[idle_timeout]
gcode:
TURN_OFF_MOTORS
TURN_OFF_HEATERS
UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=60


1つ目の[gcode_macro POWER_OFF_PRINTER]はプリンターの電源を切るためのマクロ
2つ目の[delayed_gcode delayed_printer_off]はプリンタがIdleタイムアウト時にPOWER_OFF_PRINTERを実行するコード
デフォルトのIdleタイムアウトは10分
3つ目は[idle_timeout]の定義
モーターとヒーターを明示的にオフにして60秒待つGコードが書かれている
デフォルトのIdleタイムアウト時間もここで変更できるので好きな時間を書けばいい
例えば
[idle_timeout]
gcode:
TURN_OFF_MOTORS
TURN_OFF_HEATERS
UPDATE_DELAYED_GCODE ID=delayed_printer_off DURATION=300
timeout: 900
の様に書けばIdleステータスから900秒(15分)後にモーターヒーターをオフにして300秒(5分)後にシャットダウンとなる
これは印刷終了後だけに限った話でなく、たとえばプリヒートしたまま忘れてほったらかしにした場合にも一律で適用される

おわり

コメント

このブログの人気の投稿

ホットエンド冷却性能比較

Orbiter Extruder mount for KP3Sの作り方