######################################################################################################################## # Happy Hare MMU Software # # EDIT THIS FILE BASED ON YOUR SETUP # # Copyright (C) 2022-2025 moggieuk#6538 (discord) # moggieuk@hotmail.com # This file may be distributed under the terms of the GNU GPLv3 license. # # Goal: Happy Hare supporting MACRO configuration # # (\_/) # ( *,*) # (")_(") Happy Hare Ready # # # Supporting set of macros supplied with Happy Hare can be customized by editing the macro "variables" declared here. # # This configuration will automatically retained and upgraded between releases (a backup of previous config files will # always be made for your reference). If you want to customize macros beyond what is possible through these variables # it is highly recommended you copy the macro to a new name and change the callback macro name in 'mmu_parameters.cfg' # That way the default macros can still be upgraded but your customization will be left intact # # PERSISTED STATE --------------------------------------------------------- # Happy Hare stores configuration and state in the klipper variables file. # Since klipper can only be a single 'save_variables' file, if you already # have one you will need to merge the two and point this appropriately. # [save_variables] filename: ~/printer_data/config/mmu/mmu_vars.cfg # NECESSARY KLIPPER OVERRIDES --------------------------------------------- # ██╗ ██╗██╗ ██╗██████╗ ██████╗ ███████╗██████╗ # ██║ ██╔╝██║ ██║██╔══██╗██╔══██╗██╔════╝██╔══██╗ # █████╔╝ ██║ ██║██████╔╝██████╔╝█████╗ ██████╔╝ # ██╔═██╗ ██║ ██║██╔═══╝ ██╔═══╝ ██╔══╝ ██╔══██╗ # ██║ ██╗███████╗██║██║ ██║ ███████╗██║ ██║ # ╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ # # These supplemental settings essentially disable klipper's built in # extrusion limits and is necessary when using an MMU [extruder] max_extrude_only_distance: 200 max_extrude_cross_section: 50 # For dialog prompts and progress in Mainsail. Requires Mainsail version >= v2.9.0 [respond] # Other Happy Hare prerequisites. Harmless if already defined elsewhere in user config [display_status] [pause_resume] [virtual_sdcard] path: ~/printer_data/gcodes #on_error_gcode: CANCEL_PRINT # PRINT START/END --------------------------------------------------------- # ██████╗ ██████╗ ██╗███╗ ██╗████████╗ ███████╗████████╗ █████╗ ██████╗ ████████╗ # ██╔══██╗██╔══██╗██║████╗ ██║╚══██╔══╝ ██╔════╝╚══██╔══╝██╔══██╗██╔══██╗╚══██╔══╝ # ██████╔╝██████╔╝██║██╔██╗ ██║ ██║ ███████╗ ██║ ███████║██████╔╝ ██║ # ██╔═══╝ ██╔══██╗██║██║╚██╗██║ ██║ ╚════██║ ██║ ██╔══██║██╔══██╗ ██║ # ██║ ██║ ██║██║██║ ╚████║ ██║ ███████║ ██║ ██║ ██║██║ ██║ ██║ # ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ # (base/mmu_software.cfg) # [gcode_macro _MMU_SOFTWARE_VARS] description: Happy Hare optional configuration for print start/end checks gcode: # Leave empty # These variables control the behavior of the MMU_START_SETUP and MMU_START_LOAD_INITIAL_TOOL macros variable_user_pre_initialize_extension : '' ; Executed at start of MMU_START_SETUP. Commonly G28 to home variable_home_mmu : False ; True/False, Whether to home mmu before print starts variable_check_gates : True ; True/False, Whether to check filament is loaded in all gates used variable_load_initial_tool : True ; True/False, Whether to automatically load initial tool # # Automapping strategy to apply slicer tool map to find matching MMU gate (will adjust tool-to-gate map). Options are: # 'none' - don't automap (i.e. don't update tool-to-gate map) # 'filament_name' - exactly match on case insensitive filament name # 'material' - exactly match on material # 'color' - exactly match on color (with same material) # 'closest_color' - match to closest available filament color (with same material) # 'spool_id' - exactly match on spool_id [FUTURE] variable_automap_strategy : "none" ; none|filament_name|material|color|closest_color|spool_id # These variables control the behavior of the MMU_END macro variable_user_print_end_extension : '' ; Executed at start of MMU_END. Good place to move off print variable_unload_tool : True ; True/False, Whether to unload the tool at the end of the print variable_reset_ttg : False ; True/False, Whether reset TTG map at end of print variable_dump_stats : True ; True/False, Whether to display print stats at end of print # STATE MACHINE CHANGES --------------------------------------------------- # ███████╗████████╗ █████╗ ████████╗███████╗ ██████╗██╗ ██╗ █████╗ ███╗ ██╗ ██████╗ ███████╗ # ██╔════╝╚══██╔══╝██╔══██╗╚══██╔══╝██╔════╝ ██╔════╝██║ ██║██╔══██╗████╗ ██║██╔════╝ ██╔════╝ # ███████╗ ██║ ███████║ ██║ █████╗ ██║ ███████║███████║██╔██╗ ██║██║ ███╗█████╗ # ╚════██║ ██║ ██╔══██║ ██║ ██╔══╝ ██║ ██╔══██║██╔══██║██║╚██╗██║██║ ██║██╔══╝ # ███████║ ██║ ██║ ██║ ██║ ███████╗ ╚██████╗██║ ██║██║ ██║██║ ╚████║╚██████╔╝███████╗ # ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝ # (base/mmu_state.cfg) # [gcode_macro _MMU_STATE_VARS] description: Happy Hare configuration for state change hooks gcode: # Leave empty # You can extend functionality to all Happy Hare state change or event # macros by adding a command (or call to your gcode macro). # E.g for additional LED logic or consumption counters variable_user_action_changed_extension : '' ; Executed after default logic with duplicate params variable_user_print_state_changed_extension : '' ; Executed after default logic with duplicate params variable_user_mmu_event_extension : '' ; Executed after default logic with duplicate params # Maintenance warning limits (consumption counters) variable_servo_down_limit : 5000 ; Set to -1 for no limit / disable warning variable_cutter_blade_limit : 3000 ; Set to -1 for no limit / disable warning # LED CONTROL ------------------------------------------------------------- # ██╗ ███████╗██████╗ ███████╗ # ██║ ██╔════╝██╔══██╗██╔════╝ # ██║ █████╗ ██║ ██║███████╗ # ██║ ██╔══╝ ██║ ██║╚════██║ # ███████╗███████╗██████╔╝███████║ # ╚══════╝╚══════╝╚═════╝ ╚══════╝ # Only configure if you have LEDs installed. The led_effects option is # automatically ignored if led-effects klipper module is not installed # (base/mmu_led.cfg) # [gcode_macro _MMU_LED_VARS] description: Happy Hare led macro configuration variables gcode: # Leave empty # Default effects for LED segments when not providing action status # 'off' - LED's off # 'on' - LED's white # 'gate_status' - indicate gate availability / status (printer.mmu.gate_status) # 'filament_color' - display filament color defined in gate map (printer.mmu.gate_color_rgb) # 'slicer_color' - display slicer defined set color for each gate (printer.mmu.slicer_color_rgb) # 'r,g,b' - display static r,g,b color e.g. "0,0,0.3" for dim blue # '_effect_' - display the named led effect # variable_led_enable : True ; True = LEDs are enabled at startup (MMU_LED can control), False = Disabled variable_led_animation : True ; True = Use led-animation-effects, False = Static LEDs variable_default_exit_effect : "gate_status" ; off|gate_status|filament_color|slicer_color|r,g,b|_effect_ variable_default_entry_effect : "filament_color" ; off|gate_status|filament_color|slicer_color|r,g,b|_effect_ variable_default_status_effect : "filament_color" ; on|off|gate_status|filament_color|slicer_color|r,g,b|_effect_ variable_default_logo_effect : "0,0,.3" ; off |r,g,b|_effect_ variable_white_light : (1, 1, 1) ; RGB color for static white light variable_black_light : (.01, 0, .02) ; RGB color used to represent "black" (filament) variable_empty_light : (0, 0, 0) ; RGB color used to represent empty gate # SEQUENCE MACRO - PARKING MOVEMENT AND TOOLCHANGE CONTROL ---------------- # ███╗ ███╗ ██████╗ ██╗ ██╗███████╗███╗ ███╗███████╗███╗ ██╗████████╗ # ████╗ ████║██╔═══██╗██║ ██║██╔════╝████╗ ████║██╔════╝████╗ ██║╚══██╔══╝ # ██╔████╔██║██║ ██║██║ ██║█████╗ ██╔████╔██║█████╗ ██╔██╗ ██║ ██║ # ██║╚██╔╝██║██║ ██║╚██╗ ██╔╝██╔══╝ ██║╚██╔╝██║██╔══╝ ██║╚██╗██║ ██║ # ██║ ╚═╝ ██║╚██████╔╝ ╚████╔╝ ███████╗██║ ╚═╝ ██║███████╗██║ ╚████║ ██║ # ╚═╝ ╚═╝ ╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ # Configure carefully if you 'enable_park: True' # (base/mmu_sequence.cfg) # [gcode_macro _MMU_SEQUENCE_VARS] description: Happy Hare sequence macro configuration variables gcode: # Leave empty # Parking and movement controls: # Happy Hare defines 7 operations that may require parking. You can specify # whether to park for each of those operations both during a print and # standalone (not printing) with Happy Hare or when HH is disabled: # # enable_park_printing # This is a list of the operations that should result in toolhead parking # while in a print. There are really two main starting points from which # you can customize. If using the slicer to form tips (and toolchange is # over the wipetower) you don't want to park on "toolchange" but you would # want to on "runout" which is a forced toolchange unknown by the slicer. # Typically you would also want to park at least on pause, cancel and # complete if not done elsewhere # # enabled_park_standalone # List of the operations that should result in toolhead parking when not # printing, for example, just manipulating the MMU manually or via # Klipperscreen. Really it is up to you to choose based on personal # workflow preferences but this defaults to just 'pause,cancel' # (i.e. disabled for toolchange) # # enabled_park_disabled # List of the operations that should result in toolhead parking when MMU is # disabled (MMU ENABLE=0) and using Happy Hare client macros. Note that only # pause and cancel can occur in this mode and would typically be enabled # # The operations are as follows: # toolchange - normal toolchange initiated with Tx or MMU_CHANGE_TOOL command # runout - when a forced toolchange occurs as a result of runout # load - individual MMU_LOAD operation # unload - individual MMU_UNLOAD/MMU_EJECT operation # complete - when print is complete (Happy Hare enabled) # pause - a regular klipper PAUSE # cancel - a regular klipper CANCEL_PRINT # # It is possible to call the parking macro manually in this form should you wish # to include in your macros. # # _MMU_PARK FORCE_PARK=1 X=10 Y=10 Z_HOP=5 # # restore_xy_pos # Controls where the toolhead (x,y) is returned to after an operation that # invokes a parking move: # last - return to original position before park (frequently the default) # next - return to next print position if possible else last logic will be applied. # In print this reduces dwell time at the last position reducing blobbing # and unnecessary movement. Only applied to "toolchange" operation # none - the toolhead is left wherever it ends up after change. In a print the # next gcode command will restore toolhead x,y position # # Notes: # - The starting z-height will always be restored, thus the different between 'next' # and 'none' is the z-height at which the (x,y) move occurs and the location of # of any un-retract # - The default parking logic is a straight line move to the 'park_*' position. # To implement fancy movement and control you can specify your own # 'user_park_move_macro' to use instead of default straight line move # # Retraction can be used to optimize stringing and blobs that can occur when # changing tools and are active only during a print. # IMPORTANT: For toolchanging the config order would be: # 1. In mmu_parameters.cfg configure extruder dimensions like # 'toolhead_extruder_to_nozzle',etc. These are based on geometry. # 2. In mmu_parameters.cfg tweak 'toolhead_ooze_reduction' only if necessary # so that filament _just_ appears at the nozzle on load # 3. Only then, adjust retraction to control stringing and blobs when # changing tool in a print variable_enable_park_printing : 'toolchange,runout,load,unload,complete,pause,cancel' ; Empty '' to disable parking variable_enable_park_standalone : 'toolchange,load,unload,pause,cancel' ; Empty '' to disable parking variable_enable_park_disabled : 'pause,cancel' ; Empty '' to disable parking variable_min_toolchange_z : 1.0 ; The absolute minimum safety floor (z-height) for ALL parking moves # These specify the parking location, z_hop and retraction for all enabled operation # types. Each must be 5 values: # x_coord, y_coord, z_hop(delta), z_hop_ramp, retraction length # Use -1,-1 for no x,y move (you can just have z_hop). Use 0 for no z_hop # The z_hop ramp is the horizontal distance in mm to travel during the lift. The # direction is automatic and only applied if lifting the first time from print. # This move is useful to help break the filament "string" variable_park_toolchange : -1, -1, 1, 5, 2 ; x,y,z-hop,z_hop_ramp,retract for "toolchange" operations (toolchange,load,unload) variable_park_runout : -1, -1, 1, 5, 2 ; x,y,z-hop,z_hop_ramp,retract variable_park_pause : 50, 50, 5, 0, 2 ; x,y,z-hop,z_hop_ramp,retract (park position when mmu error occurs) variable_park_cancel : -1, -1, 10, 0, 5 ; x,y,z-hop,z_hop_ramp,retract variable_park_complete : 50, 50, 10, 0, 5 ; x,y,z-hop,z_hop_ramp,retract # For toolchange operations, this allows to you to specify additional parking moves # at various stages of the toolchange. Each must have 3 values: # x_coord, y_coord, z_hop(delta) # Use -1,-1,0 for no movement at that stage (no-op). # All movement will be at the established movement plane (z-height) variable_pre_unload_position : -1, -1, 0 ; x,y,z-hop position before unloading starts variable_post_form_tip_position : -1, -1, 0 ; x,y,z-hop position after form/cut tip on unload variable_pre_load_position : -1, -1, 0 ; x,y,z-hop position before loading starts variable_restore_xy_pos : "last" ; last|next|none - What x,y position the toolhead should travel to after a "toolchange" variable_park_travel_speed : 200 ; Speed for any travel movement XY(Z) in mm/s variable_park_lift_speed : 15 ; Z-only travel speed in mm/s variable_retract_speed : 30 ; Speed of the retract move in mm/s variable_unretract_speed : 30 ; Speed of the unretract move in mm/s # ADVANCED: Normally x,y moves default to 'G1 X Y' to park position. This allows # you to create exotic movements. Macro will be provided the following parameters: # YOUR_MOVE_MACRO X= Y= F= # when restoring the from parked postion the same macro is called but passed a RESTORE=1 parameter, along with co-ordinates to restore to # YOUR_MOVE_MACRO RESTORE=1 X= Y= F= variable_user_park_move_macro : '' ; Executed instead of default 'G1 X Y move' to park position variable_auto_home : True ; True = automatically home if necessary, False = disable variable_timelapse : False ; True = take frame snapshot after load, False = disable # Instead of completely defining your your own macros you can can extend functionality # of default sequence macros by adding a command (or call to your gcode macro) variable_user_mmu_error_extension : '' ; Executed after default logic when mmu error condition occurs variable_user_pre_unload_extension : '' ; Executed after default logic variable_user_post_form_tip_extension : '' ; Executed after default logic variable_user_post_unload_extension : '' ; Executed after default logic variable_user_pre_load_extension : '' ; Executed after default logic variable_user_post_load_extension : '' ; Executed after default logic but before restoring toolhead position # CUT_TIP ----------------------------------------------------------------- # ██████╗██╗ ██╗████████╗ ████████╗██╗██████╗ # ██╔════╝██║ ██║╚══██╔══╝ ╚══██╔══╝██║██╔══██╗ # ██║ ██║ ██║ ██║ ██║ ██║██████╔╝ # ██║ ██║ ██║ ██║ ██║ ██║██╔═══╝ # ╚██████╗╚██████╔╝ ██║ ██║ ██║██║ # ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ # Don't need to configure if using tip forming # (base/mmu_cut_tip.cfg) # [gcode_macro _MMU_CUT_TIP_VARS] description: Happy Hare toolhead tip cutting macro configuration variables gcode: # Leave empty # Whether the toolhead tip cutting macro will return toolhead to initial position # after the cut is complete. If using parking logic it is better to disable this variable_restore_position : False ; True = return to initial position, False = don't return # Distance from the internal nozzle tip to the cutting blade. This dimension # is based on your toolhead and should not be used for tuning # Note: If you have a toolhead sensor this variable can be automatically determined! # Read https://github.com/moggieuk/Happy-Hare/wiki/Blobing-and-Stringing variable_blade_pos : 37.5 ; TUNE ME: Distance in mm from internal nozzle tip # Distance to retract prior to making the cut, measured from the internal nozzle # tip. This reduces wasted filament (left behind in extruder) but might cause a # clog if set too large. This must be less than 'blade_pos' # Note: the residual filament left in nozzle ('toolhead_ooze_reduction') is # subtracted from this value so make sure toolhead is calibrated variable_retract_length : 32.5 ; TUNE ME: 5mm less than 'blade_pos' is a good starting point # Whether to perform a simple tip forming move after the initial retraction # Enabling this adds gives some additional cooling time of molten filament and # may help avoid potential clogging on some hotends variable_simple_tip_forming : True ; True = Perform simple tip forming, False = skip # This should be the position of the toolhead where the cutter arm just # lightly touches the depressor pin variable_cutting_axis : "x" ; "x" or "y". Determines cut direction (axis) during cut motion, used for park distance variable_pin_loc_xy : 14, 250 ; x,y coordinates of depressor pin # This distance is added to "pin_loc_x" or "pin_loc_y" depending on the 'cutting_axis' # to determine the starting position and to create a small safety distance that aids # in generating momentum variable_pin_park_dist : 5.0 ; Distance in mm # Position of the toolhead when the cutter is fully compressed. Should leave a small headroom from the # extremes of your printer edges (e.g. it should be a bit larger than 0, or whatever Xmin is) to avoid # banging the toolhead or gantry. Typically x position will match x in pin_loc_xy if cutting in y direction # or y position will match y in pin_loc_xy if cutting in x direction, but diagonal cuts are possible variable_pin_loc_compressed_xy : 0.5, 250 ; x,y coordinates of fully depressed location # Retract length and speed after the cut so that the cutter blade doesn't # get stuck on return to origin position variable_rip_length : 1.0 ; Distance in mm to retract to aid lever decompression (>= 0) variable_rip_speed : 3 ; Speed mm/s # Pushback of the remaining tip from the cold end into the hotend. This does # not have to push back all the way, just sufficient to ensure filament fragment # stays in hot end and the "nail head" of the cut is pushed back past the # PTFE/metal junction so it cannot cause clogging problems on future loads. # Cannot be larger than 'retract_length' - `toolhead_ooze_reduction` variable_pushback_length : 15.0 ; TUNE ME: PTFE tube length + 3mm is good starting point variable_pushback_dwell_time : 0 ; Time in ms to dwell after the pushback # Speed related settings for tip cutting # Note that if the cut speed is too fast, the steppers can lose steps. # Therefore, for a cut: # - We first make a fast move to accumulate some momentum and get the cut # blade to the initial contact with the filament # - We then make a slow move for the actual cut to happen variable_travel_speed : 150 ; Speed mm/s variable_cut_fast_move_speed : 32 ; Speed mm/s variable_cut_slow_move_speed : 8 ; Speed mm/s variable_evacuate_speed : 150 ; Speed mm/s variable_cut_dwell_time : 50 ; Time in ms to dwell at the cut point variable_cut_fast_move_fraction : 1.0 ; Fraction of the move that uses fast move variable_extruder_move_speed : 25 ; Speed mm/s for all extruder movement # Safety margin for fast vs slow travel. When traveling to the pin location # we make a safer but longer move if we are closer to the pin than this # specified margin. Usually setting these to the size of the toolhead # (plus a small margin) should be good enough variable_safe_margin_xy : 30, 30 ; Approx toolhead width +5mm, height +5mm) # If gantry servo option is installed, enable the servo and set up and down # angle positions variable_gantry_servo_enabled : False ; True = enabled, False = disabled variable_gantry_servo_down_angle: 55 ; Angle for when pin is deployed variable_gantry_servo_up_angle : 180 ; Angle for when pin is retracted # FORM_TIP ---------------------------------------------------------------- # ███████╗ ██████╗ ██████╗ ███╗ ███╗ ████████╗██╗██████╗ # ██╔════╝██╔═══██╗██╔══██╗████╗ ████║ ╚══██╔══╝██║██╔══██╗ # █████╗ ██║ ██║██████╔╝██╔████╔██║ ██║ ██║██████╔╝ # ██╔══╝ ██║ ██║██╔══██╗██║╚██╔╝██║ ██║ ██║██╔═══╝ # ██║ ╚██████╔╝██║ ██║██║ ╚═╝ ██║ ██║ ██║██║ # ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ # Don't need to configure if using tip cutting # (base/mmu_form_tip.cfg) # [gcode_macro _MMU_FORM_TIP_VARS] description: Happy Hare tip forming macro configuration variables gcode: # Leave empty # Step 1 - Ramming # Ramming is the initial squeeze of filament prior to cooling moves and is # described in terms of total volume and progression of squeeze intensity # printing/standalone. This can be separately controlled when printing or # standalone variable_ramming_volume : 0 ; Volume in mm^3, 0 = disabled (optionally let slicer do it) variable_ramming_volume_standalone : 0 ; Volume in mm^3, 0 = disabled # Optionally set for temperature change (reduction). The wait will occur # before nozzle separation if 'use_fast_skinnydip: False' else after cooling # moves. Temperature will be restored after tip creation is complete variable_toolchange_temp : 0 ; 0 = don't change temp, else temp to set variable_toolchange_fan_assist : False ; Whether to use part cooling fan for quicker temp change variable_toolchange_fan_speed : 50 ; Fan speed % if using fan_assist enabled # Step 2 - Nozzle Separation # The filament is then quickly separated from the meltzone by a fast movement # before then slowing to travel the remaining distance to cooling tube. The # initial fast movement should be as fast as extruder can comfortably perform. # A good starting point# for slower move is unloading_speed_start/cooling_moves. # Too fast a slower movement can lead to excessively long tips or hairs variable_unloading_speed_start : 80 ; Speed in mm/s for initial fast movement variable_unloading_speed : 18 ; Speed in mm/s for slow move to cooling zone # Step 3 - Cooling Moves # The cooling move allows the filament to harden while constantly moving back # and forth in the cooling tube portion of the extruder to prevent a bulbous # tip forming. The cooling tube position is measured from the internal nozzle # to just past the top of the heater block (often it is beneficial to add a # couple of mm to ensure the tip is in the cooling section. The cooling tube # length is then the distance from here to top of heatsink (this is the length # length of the cooling moves). The final cooling move is a fast movement to # break the string formed. variable_cooling_tube_position : 35 ; Start of cooling tube. DragonST:35, DragonHF:30, Mosquito:30, Revo:35, RapidoHF:27 variable_cooling_tube_length : 10 ; Movement length. DragonST:15, DragonHF:10, Mosquito:20, Revo:10, RapidoHF:10 variable_initial_cooling_speed : 10 ; Initial slow movement (mm/s) to solidify tip and cool string if formed variable_final_cooling_speed : 50 ; Fast movement (mm/s) Too fast: tip deformation on eject, Too Slow: long string/no separation variable_cooling_moves : 4 ; Number of back and forth cooling moves to make (2-4 is a good start) # Step 4 - Skinnydip # Skinnydip is an advanced final move that may have benefit with some # material like PLA to burn off persistent very fine hairs. To work the # depth of insertion is critical (start with it disabled and tune last) # For reference the internal nozzle would be at a distance of # cooling_tube_position + cooling_tube_length, the top of the heater # block would be cooling_tube_length away. variable_use_skinnydip : False ; True = enable skinnydip, False = skinnydip move disabled variable_skinnydip_distance : 30 ; Distance to reinsert filament into hotend starting from end of cooling tube variable_dip_insertion_speed : 30 ; Medium/Slow insertion speed mm/s - Just long enough to melt the fine hairs, too slow will pull up molten filament variable_dip_extraction_speed : 70 ; Speed mm/s - Around 2x Insertion speed to prevents forming new hairs variable_melt_zone_pause : 0 ; Pause if melt zone in ms. Default 0 variable_cooling_zone_pause : 0 ; Pause if cooling zone after dip in ms. Default 0 variable_use_fast_skinnydip : False ; False = Skip the toolhead temp change wait during skinnydip move # Step 5 - Parking # Park filament ready to eject variable_parking_distance : 0 ; Position mm to park the filament at end of tip forming, 0 = leave where filament ends up after tip forming variable_extruder_eject_speed : 25 ; Speed mm/s used for parking_distance (and final_eject when testing) # CLIENT MACROS ----------------------------------------------------------- # ██████╗ █████╗ ██╗ ██╗███████╗███████╗ ██████╗ ███████╗███████╗██╗ ██╗███╗ ███╗███████╗ # ██╔══██╗██╔══██╗██║ ██║██╔════╝██╔════╝ ██╔══██╗██╔════╝██╔════╝██║ ██║████╗ ████║██╔════╝ # ██████╔╝███████║██║ ██║███████╗█████╗ ██████╔╝█████╗ ███████╗██║ ██║██╔████╔██║█████╗ # ██╔═══╝ ██╔══██║██║ ██║╚════██║██╔══╝ ██╔══██╗██╔══╝ ╚════██║██║ ██║██║╚██╔╝██║██╔══╝ # ██║ ██║ ██║╚██████╔╝███████║███████╗ ██║ ██║███████╗███████║╚██████╔╝██║ ╚═╝ ██║███████╗ # ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚══════╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ # If using the recommended PAUSE/RESUME/CANCEL_PRINT macros shipped with # Happy Hare these variables allow for customization and basic extension # Note that most parameters are pulled from the "movement" (sequence) # macro above and thus these are supplemental a # (optional/client_macros.cfg) # [gcode_macro _MMU_CLIENT_VARS] description: Happy Hare client macro configuration variables gcode: # Leave empty variable_reset_ttg_on_cancel : False ; True/False, Whether reset TTG map if print is canceled variable_unload_tool_on_cancel : False ; True/False, Whether to unload the tool on cancel # You can extend functionality by adding a command (or call to your gcode macro) variable_user_pause_extension : '' ; Executed after the klipper base pause variable_user_resume_extension : '' ; Executed before the klipper base resume variable_user_cancel_extension : '' ; Executed before the klipper base cancel_print ########################################################################### # Tool change macros # This is automatically created on installation but you can increase or # reduce this list to match your number of tools in operation # Note: it is annoying to have to do this but interfaces like Mainsail rely # on real macro definitions for tools to be visible in the UI # [gcode_macro T0] gcode: MMU_CHANGE_TOOL TOOL=0 [gcode_macro T1] gcode: MMU_CHANGE_TOOL TOOL=1 [gcode_macro T2] gcode: MMU_CHANGE_TOOL TOOL=2 [gcode_macro T3] gcode: MMU_CHANGE_TOOL TOOL=3 [gcode_macro T4] gcode: MMU_CHANGE_TOOL TOOL=4 [gcode_macro T5] gcode: MMU_CHANGE_TOOL TOOL=5 [gcode_macro T6] gcode: MMU_CHANGE_TOOL TOOL=6 [gcode_macro T7] gcode: MMU_CHANGE_TOOL TOOL=7