Skip to content

Instantly share code, notes, and snippets.

@agravelot
Last active February 18, 2024 14:34
Show Gist options
  • Save agravelot/b064f98485bfbb08564c37db9d913378 to your computer and use it in GitHub Desktop.
Save agravelot/b064f98485bfbb08564c37db9d913378 to your computer and use it in GitHub Desktop.
Klicky-00 Magnet saver
# 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