Created
October 23, 2023 05:04
-
-
Save joe-scotto/97d70031c9814971f10d3e5724477406 to your computer and use it in GitHub Desktop.
Kamp.cfg
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
[gcode_macro BED_MESH_CALIBRATE] | |
rename_existing: _BED_MESH_CALIBRATE | |
### This section allows control of status LEDs your printer may have. | |
variable_led_enable: False # Enables/disables the use of status LEDs in this macro. | |
variable_status_macro: 'status_meshing' # If you have status LEDs in your printer (StealthBurner), you can use the macro that changes their status here. | |
### This section configures mesh point fuzzing, which allows probe points to be varied slightly if printing multiples of the same G-code file. | |
variable_fuzz_enable: False # Enables/disables the use of mesh point fuzzing to slightly randomize probing points to spread out wear on a build surface, default is False. | |
variable_fuzz_min: 0 # If enabled, the minimum amount in mm a probe point can be randomized, default is 0. | |
variable_fuzz_max: 4 # If enabled, the maximum amount in mm a probe point can be randomized, default is 4. | |
### This section is for configuring a mesh margin, which allows the probed mesh to be expanded outwards from the print area. | |
variable_margin_enable: False # Enables/disables adding a margin to the meshed area to pad a mesh out for specific needs, default is False. | |
variable_margin_size: 5 # Size in millimeters to expand the mesh outwards from the print area in all directions. | |
### This section is for those using a dockable probe that is stored outside of the print area. ### | |
variable_probe_dock_enable: False # Enables/disables the use of a dockable probe that is stored outside of the print area, default is False. | |
variable_attach_macro: 'Attach_Probe' # Here is where you define the macro that ATTACHES the probe to the printhead. E.g. 'Attach_Probe' | |
variable_detach_macro: 'Dock_Probe' # Here is where you define the macro that DETACHES the probe from the printhead. E.g. 'Dock_Probe' | |
### This section is for those who are using Moonraker's Update Manager for KAMP, or want a more verbose macro. ### | |
variable_display_parameters: True # Display macro paramters in the console, useful for debugging the SETUP_KAMP_MESHING call, or more verbosity. | |
gcode: | |
{% if display_parameters == True %} | |
{ action_respond_info("led_enable : %d" % (led_enable)) } | |
{ action_respond_info("status_macro: \'%s\'" % (status_macro)) } | |
{ action_respond_info("fuzz_enable : %d" % (fuzz_enable)) } | |
{ action_respond_info("fuzz_min : %f" % (fuzz_min)) } | |
{ action_respond_info("fuzz_max : %f" % (fuzz_max)) } | |
{ action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) } | |
{ action_respond_info("attach_macro: \'%s\'" % (attach_macro)) } | |
{ action_respond_info("detach_macro: \'%s\'" % (detach_macro)) } | |
{% endif %} | |
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} | |
{% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} | |
{% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} | |
{% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} | |
{% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} | |
{% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} | |
{% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} | |
{% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} | |
{% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} | |
{% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} | |
{% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} | |
{% if margin_enable == False %} | |
{% set margin_size = 0 %} | |
{% endif %} | |
{ action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format( | |
all_points | count, | |
bed_mesh_min, | |
bed_mesh_max, | |
)) } | |
{% if fuzz_enable == True %} | |
{% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %} | |
{% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %} | |
{% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %} | |
{% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %} | |
{% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %} | |
{% else %} | |
{% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %} | |
{% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %} | |
{% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %} | |
{% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %} | |
{% endif %} | |
{ action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format( | |
(x_min, y_min), | |
(x_max, y_max), | |
)) } | |
{% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} | |
{% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} | |
{% if (([points_x, points_y]|max) > 6) %} | |
{% set algorithm = "bicubic" %} | |
{% set min_points = 4 %} | |
{% else %} | |
{% set algorithm = "lagrange" %} | |
{% set min_points = 3 %} | |
{% endif %} | |
{ action_respond_info( "Algorithm: {}".format(algorithm)) } | |
{% set points_x = [points_x, min_points]|max %} | |
{% set points_y = [points_y, min_points]|max %} | |
{ action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) } | |
{% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %} | |
{% set ref_index = (points_x * points_y / 2) | int %} | |
{ action_respond_info( "Reference index: {}".format(ref_index) ) } | |
{% else %} | |
{% set ref_index = -1 %} | |
{% endif %} | |
{% if probe_dock_enable == True %} | |
{attach_macro} # Attach/deploy a probe if the probe is stored somewhere outside of the print area | |
{% endif %} | |
{% if led_enable == True %} | |
{status_macro} # Set status LEDs | |
{% endif %} | |
_BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} | |
{% if probe_dock_enable == True %} | |
{detach_macro} # Detach/stow a probe if the probe is stored somewhere outside of the print area | |
{% endif %} | |
[gcode_macro SETUP_KAMP_MESHING] | |
gcode: | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int} | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"' | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int} | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float} | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float} | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int} | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"' | |
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"' | |
[gcode_macro LINE_PURGE] | |
description: A purge macro that adapts to be near your actual printed objects | |
variable_adaptive_enable: True # Change to False if you'd like the purge to be in the same spot every print | |
variable_z_height: 0.4 # Height above the bed to purge | |
variable_purge_amount: 40 # Amount of filament in millimeters to purge | |
variable_line_length: 25 # Overall desired length of purge line in millimeters, around 1/5th of X axis length is a good starting value | |
variable_flow_rate: 12 # Desired flow rate in mm3/s (Around 12 for standard flow hotends, around 24 for high flow hotends) | |
variable_x_default: 10 # Default X location to purge. If adaptive_enable is True, this is overwritten | |
variable_y_default: 10 # Default Y location to purge. If adaptive_enable is True, this is overwritten | |
variable_distance_to_object_y: 7.5 # Y distance in millimeters away from the print area for purging. Must be less than or equal to y_default if adaptive_enable is False | |
### This section is for those who are using Moonraker's Update Manager for KAMP, or want a more verbose macro. ### | |
variable_display_parameters: True # Display macro paramters in the console, useful for debugging the SETUP_LINE_PURGE call, or more verbosity. | |
gcode: | |
{% if display_parameters == True %} | |
{ action_respond_info("adaptive_enable : %d" % (adaptive_enable)) } | |
{ action_respond_info("z_height : %f" % (z_height)) } | |
{ action_respond_info("purge_amount : %f" % (purge_amount)) } | |
{ action_respond_info("line_length : %f" % (line_length)) } | |
{ action_respond_info("flow_rate : %f" % (flow_rate)) } | |
{ action_respond_info("x_default : %f" % (x_default)) } | |
{ action_respond_info("y_default : %f" % (y_default)) } | |
{ action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) } | |
{% endif %} | |
{% if adaptive_enable == True %} | |
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} | |
{% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %} | |
{% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %} | |
{% set x_origin = ([x_origin, 0] | max) %} | |
{% set y_origin = ([y_origin, 0] | max) %} | |
{% else %} | |
{% set x_origin = x_default | float %} | |
{% set y_origin = y_default | float %} | |
{% endif %} | |
{% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %} | |
{% set cross_section = nozzle_dia * z_height | float %} | |
{% set purge_move_speed = (cross_section * flow_rate) * 60 | float %} | |
{% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} | |
{% set extruder_temp = params.EXTRUDER_TEMP|default(210)|float %} | |
G92 E0 # Reset extruder | |
G0 F{travel_speed} # Set travel speed | |
G90 # Absolute positioning | |
G0 X{x_origin} Y{y_origin - distance_to_object_y} # Move to purge position | |
G0 Z{z_height} # Move to purge Z height | |
M83 # Relative extrusion mode | |
M109 S{extruder_temp} # Wait for extruder to reach temp before proceeding | |
G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} # Purge line | |
G1 E-.5 F2100 # Retract | |
G92 E0 # Reset extruder distance | |
M82 # Absolute extrusion mode | |
G0 Z{z_height * 2} F{travel_speed} # Z hop | |
[gcode_macro SETUP_LINE_PURGE] | |
gcode: | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float} | |
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float} | |
[gcode_macro START_PRINT] | |
gcode: | |
{% set BED_TEMP = params.BED_TEMP|default(60)|float %} | |
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(210)|float %} | |
{% set USE_SAVED_MESH = params.USE_SAVED_MESH|default(0)|int %} | |
G92 E0 ; Reset Extruder | |
M140 S{BED_TEMP} ;Start heating bed | |
G28 ; Home all axes | |
M190 S{BED_TEMP} ;Wait for bed to reach temp before proceeding | |
M104 S{EXTRUDER_TEMP} ;Start heating extruder | |
{% if USE_SAVED_MESH %} | |
{ action_respond_info("Using saved mesh.") } | |
{% else %} | |
{ action_respond_info("Clearing and creating a new mesh.") } | |
BED_MESH_CLEAR | |
BED_MESH_CALIBRATE | |
{% endif %} | |
LINE_PURGE | |
SET_SKEW XY=141.6,140.8,100.0 ;Enable skew correction | |
GET_CURRENT_SKEW ;Print skew correction | |
[gcode_macro STOP_PRINT] | |
gcode: | |
{% set PRESENT_PRINT = params.PRESENT_PRINT|default(0)|float %} | |
{% set STAY_HEATED = params.STAY_HEATED|default(0)|int %} | |
SET_SKEW CLEAR=1 ;Disable skew correction | |
GET_CURRENT_SKEW ;Print skew correction | |
G91 ;Relative positioning | |
G1 E-2 F2700 ;Retract a bit | |
G1 E-2 Z0.2 F2400 ;Retract and raise Z | |
G1 X5 Y5 F3000 ;Wipe out | |
G1 Z50 ;Raise Z more | |
G90 ;Absolute positioning | |
G1 X0 Y{PRESENT_PRINT} ;Present print | |
{% if STAY_HEATED %} | |
{ action_respond_info("Printer will stay heated.") } | |
{% else %} | |
{ action_respond_info("Printer cooling down.") } | |
M106 S0 ;Turn-off fan | |
M104 S0 ;Turn-off hotend | |
M140 S0 ;Turn-off bed | |
{% endif %} | |
M84 X Y E ;Disable all steppers but Z |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment