Перейти к основному содержанию

Настройка светодиодного сигнального светильника

Светодиодный сигнальный светильник (трёхцветный светофор) используется для визуального отображения состояния работы принтера. В этой статье описывается его подключение и настройка в Klipper.

Информация о напряжении

Светодиодные сигнальные светильники имеют различные варианты входного напряжения. В этой статье в качестве примера используется версия 24V. Убедитесь, что напряжение соответствует вашей модели.

Инструкция по подключению

Определение цветов проводов

ЦветФункцияМесто подключения
СерыйОбщий плюсПодключить к положительному полюсу источника 24V (например, 24V питания вентилятора)
КрасныйУправление красным светомПодключить к контакту сигнала управления вентилятором на материнской плате
ЗеленыйУправление зеленым светомПодключить к контакту сигнала управления вентилятором на материнской плате
ЖелтыйУправление желтым светомПодключить к контакту сигнала управления вентилятором на материнской плате

Полярность управления

Материнские платы FLY по умолчанию используют управление по минусу:

  • Плюс (серый провод) светодиодного светильника подключается к источнику 24V
  • Линии управления (красный/зеленый/желтый) подключаются к контактам GPIO материнской платы
  • Когда материнская плата выдает низкий уровень, соответствующий цвет загорается
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
Примечание по контактам

В примере выше используются контакты PD12, PD13, PD14. Измените их на доступные GPIO вашей материнской платы.

Механизм безопасности при ошибке (красный свет)

Красный свет реализует механизм безопасности при ошибке с помощью shutdown_value: 1:

  • Нормальная работа: Красный свет управляется макросом, в нормальном состоянии выключен
  • Ошибка/отключение: При переходе Klipper в состояние Shutdown красный свет автоматически загорается без участия каких-либо макросов
  • Это аппаратный механизм безопасности, который обеспечивает правильную индикацию ошибки, даже если логика макросов нарушена

Макросы состояния

[gcode_macro LED_STATUS]
description: Установить состояние светодиодного сигнального светильника
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

# Устанавливаем освещение в зависимости от состояния (низкий уровень активен: VALUE=1 означает низкий уровень на выводе, лампа горит)
{% 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Красный горит (автоматически обрабатывается shutdown_value)
ДругоеСостояние не обнаруженоВсе выключены

Принцип работы

  1. Макрос _LED_STATE хранит последнее состояние для сравнения
  2. LED_AUTO_UPDATE каждую секунду проверяет состояние Klipper
  3. LED_STATUS вызывается только при изменении состояния, чтобы избежать мерцания
  4. При переходе Klipper в Shutdown из-за ошибки shutdown_value автоматически управляет красным светом
Loading...