Настройка светодиодного сигнального светильника
Светодиодный сигнальный светильник (трёхцветный светофор) используется для визуального отображения состояния работы принтера. В этой статье описывается его подключение и настройка в Klipper.
Светодиодные сигнальные светильники имеют различные варианты входного напряжения. В этой статье в качестве примера используется версия 24V. Убедитесь, что напряжение соответствует вашей модели.
Инструкция по подключению
Определение цветов проводов
| Цвет | Функция | Место подключения |
|---|---|---|
| Серый | Общий плюс | Подключить к положительному полюсу источника 24V (например, 24V питания вентилятора) |
| Красный | Управление красным светом | Подключить к контакту сигнала управления вентилятором на материнской плате |
| Зеленый | Управление зеленым светом | Подключить к контакту сигнала управления вентилятором на материнской плате |
| Желтый | Управление желтым светом | Подключить к контакту сигнала управления вентилятором на материнской плате |
Полярность управления
Материнские платы FLY по умолчанию используют управление по минусу:
- Плюс (серый провод) светодиодного светильника подключается к источнику 24V
- Линии управления (красный/зеленый/желтый) подключаются к контактам GPIO материнской платы
- Когда материнская плата выдает низкий уровень, соответствующий цвет загорается
Конфигурация 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) |
| Другое | Состояние не обнаружено | Все выключены |
Принцип работы
- Макрос
_LED_STATEхранит последнее состояние для сравнения LED_AUTO_UPDATEкаждую секунду проверяет состояние KlipperLED_STATUSвызывается только при изменении состояния, чтобы избежать мерцания- При переходе Klipper в Shutdown из-за ошибки
shutdown_valueавтоматически управляет красным светом