Дистанционное управление питанием 3D-принтера. Настройка Klipper и BTT Relay
Хочу поделиться способом, который позволяет управлять питанием 3D-принтера: включать и выключать его, как дистанционно, так и с помощью физической кнопки. Я использовал Bigtreetech Relay v1.2 и принтер под управлением прошивки Klipper.
После установки реле в принтер я хотел получить возможность включать и выключать принтер дистанционно дополнительно к привычному физическому переключателю. Но описанные в интернете способы не позволяли сделать этого. При использовании каждого из найденных вариантов приходилось чем-то жертвовать. Например, включение осуществлялось только нажатием физической кнопки, а выключение только дистанционно - с помощью макроса. Мне не хотелось идти на этот компромисс.
Принцип работы BTT Relay
Реле имеет 2 основных управляющих пина: PowerDetect и Reset.
- PowerDetect - Сигнал от MCU, с помощью которого реле понимает, работает ли сейчас принтер. Высокий сигнал говорит о том, что необходимо оставить реле замкнутым. После обнаружения низкого уровня и по истечении таймаута (около 10 секунд) реле разомкнет цепь.
- Reset - Сброс реле. После сброса реле замыкается, дальше все зависит от уровня на PowerDetect. Либо цепь останется замкнутой, либо разомкнется по истечении таймаута.
Два основных способа, которые я нашел в интернете, работали следующим образом:
- К Reset подключается физическая кнопка, при нажатии на которую реле будет замыкать цепь. PowerDetect подключается к MCU. Тогда выключение будет происходить после подачи низкого уровня на этот пин. Например, после выполнения макроса или с помощью специального пункта в меню.
- Reset подключается к пину хоста. Тогда включать принтер можно будет дистанционно, например, переключателем в веб-интерфейсе. PowerDetect подключается так же, как в первом способе.
Схема подключения
Моя идея заключается в том, чтобы подключить Reset одновременно к физической кнопке и пину хоста (Host_Out). Тогда можно будет включать принтер как по кнопке, так и дистанционно.
Еще один пин хоста (Host_In) в режиме входа будет отслеживать нажатие этой физической кнопки. С помощью него можно будет реагировать на нажатие кнопки при включенном принтере и подать сигнал на выключение.
В итоге получилась такая схема подключения. Резистор добавлен, чтобы избежать короткого замыкания. Например, Host_Out установлен в 0, тогда при нажатии кнопки происходит КЗ между Relay_5V и Host_Out.
Сначала я проверил схему на прототипе :) Все работает!
Конфигурация прошивки
Выходной пин PowerDetect и макрос для выключения принтера настраиваются так.
[output_pin power_detect] pin: PE1 value: 1 shutdown_value: 0 [gcode_macro SHUTDOWN_PRINTER] gcode: SET_PIN PIN=power_detect VALUE=0
Пин Host_Out нужно добавить в файл moonraker.conf. После этого в меню питания в веб-интерфейсе появится новый переключатель.
[power Reset relay] type: gpio pin: gpiochip1/gpio11 off_when_shutdown: True locked_while_printing: True
Пин Host_In настроил как кнопку. Указанный G-Code будет вызываться, когда нажимаем физическую кнопку или Reset relay в веб-интерфейсе. В обработчике нажатия перевожу переключатель в веб-интерфейсе в выключенное состояние и вызываю макрос отключения принтера.
[gcode_button power_button]
pin: host:gpiochip1/gpio9
press_gcode:
{action_call_remote_method("set_device_power",device="Reset relay",state="off")}
SHUTDOWN_PRINTERВажно, что положение переключателя Reset relay в веб-интерфейсе не говорит, подается ли сейчас питание на принтер. Этот переключатель соединен именно с пином сброса реле. То есть для включения принтера необходимо кратковременно замкнуть его. Очень легко забыть вернуть переключатель в выключенное состояние, да и вообще это не удобно. Поэтому я добавил G-Code, который будет делать это автоматически.
Макрос запускается при инициализации Klipper. В нем переключатель питания переводится в выключенное состояние. Также при включении Klipper будет срабатывать G-Code для кнопки, потому что на Host_In подается высокий сигнал. Из-за этого в обработчике нажатия на кнопку PowerDetect установиться в ноль - нужно вернуть его в единицу.
[delayed_gcode init_reset_relay]
initial_duration: 1
gcode:
{action_call_remote_method("set_device_power",device="Reset relay",state="off")}
SET_PIN PIN=power_detect VALUE=1Автовыключение в состоянии простоя
Еще хотелось, чтобы принтер автоматически выключался, если им не пользуются определенное время.
Для этого я использовал встроенный в Klipper механизм idle_timeout. Принтер может находиться в одном из трех состояний: Idle, Printing, Ready. В конфигурации можно задать время, по истечении которого будет осуществлен переход из состояния Ready в Idle, при этом также вызовется пользовательский G-Code.
Можно просто выключать принтер при переходе в состояние Idle. В стандартной конфигурации выключаются нагреватели (TURN_OFF_HEATERS) и моторы (M84).
[idle_timeout] timeout: 600 gcode: TURN_OFF_HEATERS M84 SHUTDOWN_PRINTER
Но я решил немного улучшить механизм - выключать питание, только если температура экструдера меньше 80 градусов. Для этого используется delayed_gcode - специальный макрос, который выполняется не сразу, а через указанное время.
Если температура экструдера меньше порогового значения, то принтер отключается. Если больше - в очередь добавляется еще один вызов этого макроса через одну минуту.
[delayed_gcode check_need_shutdown]
gcode:
{% if (printer.idle_timeout.state == "Idle") %}
{% if (printer.extruder.temperature < 80) %}
SHUTDOWN_PRINTER
{% else %}
UPDATE_DELAYED_GCODE ID=check_need_shutdown DURATION=60
{% endif %}
{% endif %}По истечении idle_timeout запускается алгоритм проверки температуры экструдера. В DURATION нельзя указывать 0, потому что это значение используется для удаления указанного макроса из очереди.
[idle_timeout] timeout: 600 gcode: TURN_OFF_HEATERS M84 UPDATE_DELAYED_GCODE ID=check_need_shutdown DURATION=1
Telegram-бот
Принтер можно включать и выключать через Telegram-бота. Название Device для сброса реле (из moonraker.conf) необходимо добавить в конфигурацию.
[bot] power_device: Reset relay
В чате нужно будет использовать команду /power для включения. Для выключения - название соответствующего макроса. Можно добавить их в клавиатуру с командами бота.
[telegram_ui] buttons: <какие-то другие команды>,[power,shutdown_printer]
Установка модуля в принтер
Для модуля реле я смоделировал и напечатал простой корпус. Спаял на макетную плату разъемы и резистор.
В итоге получилось так. Реле и новая кнопка на блоке питания выглядят аккуратно. После такого улучшения работать с принтером стало гораздо удобнее.
Еще больше интересных статей
Сушилка для PPS или умная печка для сушки филамента
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
В прошлом году по стечению обстоятельств обзавелся большим принтером с...
Creality K1 SE - Отвод нагретого в БП воздуха из отсека электроники.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Настраиваем прошивку Marlin и заливаем её в 3D принтер
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.







Комментарии и вопросы
Зачем отсюда в свой телеграм з...
Ну ты прям политикой Гаранта и...
Снизить надо цену на пластик п...
3д моделированием и печатью за...
В данный момент я занимаюсь из...
Flashforge AD5M Pro, PETG, соп...
Всем доброго дня! Приобрел Лет...