Last active
February 18, 2024 14:34
-
-
Save agravelot/b064f98485bfbb08564c37db9d913378 to your computer and use it in GitHub Desktop.
Klicky-00 Magnet saver
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Klicky-00 Magnet saver | |
# Adapted from the Voron Tap Macro | |
# Written by Disord (@Nevax) | |
# If you add changes, please feel free to share them with me through private message :) | |
# Features: | |
# - Ensures temperature is below 150°C prior to attaching and utilizing probe | |
# - Specifies fan speed before attaching and utilizing probe | |
# - Reverts to previous temperature and fan speed only upon successful probe docking | |
# - Prevents setting a temperature above 150°C while attached | |
[gcode_macro _KLICKY_00_VARIABLES] | |
variable_max_probing_temp: 150 | |
variable_fan_temp: 50 | |
variable_fan_speed: 0.7 | |
variable_previous_saved: False | |
variable_previous_extruder_target: 0 | |
variable_previous_fan_speed: 0 | |
gcode: | |
[gcode_macro ATTACH_PROBE] | |
rename_existing: ATTACH_PROBE_BASE | |
gcode: | |
{% set MAX_TEMP = printer["gcode_macro _KLICKY_00_VARIABLES"].max_probing_temp|float %} | |
{% set FAN_TEMP = printer["gcode_macro _KLICKY_00_VARIABLES"].fan_temp|float %} | |
{% set ACTUAL_TEMP = printer.extruder.temperature|float %} | |
{% set TARGET_TEMP = printer.extruder.target|float %} | |
{% if not 'xy' in printer.toolhead.homed_axes %} | |
{action_raise_error("Must Home X and Y Axis First!")} | |
{% endif %} | |
_ON_ACTIVATE_PROBE | |
ATTACH_PROBE_BASE {rawparams} | |
[gcode_macro DOCK_PROBE] | |
rename_existing: DOCK_PROBE_BASE | |
gcode: | |
DOCK_PROBE_BASE {rawparams} | |
M400 ; ensure to get updated values, not sure if required | |
_POST_PROBE_DOCK ; run in seperate macro to have updated probe_attached value | |
[gcode_macro _POST_PROBE_DOCK] | |
gcode: | |
{% set probe_attached = printer["gcode_macro _Probe_Variables"].probe_attached %} | |
{% if not probe_attached %} | |
{% set previous_fan_speed = printer["gcode_macro _KLICKY_00_VARIABLES"].previous_fan_speed|default(0)|float %} | |
{% if previous_fan_speed > 0 %} | |
M106 S{previous_fan_speed * 255} ; restore fan speed | |
{% else %} | |
M107 ; stop fan | |
{% endif %} | |
{% set previous_extruder_target = printer["gcode_macro _KLICKY_00_VARIABLES"].previous_extruder_target|default(0)|float %} | |
{% if previous_extruder_target > 0 %} | |
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={previous_extruder_target} ; start hotend heater | |
{% endif %} | |
SET_GCODE_VARIABLE MACRO=_KLICKY_00_VARIABLES VARIABLE=previous_fan_speed VALUE={0} ; reset default fan speed | |
SET_GCODE_VARIABLE MACRO=_KLICKY_00_VARIABLES VARIABLE=previous_extruder_target VALUE={0} ; reset default | |
SET_GCODE_VARIABLE MACRO=_KLICKY_00_VARIABLES VARIABLE=previous_saved VALUE={False} ; reset default | |
{% endif %} | |
# safety against extruder temp change while klicky-00 is attached. | |
[gcode_macro SET_HEATER_TEMPERATURE] | |
rename_existing: SET_HEATER_TEMPERATURE_BASE | |
gcode: | |
{% set HEATER = params.HEATER|float %} | |
{% set TARGET = params.TARGET|float %} | |
{% set probe_attached = printer["gcode_macro _Probe_Variables"].probe_attached %} | |
{% if probe_attached and HEATER|lower == "extruder" and TARGET > 150 %} | |
{% if not 'xy' in printer.toolhead.homed_axes %} | |
{ action_raise_error("Target temp is above treshold with attached probe.") } | |
{% endif %} | |
DOCK_PROBE_UNLOCK BACK=1 | |
{% endif %} | |
SET_HEATER_TEMPERATURE_BASE {rawparams} | |
[gcode_macro _ON_ACTIVATE_PROBE] | |
description: Safety for klicky-00 magnet, must be triggered before any probe usage. | |
gcode: | |
{% set MAX_TEMP = printer["gcode_macro _KLICKY_00_VARIABLES"].max_probing_temp|float %} | |
{% set FAN_TEMP = printer["gcode_macro _KLICKY_00_VARIABLES"].fan_temp|float %} | |
{% set ACTUAL_TEMP = printer.extruder.temperature|float %} | |
{% set TARGET_TEMP = printer.extruder.target|float %} | |
{% if not printer["gcode_macro _KLICKY_00_VARIABLES"].previous_saved %} | |
SET_GCODE_VARIABLE MACRO=_KLICKY_00_VARIABLES VARIABLE=previous_extruder_target VALUE={printer['extruder'].target|float} | |
SET_GCODE_VARIABLE MACRO=_KLICKY_00_VARIABLES VARIABLE=previous_fan_speed VALUE={printer['fan'].speed|float} | |
SET_GCODE_VARIABLE MACRO=_KLICKY_00_VARIABLES VARIABLE=previous_saved VALUE={True} | |
{% endif %} | |
{% if TARGET_TEMP > FAN_TEMP or ACTUAL_TEMP > FAN_TEMP %} | |
{% set fan_speed = printer['gcode_macro _KLICKY_00_VARIABLES'].fan_speed|float %} | |
M106 S{fan_speed * 255} | |
{% endif %} | |
{% if TARGET_TEMP > MAX_TEMP %} | |
{ action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, MAX_TEMP)) } | |
M109 S{MAX_TEMP} | |
{% else %} | |
# Temperature target is already low enough, but nozzle may still be too hot. | |
{% if ACTUAL_TEMP > MAX_TEMP %} | |
{ action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) } | |
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={MAX_TEMP + 2} | |
{% endif %} | |
{% endif %} | |
[probe] | |
activate_gcode: | |
_ON_ACTIVATE_PROBE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment