Category tech.

DS18B20 デジタル温度センサが便利。1-wire で複数のデバイスを同時に扱える。Klipper も対応している。

Raspberry Pi の場合 1-wire を有効にして GPIO4 (PIN7) に信号線を接続する。3.3Vから 4.7kΩ (信号線の長さで調整する)) でプルアップする。

  • 庫内温度(上) フレームあたり
  • 庫内温度(下) 高さはベッド付近
  • 室温(ファン近く)

あたりをモニタリングする。庫内温度は上と下で10℃ぐらい差があるのでどっちも見たい。

Raspberry Pi 上で

以下のように見える。22312 は1000倍した℃なのでこの場合は22.3℃

$ ls /sys/bus/w1/devices/
28-03039794629e  28-0306979425a5  28-030f979445fd  w1_bus_master1

$ cat /sys/bus/w1/devices/28-03039794629e/w1_slave
65 01 55 05 7f a5 a5 66 c5 : crc=c5 YES
65 01 55 05 7f a5 a5 66 c5 t=22312

Klipper での設定

以下のように設定する。

[temperature_sensor temp1]
sensor_type: DS18B20
serial_no: 28-03039794629e
sensor_mcu: host_mcu
min_temp: 0
max_temp: 100

ただし、以下のように host_mcu が定義されていないとエラーになる。

Unknown config object 'mcu host_mcu'

rpi 自身をセカンダリーmcuとしてセットアップする必要がある

上記ページの指示に従って host_mcu のサービスを起動する。そして printer.cfg に設定を追加する

[mcu host_mcu]
serial: /tmp/klipper_host_mcu

これで動くようになる

1-wire

しょうがないけど 1-wire は遅い。

OS起動直後、なんらかの原因で一部の 1-wire デバイスと通信できずに serial_no が認識されないと Klipper が起動に失敗する。

また 1-wire の通信に失敗すると Kilipper がエラーを吐いて止まることがある (1度あった)。のであまり大量に繋げたりしないほうが安全そう。念のためフェライトコアを噛ませている。

  1. トップ
  2. tech
  3. Voron 2.4 に温度センサーを追加

立方体とかをプリントすると角が膨らんでいることに気付くと思う。こういうのをできるだけなくすのが Pressure Advance 機能になる。

https://note.com/eitoku_note/n/n78f0d240940a このマクロをつかわせてもらう。

一番下は現在の設定値なので、その次のラインから console に表示されている値と突きあわせて見ていくのが早い。今回は 0.03 が適切だった。

  1. トップ
  2. tech
  3. Klipper Pressure Advance の調整

Klipper はなるべく早く起動して、ディプレイに起動してますよというアピールをしてほしい。しかしいろいろ設定した printer.cfg だと、なるはやで起動というのが難しいことがある。例えば 1-wire のデバイスを設定していると、1-wire のデバイスが OS に認識されるまで klipper を起動できなくなってしまう (さもなくばエラーになる)

ということで、最小限の cfg を作って最小限の gcode を実行してすぐ終了するようなことを OS 起動初期にやりたい。

Klipper batch モード

klippy.py に -i で gcode 入力ファイルを渡すとそのファイルだけ実行して終了してくれる。これをバッチモードという。

mcu のファームウェアを make したときにできる out/klipper.dict が必要になる。これは形式的にはJSONファイルで、mcu との通信プロトコルの規約が入っている。

以下のように cfg と gcode と dict を渡すと gcode の実行をして終了する。

/home/pi/klippy-env/bin/python /home/pi/klipper/klippy/klippy.py /home/pi/klipper_config/bootstrap.cfg -i /home/pi/klipper_config/bootstrap.gcode -d /home/pi/klipper/out/mcu_klipper.dict

systemd のサービス化

以下のようにする。なるはやで起動してさっさと終了してほしい意図がある。もっといい方法があるかもだけどとりあえずうまくいっている。

$ cat /etc/systemd/system/klipper_bootstrap.service
#Systemd Klipper Service

[Unit]
Description=Bootstrap klipper
Before=klipper.service
Wants=udev.target

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
User=pi
RemainAfterExit=yes
ExecStart= /home/pi/klippy-env/bin/python /home/pi/klipper/klippy/klippy.py /home/pi/klipper_config/bootstrap.cfg -i /home/pi/klipper_config/bootstrap.gcode -d /home/pi/klipper/out/mcu_klipper.dict
systemctl enable klipper_bootstrap.service

備考

shutdown 時も同様のことをしたいが、batch モードではない klipper が終了するときに mcu を shutdown 状態 (estop) にしてしまいうまくいかない。batch モードではこの shutdown 状態を解除する方法がおそらくない (FIRMWARE_RESTART する前にエラーで死んでしまう)

良い方法

一番良いのは Klipper を経由せずに (Rapsberry Pi の GPIO で) 起動状態を示す LED などを外出しすること。

  1. トップ
  2. tech
  3. Klipper でOS起動時に oneshot gcode を実行する。