Адресная лента для отображения статусов 3Д принтера
Адресная лента для отображения статусов 3Д принтера, прогресса печати, ошибок и т.д.
Вобщем увидел тут в одном из обзоров на Bambulab H2D, что на их принтерах используется светодиодная лента на передней части стола принтера, которая светится разными цветами в зависимости от состояния принтера и отображает прогресс печати. И захотелось сделать такую же.
Делается все на адресной ленте типа WS2812B. Ленты бывают с разным количеством светодиодов на метр. Я взял пожирнее 72св/м
Вообще для этого есть проект на GitHub klipper-led_effect, но он требует подключения ленты к свободному пину на материнской плате. На моем QIDI Q1 был только один такой пин, но подключение к нему эффекта не дало. Лента как то криво управлялась.
Поэтому на просторах интернета был найден проект WLED. Адресная лента здесь подключается к внешенему контроллеру ESP8266/ESP32 и полностью ей управляет. Есть веб интерфейс где можно настроить ленту и на лету менять эффекты. Так же можно управляеть лентой по различным протоколам HTTP, MQTT и т.д. И Moonraker принтера под клиппером тоже может управлять этой лентой
Чем понравилось это решение, что не надо лезть к основной плате и управление лентой не нагружает основной процессор принтера. И установить ее можно на любой принтер если у вас есть доступ к конфигам принтера.
Реализация
И так по порядку как все реализуется. Я взял ESP8266 в виде модуля WEMOS D1 MINI. Для ее питания от 24В БП принтера поставил понижайку с 24В до 5В. Для согласования уровня с ESP (3.3V) и ленты (5V) я поставил два инвентора микросхемы К155ЛН1, так как все равно валяются без дела. Но можно сделать и по такой схеме
Идем на сайт онлайн установщика WLED https://wled-install.github.io/ или https://install.wled.me/ ( уменя сработал первый, второй почему то не захотел). Выбираем тип своей платы (wemos d1 mini), подключаем ее к компьютеру, выбираем COM порт под которым определилась плата. И прошиваем.
После перезагрузки плата создасть точку доступа WLED-AP. Необходимо к ней подключиться, через браузер зайти в веб интерфейс платы. Перейти в настройки WIFI и подключить ее к своей сети. Там же в настройках перейти в раздел LED и настроить свою ленту. Нужно выбрать тип светодиодов, номер пина ESP к которому вы ее подключили и количество светодиодов в вашем отрезке. Вот мои настройки
Теперь в основном окне уже можно потыкать в радугу и лента должна светиться выбраным цветом. там же можно выбирать эффекты. С правой стороны будут отображаться ваши сохраненные пресеты.
Нам нужно создать персеты для каждого состояния принтера которое мы хотим отображать.
Вот мои пресеты
Настройка принтера
Через браузер заходим на наш принтер. Переходим в раздел "Система". Нам нужно отредактировать конфиг moonraker.conf. Открываем его и добавляем следующее:
[wled wled_bed] type: http address: 192.168.1.93 #IP адрес вашей ESP в сети initial_red: 0.0 initial_green: 1.0 initial_blue: 0.0 chain_count: 37 #количество светодиодов в ленте
Теперь нужно добавить макросы для управления лентой. Я рекомендую создать отдельный файл в папке конфигов и там делать все манипуляции, что бы ваши макросы не мешались с основными макросами системы. Да и банально проще так оринетироваться. Я создал файл wled.conf. Что бы Клиппер его подтянул, добавте в ваш printer.cfg следущие строки
[include wled.cfg]
Теперь открываем наш wled.cfg и создаем макросы. Можно сделать макросы как рекомендуют на Moonraker и макросом SET_WLED вы уже из консоли принтера можете управлять лентой
[gcode_macro SET_WLED]
description: SET_LED like functionality for WLED, applies to all active segments
gcode:
{% set strip = params.STRIP|string %}
{% set red = params.RED|default(0)|float %}
{% set green = params.GREEN|default(0)|float %}
{% set blue = params.BLUE|default(0)|float %}
{% set white = params.WHITE|default(0)|float %}
{% set index = params.INDEX|default(-1)|int %}
{% set transmit = params.TRANSMIT|default(1)|int %}
{action_call_remote_method("set_wled",
strip=strip,
red=red, green=green, blue=blue, white=white,
index=index, transmit=transmit)}Например если отдадите команду
SET_WLED GREEN=1 RED=1 BLUE=1 TRANSMIT=1
То ваша лента вся загорится белым цветом. Парметры GREEN, RED, BLUE принимают значения от 0.0 до 1.0. 0 соответствует выключенному состоянию, 1 - включенному на максимальную яркость.
Макрос WLED_ON включает выбраный пресет
По команде:
WLED_ON PRESET=1
Включится пресет с ID=1
Ниже я привожу свои макросы которые сделал я для отображения нужных мне эфеектов
Макрос управления светодиодами по их индексу
[gcode_macro WLED_SET]
description: SET_LED like functionality for WLED, applies to all active segments
gcode:
{% set strip = params.STRIP|default('wled_bed')|string %}
{% set red = params.RED|default(0)|float %}
{% set green = params.GREEN|default(0)|float %}
{% set blue = params.BLUE|default(0)|float %}
{% set white = params.WHITE|default(0)|float %}
{% set index = params.INDEX|default(-1)|int %}
{% set transmit = params.TRANSMIT|default(1)|int %}
#{% set preset = params.PRESET|default(2)|int %}
{action_call_remote_method("set_wled",
strip=strip,
red=red, green=green, blue=blue, white=white,
index=index, transmit=transmit)}Макрос включения выбранного пресета
[gcode_macro UPDATE_WLED]description: update wled stategcode: {% set PRESET = params.PRESET | default(None) | string %} {% if PRESET == 'HEATING' %} {% set PRESET_NUM = 25 | int %} #25 и цифры далее это ID пресета.Здесь ID=25 соответствует пресету с именем HEATING {% elif PRESET == 'HEATING_HOT' %} {% set PRESET_NUM = 9 | int %} {% elif PRESET == 'HEATING_LEVEL1' %} {% set PRESET_NUM = 7 | int %} {% elif PRESET == 'HEATING_LEVEL2' %} {% set PRESET_NUM = 8 | int %} {% elif PRESET == 'HEATING_COLD' %} {% set PRESET_NUM = 6 | int %} {% elif PRESET == 'PAUSE' %} {% set PRESET_NUM = 1 | int %} {% elif PRESET == 'CANCEL' %} {% set PRESET_NUM = 2 | int %} {% elif PRESET == 'COMPLETE' %} {% set PRESET_NUM = 5 | int %} {% elif PRESET == 'HOMING' %} {% set PRESET_NUM = 3 | int %} {% elif PRESET == 'IDLE' %} {% set PRESET_NUM = 4 | int %} {% elif PRESET == 'RESUME' %} {% set PRESET_NUM = 20 | int %} {% elif PRESET == 'READY' %} {% set PRESET_NUM = 22 | int %} {% elif PRESET == 'ERROR' %} {% set PRESET_NUM = 23 | int %} {% endif %} {action_call_remote_method("set_wled_state", strip='wled_bed', state=True, preset=PRESET_NUM)}Макрос отвечающий за отображения прогресса печати
#Update WLED preset based on print progress[gcode_macro _WLED_PROGRESS]gcode: {% set progress = (printer.display_status.progress * 100) | int %} {% set green = (printer.display_status.progress * 37) | round | int %} {% set white_beginning = (green + 1) | int %} {% set white_end = 37 | int %} {% if green == 37 %} WLED_SET GREEN=1 {% else %} WLED_SET GREEN=1 RED=1 BLUE=1 TRANSMIT=0 {% for index in range(green|int) %} {% if (green-1) > index %} WLED_SET GREEN=1 INDEX={(index+1)} TRANSMIT=0 {% else %} WLED_SET GREEN=1 INDEX={(index+1)} TRANSMIT=1 {% endif %} {% endfor %} {% endif %} M118 Прогресс печати: {progress} % Для переодического обновления ленты используется отложенный макрос который сам себя перезапускает
#Update WLED preset based on heating
[delayed_gcode WLED_STATUS]
initial_duration: 5
gcode:
{% set CURRENT_TEMP = printer.heater_bed.temperature|float %}
{% set SET_TEMP = printer['heater_bed'].target|float %}
{% set STATUS = printer.print_stats.state|string %}
{% if SET_TEMP == 0 and STATUS == 'standby' %} #В режиме простоя принтер будет включать пресеты в зависимости от нагрева стола. Тем самым сигнализируя, что стол еще горячий
{% if CURRENT_TEMP > 60 %}
UPDATE_WLED PRESET=HEATING_HOT
{% elif 60 > CURRENT_TEMP > 40 %}
UPDATE_WLED PRESET=HEATING_LEVEL2
{% else %}
UPDATE_WLED PRESET=IDLE
{% endif %}
{% elif STATUS == 'standby' %} #Если будет задана температура нагрева стола будут поочери в зависимости от заданной температуры по мере прогрева включатся пресеты холодного стола, горячего стола и два уровня прормежуточных
{% if CURRENT_TEMP >= (SET_TEMP - 1) %}
UPDATE_WLED PRESET=HEATING_HOT
{% elif CURRENT_TEMP > 3 * (SET_TEMP / 4) %}
UPDATE_WLED PRESET=HEATING_LEVEL2
{% elif CURRENT_TEMP > 2 * (SET_TEMP / 4) %}
UPDATE_WLED PRESET=HEATING_LEVEL1
{% elif CURRENT_TEMP < 2 * (SET_TEMP / 4) %}
UPDATE_WLED PRESET=HEATING_COLD
{% endif %}
{% elif STATUS == 'printing' %} #В процессе печати запускается макрос прогресса печати
_WLED_PROGRESS
{% elif STATUS == 'paused' %} #Запуск пресета паузы
UPDATE_WLED PRESET=PAUSE
{% elif STATUS == 'error' %}
UPDATE_WLED PRESET=ERROR #Запуск пресета ошибки
{% elif STATUS == 'complete' %}
UPDATE_WLED PRESET=COMPLETE
{% endif %}
UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=5 # Перезапуск макроса каждые 5секТеперь нужно в файл macros.cfg добавить строки для запуска тех пересетов которые не отрабатываются переодическим макросом
Команда G28 (HOME). В начале секции добавить:
[gcode_macro G28]gcode: UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=0 # Эта команда останавливает наш переодический макрос, что бы он не переключал на пресет который включается ниже UPDATE_WLED PRESET=HOMING
В конце:
UPDATE_WLED PRESET=READY UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=1 # Тут мы опять запускаем наш переодический макрос
В конце секции PRINT_START вставить
UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=5
В начале секции RESUME
UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=0 UPDATE_WLED PRESET=RESUME
В конце секции
UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=1
В начале секции CANCEL_PRINT
UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=0 UPDATE_WLED PRESET=CANCEL
В конце секции
UPDATE_DELAYED_GCODE ID=WLED_STATUS DURATION=1
Ну и в конце немного видео с некоторыми эфектами Нагрев, Прогресс печати, Загрузка, Парковка осей
Еще больше интересных статей
Как я собирал IDEX и все ошибки
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Создание и считывание своих меток NFC для базы данных катушек SPOOLMAN
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Данный проект реализует считывание NFC меток типа NTAG2xx установле...
Настраиваем прошивку Marlin и заливаем её в 3D принтер
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.




Комментарии и вопросы
Деформация конструкции, да ещё...
Тоже мечтаю об IDEX принтере
Однако локалка это сила, но эт...
Поскажите пожалуйста с чем мож...
Коллеги, вдруг кто подскажет....
Добрый день принтер Creality E...
3D Принтер Tronxy xy 2pro не о...