SnakeOil-XYにエンクロージャー用の温度計を追加

3Dプリンター
記事内に広告やアフィリエイトリンクが含まれています。これらのリンクから商品を購入すると売り上げの一部が管理人に還元され今後の活動の助けになります。

ようやく動き出したx3Dプリンター「SnakeOil-XY」にエンクロージャー用温度計を追加したのでその備忘録です。
順番に書いているわけでは無いのでちょっと時系列がバラバラしてしまうとは思いますがご了承ください。
SnakeOil-XYに限らずラズパイとKlipperを使用する3Dプリンターなら同じように使用することが可能です。

スポンサーリンク

準備

温度センサーはSnakeOil-XYのBOMに有ったHTU21Dを購入しました。
※ただしこのセンサーは非推奨

ラズパイをセカンダリMCUとしてセットアップする。

Klipper公式サイトにある情報をもとにラズパイをセカンダリMCUとしてセットアップします。
https://www.klipper3d.org/RPi_microcontroller.html

Klipperの動いているラズパイにSSHで接続して設定する必要が有りますがこれをすることでラズパイ上のGPIOを利用して色々な機器を制御できます。
多分メインのMCU(うちではBTT Octopus Pro V1.02)ではI2C通信などが使えないためラズパイのGPIOを利用するのだと思います。
I2C通信ってなんだ?って方はコチラを(よく分からず使ってます)。

配線

ラズパイ4Bの1359番ピンとセンサーを接続しました。
1(赤)は3.3v 9(黒)はGNDで 3(黄)5(青)がI2Cで使用する信号線です。
センサーは本体右奥のYモーター辺りに配置しましたがマウント側のネジ穴が微妙に本体側のネジ穴と合わず本来どこに設置するように設計されているのかわかりませんが強引に穴を広げて設置しました。

参考: I2Cの接続先

printer.cfg

ラズパイの設定が出来たらprinter.cfgを修正する必要が有ります。
この時点では温度センサーはSnakeOil-XYのBOMにあるHTU21D(のちに変更)を利用しています。
printer.cfgに下記の様に追記し、klipper firmwareを再起動します。

[mcu rpi]
serial: /tmp/klipper_host_mcu //ラズパイをMCUとして読み込み

[temperature_sensor enclosure_temp]
sensor_type: HTU21D //使用するセンサー
i2c_mcu: rpi //使用するMCU
i2c_bus: i2c.1 //使用するバス
htu21d_hold_master: False 

[gcode_macro QUERY_ENCLOSURE]
gcode:
    {% set sensor = printer["htu21d enclosure_temp"] %}
    {action_respond_info(
        "Temperature: %.2f C\n"
        "Humidity: %.2f%%" % (
            sensor.temperature,
            sensor.humidity))}

参考:sample-raspberry-pi.cfg I2Cの接続先

表示

これでMainsail内でエンクロージャーの温度と湿度が表示できるようになりました。

この後プリントしているうちに下記のエラーがでてプリントが中断する事態が多発したので使用を中止しました。

MCU 'rpi' shutdown: Unable write i2c device
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown

対策

エンクロージャーの温度なのでなくてもまぁ良いんですが、やっぱり測りたいなと思いSnakeOil-XYのDiscodeを見て回った結果、実はBOMにあるHTU21Dは非推奨でLM75が良いとの事でセンサーを付け替えてみました。

ラズパイ側の配線は触らずにLM75には穴が5つありましたがどうやら左端のOSは使わなくて良いようで、HTU21Dから信号線は「CL→SCL」「DA→SDA」に繋ぎ変え、電源周りはそのまま「+→VCC」「-→GND」に繋ぎ変えました。

コンフィグは下記の様に修正
おもにはHTU21DをLM75に書き換えてhtu21d_hold_masterの行を削除しています。

[mcu rpi]
serial: /tmp/klipper_host_mcu

[temperature_sensor enclosure_temp]
sensor_type: LM75
i2c_mcu: rpi
i2c_bus: i2c.1

[gcode_macro QUERY_ENCLOSURE]
gcode:
    {% set sensor = printer["LM75 enclosure_temp"] %}
    {action_respond_info(
        "Temp: %.2f C\n"
        "Humi: %.2f%%" % (
            sensor.temperature,
            sensor.humidity))}

良く見ると湿度が取得できてないようですね、、、
まぁ湿度だし気にせずそのまま放置してます。

こちらのLM75に変更してからはMCU ‘rpi’とのエラーが再発することなく無事に動いています。
まぁまた別のエラーが発生していますが、、、。

追記

順調に動いていたのですが、XYモーターのドライバーをTMC2209からTMC2240に変えたあたりからmcu rpiがシャットダウンするエラーが多発するようになりました、、、。

というわけで残念ながら温度センサーは再度封印です。

コメント

タイトルとURLをコピーしました