Дистанционное управление питанием 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]
Установка модуля в принтер
Для модуля реле я смоделировал и напечатал простой корпус. Спаял на макетную плату разъемы и резистор.
В итоге получилось так. Реле и новая кнопка на блоке питания выглядят аккуратно. После такого улучшения работать с принтером стало гораздо удобнее.
Еще больше интересных статей
Застрял филамент в 3D ручке
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Проверка улучшения от Bondtech, k1/k1c upgrade kit
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Наконец у меня дошли руки поставить набор улучшений от Bondtech на при...
Собираем 3D-принтер своими руками. Пошаговая инструкция. Часть 1.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Как уже анонсировал Серега, я начинаю публиковать цикл статей по сборк...
Комментарии и вопросы
еще C51 из того, что на слуху....
А детальку что сваял выложить....
Все не правда! Инфоцигане! Фот...
Могу ли я использовать 646 для...
Всем привет, вчера как снег на...
Приветствую уважаемое сообщест...
Стандартные настройки под пров...