メインコンテンツにスキップ

LED警告灯設定

LED警告灯(三色信号灯)は、プリンターの動作状態を視覚的に表示します。本記事では、その配線方法とKlipper設定について説明します。

電圧の説明

LED警告灯には複数の入力電圧仕様がありますが、本記事では 24V バージョンを例に説明します。実際に使用するモデルに合わせて電圧が適合していることを確認してください。

配線説明

ケーブル色の定義

機能接続箇所
灰色共通プラス24V電源プラスへ接続(例:ファン供給の24V)
赤色赤色灯制御マザーボードのファン制御信号ピンへ接続
緑色緑色灯制御マザーボードのファン制御信号ピンへ接続
黄色黄色灯制御マザーボードのファン制御信号ピンへ接続

制御極性

FLYプリントマザーボードは、デフォルトでマイナス制御方式を採用しています:

  • LED警告灯のプラス(灰色線)は24V電源へ接続
  • LED警告灯の制御線(赤/緑/黄)はマザーボードのGPIOピンへ接続
  • マザーボードがLowレベルを出力すると、対応する色が点灯します
Loading...

Klipper設定

[output_pin led_red]
pin: PD12 # 赤色灯制御ピン
pwm: False
value: 0 # デフォルトでオフ
shutdown_value: 1 # Klipperエラー時に自動で赤色灯を点灯

[output_pin led_green]
pin: PD13 # 緑色灯制御ピン
pwm: False
value: 0

[output_pin led_yellow]
pin: PD14 # 黄色灯制御ピン
pwm: False
value: 0
ピンの説明

上記では PD12PD13PD14 をサンプルピンとして使用しています。実際のマザーボードで使用可能なGPIOに応じて変更してください。

赤色灯のフェイルセーフ機構

赤色灯は shutdown_value: 1 によりフェイルセーフを実現しています:

  • 正常動作時:赤色灯はマクロで制御され、通常状態ではオフを維持
  • エラー/切断時:Klipperがシャットダウン状態になると、マクロの関与なしに自動的に赤色灯がオンになります
  • これはハードウェアレベルの安全機構であり、マクロロジックに問題が生じても、赤色灯は正しく障害を示すことができます

状態マクロ

[gcode_macro LED_STATUS]
description: LED警告灯の状態を設定
gcode:
{% set STATUS = params.STATUS|default("idle")|lower %}

# まず全ての灯をオフにする
SET_PIN PIN=led_red VALUE=0
SET_PIN PIN=led_green VALUE=0
SET_PIN PIN=led_yellow VALUE=0

# 状態に応じてライトを設定(Lowレベルアクティブ:VALUE=1 はピンがLowレベル出力、灯が点灯)
{% if STATUS == "printing" %}
SET_PIN PIN=led_green VALUE=1
SET_PIN PIN=led_yellow VALUE=1
{% elif STATUS == "ready" %}
SET_PIN PIN=led_green VALUE=1
{% elif STATUS == "warning" %}
SET_PIN PIN=led_yellow VALUE=1
{% elif STATUS == "error" %}
SET_PIN PIN=led_red VALUE=1
{% endif %}

状態説明

状態パラメータ灯効果使用シーン
printing緑+黄灯点灯印刷中
ready緑灯点灯Klipper接続済み、プリンター準備完了
warning黄灯点灯警告状態(例:温度異常だがエラー未発生)
error赤灯点灯エラー発生、対処が必要
idle全消灯アイドル状態(デフォルト)

呼び出し例:LED_STATUS STATUS=printing

自動状態検出(オプション)

印刷マクロを変更せずにKlipper状態を自動検出したい場合は、以下の設定を使用できます。

# 状態変数マクロ(前回の状態を記録し、重複更新によるちらつきを防止)
[gcode_macro _LED_STATE]
variable_last_status: "unknown"
gcode:
# このマクロは変数を保存するのみで、何も実行する必要はありません

# 自動状態検出
[delayed_gcode LED_AUTO_UPDATE]
initial_duration: 1
gcode:
{% set idle = printer.idle_timeout.state|string|upper %}
{% set printing = printer.print_stats.state|string|upper %}
{% set current = "unknown" %}

# 現在の状態を判断
{% if printing == "PRINTING" or printing == "PAUSED" %}
{% set current = "printing" %}
{% elif idle == "READY" or idle == "IDLE" %}
{% set current = "ready" %}
{% endif %}

# 状態が変化した時のみLEDを更新し、ちらつきを防止
{% set last = printer["gcode_macro _LED_STATE"].last_status %}
{% if current != last %}
SET_GCODE_VARIABLE MACRO=_LED_STATE VARIABLE=last_status VALUE='"{current}"'
LED_STATUS STATUS={current}
{% endif %}

# ポーリングを継続
UPDATE_DELAYED_GCODE ID=LED_AUTO_UPDATE DURATION=1

状態判断ロジック

Klipper状態判断条件LED効果
印刷中print_stats.state = printing/paused緑+黄灯点灯
接続済みidle_timeout.state = ready/idle緑灯点灯
エラーKlipperがシャットダウン赤灯点灯(shutdown_valueにより自動処理)
その他上記状態が未検出全消灯

動作原理

  1. _LED_STATE マクロが前回の状態を保存し、比較に使用
  2. LED_AUTO_UPDATE が毎秒Klipper状態を検出
  3. 状態が変化した時のみ LED_STATUS を呼び出してライトを更新し、ちらつきを防止
  4. Klipperがエラーでシャットダウンした場合、shutdown_value が自動的に赤色灯を制御
Loading...