mirror of
https://github.com/QIDITECH/QIDI_Q1_Pro.git
synced 2026-01-30 23:48:43 +03:00
225
config/Adaptive_Mesh.cfg
Normal file
225
config/Adaptive_Mesh.cfg
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
# # # Klipper Adaptive Meshing # # #
|
||||||
|
|
||||||
|
# Heads up! If you have any other BED_MESH_CALIBRATE macros defined elsewhere in your config, you will need to comment out / remove them for this to work. (Klicky/Euclid Probe)
|
||||||
|
# You will also need to be sure that [exclude_object] is defined in printer.cfg, and your slicer is labeling objects.
|
||||||
|
# This macro will parse information from objects in your gcode to define a min and max mesh area to probe, creating an adaptive mesh!
|
||||||
|
# This macro will not increase probe_count values in your [bed_mesh] config. If you want richer meshes, be sure to increase probe_count. We recommend at least 5,5.
|
||||||
|
|
||||||
|
[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 params.PROFILE is defined %}
|
||||||
|
{% set PROFILE2 =params.PROFILE %}
|
||||||
|
{% else %}
|
||||||
|
{% set PROFILE2 ="default" %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if (([points_x, points_y]|max) > 4) %}
|
||||||
|
{% 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} PROFILE={params.PROFILE|default("default")}
|
||||||
|
|
||||||
|
{% 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}"'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# # # Klipper Adaptive Purging - Line # # #
|
||||||
|
|
||||||
|
# This macro will parse information from objects in your gcode and create a nearby purge!
|
||||||
|
# For successful purging, you may need to configure:
|
||||||
|
#
|
||||||
|
# [extruder]
|
||||||
|
# ...
|
||||||
|
# max_extrude_cross_section: 5
|
||||||
|
|
||||||
|
[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: 50 # 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: 10 # 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) * 30 | 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
|
||||||
|
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}
|
||||||
|
|
||||||
@@ -1,8 +1,13 @@
|
|||||||
# Q1_Pro
|
# Q1_Pro
|
||||||
# V4.4.16 2024-3-14
|
# V4.4.16 2024-3-14
|
||||||
# modify: variable change M106 & M141 & M107
|
# update: variable change M106 & M141 & M107
|
||||||
# V4.4.16 2024-3-26
|
# V4.4.16 2024-3-26
|
||||||
# modify: variable change [homing_override]->add M204 S10000
|
# update: variable change [homing_override]->add M204 S10000
|
||||||
|
# V4.4.20 2024-6-17
|
||||||
|
# update: Z_DOUDONG CLEAR_NOZZLE get_zoffset rewrite
|
||||||
|
# move_subzoffset added
|
||||||
|
# V4.4.21 2024-6-22
|
||||||
|
# update: Enable chamber exhaust fan by default when chamber temp not set
|
||||||
|
|
||||||
[gcode_macro test_zoffset]
|
[gcode_macro test_zoffset]
|
||||||
gcode:
|
gcode:
|
||||||
@@ -11,18 +16,30 @@ gcode:
|
|||||||
G1 X{120 - printer.probe["x_offset"]} Y{120 - printer.probe["y_offset"]} F9000
|
G1 X{120 - printer.probe["x_offset"]} Y{120 - printer.probe["y_offset"]} F9000
|
||||||
G1 Z10 F600
|
G1 Z10 F600
|
||||||
probe
|
probe
|
||||||
|
M400
|
||||||
|
G4 P5000
|
||||||
G1 Z10 F600
|
G1 Z10 F600
|
||||||
|
|
||||||
|
[gcode_macro move_subzoffset]
|
||||||
|
gcode:
|
||||||
|
|
||||||
|
G1 Z{printer.probe.last_z_result} F600
|
||||||
|
|
||||||
[gcode_macro get_zoffset]
|
[gcode_macro get_zoffset]
|
||||||
gcode:
|
gcode:
|
||||||
G1 Z10 F600
|
G1 Z10 F600
|
||||||
Z_DOUDONG
|
Z_DOUDONG
|
||||||
G4 P500
|
;G4 P500
|
||||||
QIDI_PROBE_PIN_1
|
QIDI_PROBE_PIN_1
|
||||||
probe probe_speed=10 samples=3
|
M204 S30
|
||||||
SET_KINEMATIC_POSITION Z=-0.1
|
G4 P500
|
||||||
|
probe probe_speed=5 lift_speed=5 samples=5 sample_retract_dist=5
|
||||||
|
move_subzoffset
|
||||||
|
M114
|
||||||
|
SET_KINEMATIC_POSITION Z=-0.07
|
||||||
G1 Z30 F600
|
G1 Z30 F600
|
||||||
QIDI_PROBE_PIN_2
|
QIDI_PROBE_PIN_2
|
||||||
|
M204 S10000
|
||||||
|
|
||||||
[gcode_macro save_zoffset]
|
[gcode_macro save_zoffset]
|
||||||
gcode:
|
gcode:
|
||||||
@@ -46,8 +63,9 @@ gcode:
|
|||||||
G1 Z5 F900
|
G1 Z5 F900
|
||||||
G90
|
G90
|
||||||
{% endif %}
|
{% endif %}
|
||||||
G1 X97 F9000
|
G1 X97 F15000
|
||||||
G1 Y254 F9000
|
G1 Y243 F15000
|
||||||
|
G1 Y254 F800
|
||||||
|
|
||||||
M109 S{hotendtemp}
|
M109 S{hotendtemp}
|
||||||
|
|
||||||
@@ -55,22 +73,20 @@ gcode:
|
|||||||
G1 E80 F400
|
G1 E80 F400
|
||||||
M106 S255
|
M106 S255
|
||||||
|
|
||||||
G1 X98 F500
|
G1 X97 F500
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 Y240 F9000
|
G1 Y240 F800
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[gcode_macro CLEAR_NOZZLE]
|
[gcode_macro CLEAR_NOZZLE]
|
||||||
gcode:
|
gcode:
|
||||||
@@ -82,8 +98,9 @@ gcode:
|
|||||||
G1 Z5 F900
|
G1 Z5 F900
|
||||||
G90
|
G90
|
||||||
{% endif %}
|
{% endif %}
|
||||||
G1 X97 F9000
|
G1 X97 F15000
|
||||||
G1 Y254 F9000
|
G1 Y243 F15000
|
||||||
|
G1 Y254 F800
|
||||||
|
|
||||||
M109 S{hotendtemp}
|
M109 S{hotendtemp}
|
||||||
|
|
||||||
@@ -93,18 +110,16 @@ gcode:
|
|||||||
M400
|
M400
|
||||||
M106 P2 S0
|
M106 P2 S0
|
||||||
M104 S0
|
M104 S0
|
||||||
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-30}
|
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-20}
|
||||||
|
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
|
||||||
G1 X98 F2000
|
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
|
|
||||||
G1 X65 F500
|
G1 X65 F500
|
||||||
@@ -112,37 +127,28 @@ gcode:
|
|||||||
G1 X65 F500
|
G1 X65 F500
|
||||||
G1 X88 F500
|
G1 X88 F500
|
||||||
G1 X65 F500
|
G1 X65 F500
|
||||||
|
|
||||||
G1 Y249 F500
|
|
||||||
G1 Y254 F500
|
|
||||||
G1 Y249 F500
|
|
||||||
G1 Y254 F500
|
|
||||||
G1 Y249 F500
|
|
||||||
G1 Y253.5 F500
|
|
||||||
|
|
||||||
G1 X88 F500
|
G1 X88 F500
|
||||||
G1 X65 F500
|
G1 X65 F500
|
||||||
G1 X88 F500
|
G1 X88 F500
|
||||||
G1 X65 F500
|
G1 X65 F500
|
||||||
G1 X85 F500
|
G1 X97 F500
|
||||||
|
|
||||||
G1 X98 F500
|
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
|
||||||
G1 X98 F2000
|
|
||||||
M400
|
M400
|
||||||
M118 Nozzle cleared
|
M118 Nozzle cleared
|
||||||
G1 Y120 F9000
|
G1 Y240 F800
|
||||||
G1 X230 F9000
|
G1 Y120 F15000
|
||||||
|
G1 X230 F15000
|
||||||
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=140
|
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=140
|
||||||
M107
|
M107
|
||||||
M106 P2 S0
|
M106 P2 S0
|
||||||
@@ -157,6 +163,9 @@ gcode:
|
|||||||
{% set hotendtemp = params.HOTEND|int %}
|
{% set hotendtemp = params.HOTEND|int %}
|
||||||
{% set chambertemp = params.CHAMBER|default(0)|int %}
|
{% set chambertemp = params.CHAMBER|default(0)|int %}
|
||||||
set_zoffset
|
set_zoffset
|
||||||
|
{% if chambertemp == 0 %}
|
||||||
|
M106 P3 S255
|
||||||
|
{% endif %}
|
||||||
M104 S0
|
M104 S0
|
||||||
M140 S{bedtemp}
|
M140 S{bedtemp}
|
||||||
M141 S{chambertemp}
|
M141 S{chambertemp}
|
||||||
@@ -188,7 +197,6 @@ gcode:
|
|||||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
||||||
DISABLE_FILAMENT_WIDTH_SENSOR
|
DISABLE_FILAMENT_WIDTH_SENSOR
|
||||||
|
|
||||||
|
|
||||||
[gcode_macro AUTOTUNE_SHAPERS]
|
[gcode_macro AUTOTUNE_SHAPERS]
|
||||||
variable_autotune_shapers: 'ei'
|
variable_autotune_shapers: 'ei'
|
||||||
gcode:
|
gcode:
|
||||||
@@ -212,19 +220,13 @@ gcode:
|
|||||||
M118 No: CLEAR_LAST_FILE
|
M118 No: CLEAR_LAST_FILE
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
[delayed_gcode KINEMATIC_POSITION]
|
[delayed_gcode PRINTER_INIT]
|
||||||
initial_duration:0.2
|
initial_duration:0.2
|
||||||
gcode:
|
gcode:
|
||||||
SET_STEPPER_ENABLE STEPPER=stepper_z enable=1
|
SET_STEPPER_ENABLE STEPPER=stepper_z enable=1
|
||||||
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
|
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
|
||||||
BED_MESH_CLEAR
|
BED_MESH_CLEAR
|
||||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
||||||
# {% set was_interrupted = printer.save_variables.variables.was_interrupted %}
|
|
||||||
# {% if was_interrupted %}
|
|
||||||
# M118 Detected unexpected interruption during the last print. Do you want to resume printing? (Do not move the extruder before resuming.)
|
|
||||||
# M118 Yes: RESUME_INTERRUPTED
|
|
||||||
# M118 No: CLEAR_LAST_FILE
|
|
||||||
# {% endif %}
|
|
||||||
|
|
||||||
[homing_override]
|
[homing_override]
|
||||||
axes:xyz
|
axes:xyz
|
||||||
@@ -234,6 +236,7 @@ gcode:
|
|||||||
{% set RUN_CUR = driver_config.run_current %}
|
{% set RUN_CUR = driver_config.run_current %}
|
||||||
{% set HOLD_CUR = driver_config.hold_current %}
|
{% set HOLD_CUR = driver_config.hold_current %}
|
||||||
M204 S10000
|
M204 S10000
|
||||||
|
M220 S100
|
||||||
{% if params.X is defined %}
|
{% if params.X is defined %}
|
||||||
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.7}
|
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.7}
|
||||||
G28 X
|
G28 X
|
||||||
@@ -343,9 +346,6 @@ gcode:
|
|||||||
CLEAR_LAST_FILE
|
CLEAR_LAST_FILE
|
||||||
BEEP I=2 DUR=500
|
BEEP I=2 DUR=500
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[gcode_macro CANCEL_PRINT]
|
[gcode_macro CANCEL_PRINT]
|
||||||
rename_existing: BASE_CANCEL_PRINT
|
rename_existing: BASE_CANCEL_PRINT
|
||||||
gcode:
|
gcode:
|
||||||
@@ -417,7 +417,6 @@ gcode:
|
|||||||
SET_STEPPER_ENABLE STEPPER=extruder enable=0
|
SET_STEPPER_ENABLE STEPPER=extruder enable=0
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
[gcode_macro RESUME]
|
[gcode_macro RESUME]
|
||||||
rename_existing: BASE_RESUME
|
rename_existing: BASE_RESUME
|
||||||
variable_zhop: 0
|
variable_zhop: 0
|
||||||
@@ -459,8 +458,6 @@ gcode:
|
|||||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1 ; enable filament sensor
|
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1 ; enable filament sensor
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[gcode_macro BEEP]
|
[gcode_macro BEEP]
|
||||||
gcode:
|
gcode:
|
||||||
{% set i = params.I|default(1)|int %} ; Iterations (number of times to beep).
|
{% set i = params.I|default(1)|int %} ; Iterations (number of times to beep).
|
||||||
@@ -608,8 +605,6 @@ gcode:
|
|||||||
[gcode_macro M4028]
|
[gcode_macro M4028]
|
||||||
gcode:
|
gcode:
|
||||||
G28
|
G28
|
||||||
# Z_TILT_ADJUST
|
|
||||||
G28
|
|
||||||
get_zoffset
|
get_zoffset
|
||||||
M400
|
M400
|
||||||
M118 Position init complete
|
M118 Position init complete
|
||||||
@@ -623,16 +618,12 @@ gcode:
|
|||||||
M118 Position init complete
|
M118 Position init complete
|
||||||
|
|
||||||
CLEAR_NOZZLE HOTEND=240
|
CLEAR_NOZZLE HOTEND=240
|
||||||
# Z_TILT_ADJUST
|
|
||||||
G28
|
G28
|
||||||
get_zoffset
|
get_zoffset
|
||||||
|
|
||||||
[gcode_macro M4030]
|
[gcode_macro M4030]
|
||||||
gcode:
|
gcode:
|
||||||
REVERSE_HOMING
|
|
||||||
G91
|
|
||||||
G1 Z-30
|
|
||||||
G90
|
|
||||||
BED_MESH_CLEAR
|
BED_MESH_CLEAR
|
||||||
SET_GCODE_OFFSET Z=0 MOVE=0
|
SET_GCODE_OFFSET Z=0 MOVE=0
|
||||||
G28
|
G28
|
||||||
@@ -640,8 +631,28 @@ gcode:
|
|||||||
G1 X120 Y120 F9000
|
G1 X120 Y120 F9000
|
||||||
G1 Z0 F600
|
G1 Z0 F600
|
||||||
|
|
||||||
|
[gcode_macro M4031]
|
||||||
|
gcode:
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current * 0.8 }
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current * 0.8 }
|
||||||
|
REVERSE_HOMING
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current}
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current}
|
||||||
|
G91
|
||||||
|
G1 Z-30 F600
|
||||||
|
G90
|
||||||
|
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current * 0.8 }
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current * 0.8 }
|
||||||
|
REVERSE_HOMING
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current}
|
||||||
|
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current}
|
||||||
|
G91
|
||||||
|
G1 Z-30 F600
|
||||||
|
G90
|
||||||
|
|
||||||
[gcode_macro M603]
|
[gcode_macro M603]
|
||||||
description: filament unlode
|
description: unload filament
|
||||||
gcode:
|
gcode:
|
||||||
M118 Heat up complete
|
M118 Heat up complete
|
||||||
G92 E0
|
G92 E0
|
||||||
@@ -653,6 +664,7 @@ gcode:
|
|||||||
M118 Unload finish
|
M118 Unload finish
|
||||||
|
|
||||||
[gcode_macro M604]
|
[gcode_macro M604]
|
||||||
|
description: load filament
|
||||||
gcode:
|
gcode:
|
||||||
M118 Heat up complete
|
M118 Heat up complete
|
||||||
M83
|
M83
|
||||||
@@ -744,126 +756,19 @@ gcode:
|
|||||||
|
|
||||||
[gcode_macro Z_DOUDONG]
|
[gcode_macro Z_DOUDONG]
|
||||||
gcode:
|
gcode:
|
||||||
m204 S5000
|
M204 S30
|
||||||
G91
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
|
|
||||||
G1 Y2 F6000
|
|
||||||
G1 Y-2 F6000
|
|
||||||
G1 Y2 F6000
|
|
||||||
G1 Y-2 F6000
|
|
||||||
G1 Y2 F6000
|
|
||||||
G1 Y-2 F6000
|
|
||||||
G1 Y2 F6000
|
|
||||||
G1 Y-2 F6000
|
|
||||||
G1 Y2 F6000
|
|
||||||
G1 Y-2 F6000
|
|
||||||
G1 Y2 F6000
|
|
||||||
G1 Y-2 F6000
|
|
||||||
G1 Y2 F6000
|
|
||||||
G1 Y-2 F6000
|
|
||||||
|
|
||||||
G90
|
G90
|
||||||
m204 S5000
|
G0 Z1
|
||||||
SET_Z_VELOCITY_LIMIT VALUE=15
|
G91
|
||||||
|
G4 P3000
|
||||||
SET_PIN PIN=ctlyd VALUE=1
|
SET_PIN PIN=ctlyd VALUE=1
|
||||||
G91
|
{% for z in range(1,7) %}
|
||||||
G1 Z1 F900
|
G1 Z10 F900
|
||||||
G1 Z-1
|
G1 Z-10 F900
|
||||||
G1 Z1
|
{% endfor %}
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G90
|
|
||||||
SET_PIN PIN=ctlyd VALUE=0
|
SET_PIN PIN=ctlyd VALUE=0
|
||||||
SET_Z_VELOCITY_LIMIT VALUE=10
|
G4 P1000
|
||||||
G4 P500
|
G1 Z4
|
||||||
|
G90
|
||||||
|
# M204 S10000
|
||||||
|
|
||||||
|
|||||||
66
config/plr.cfg
Normal file
66
config/plr.cfg
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
[gcode_shell_command POWER_LOSS_RESUME]
|
||||||
|
command: bash /home/mks/scripts/plr/plr.sh
|
||||||
|
timeout: 120
|
||||||
|
|
||||||
|
[gcode_shell_command UPDATE_GCODE_LINES]
|
||||||
|
command: bash /home/mks/scripts/plr/update_gcode_lines.sh
|
||||||
|
|
||||||
|
[gcode_macro save_last_file]
|
||||||
|
gcode:
|
||||||
|
{% set svv = printer.save_variables.variables %}
|
||||||
|
{% set filepath=printer.virtual_sdcard.file_path %}
|
||||||
|
{% set filename=filepath.split('/')%}
|
||||||
|
SAVE_VARIABLE VARIABLE=was_interrupted VALUE=True
|
||||||
|
SAVE_VARIABLE VARIABLE=print_temp VALUE={printer.extruder.target}
|
||||||
|
SAVE_VARIABLE VARIABLE=bed_temp VALUE={printer['heater_bed'].target}
|
||||||
|
{% if printer["heater_generic chamber"] is defined %}
|
||||||
|
SAVE_VARIABLE VARIABLE=hot_temp VALUE={printer['heater_generic chamber'].target}
|
||||||
|
{% else %}
|
||||||
|
SAVE_VARIABLE VARIABLE=hot_temp VALUE=0
|
||||||
|
{% endif %}
|
||||||
|
M118 Last File: { filename[-1] }
|
||||||
|
M117 Last File: { filename[-1] }
|
||||||
|
G4 P2000
|
||||||
|
|
||||||
|
[gcode_macro CLEAR_LAST_FILE]
|
||||||
|
gcode:
|
||||||
|
{% set filename='' %}
|
||||||
|
SAVE_VARIABLE VARIABLE=last_file VALUE='"{ filename }"'
|
||||||
|
SAVE_VARIABLE VARIABLE=was_interrupted VALUE=False
|
||||||
|
|
||||||
|
[gcode_macro LOG_Z]
|
||||||
|
gcode:
|
||||||
|
{% set z_pos = printer.gcode_move.gcode_position.z %}
|
||||||
|
RESPOND MSG="Current Z is {z_pos}"
|
||||||
|
SAVE_VARIABLE VARIABLE=power_resume_z VALUE={z_pos}
|
||||||
|
|
||||||
|
[gcode_macro RESUME_INTERRUPTED]
|
||||||
|
gcode:
|
||||||
|
set_zoffset
|
||||||
|
RUN_SHELL_COMMAND CMD=UPDATE_GCODE_LINES
|
||||||
|
{% set profile_name = params.PROFILE_NAME|default(printer.save_variables.variables.profile_name)|string %}
|
||||||
|
# {% set g_lines = params.GCODE_LINES|default(printer.save_variables.variables.gcode_lines)|string %}
|
||||||
|
# {% set last_file = params.GCODE_FILE|default(printer.save_variables.variables.last_file)|string %}
|
||||||
|
# {% set print_temp = params.PRINT_TEMP|default(printer.save_variables.variables.print_temp)|float %}
|
||||||
|
# {% set bed_temp = params.BED_TEMP|default(printer.save_variables.variables.bed_temp)|float %}
|
||||||
|
# {% set hot_temp = params.HOT_TEMP|default(printer.save_variables.variables.hot_temp)|float %}
|
||||||
|
# {% set filepath = params.FILE_PATH|default(printer.save_variables.variables.file_path)|string %}
|
||||||
|
BED_MESH_PROFILE LOAD={profile_name}
|
||||||
|
RUN_SHELL_COMMAND CMD=POWER_LOSS_RESUME
|
||||||
|
SDCARD_PRINT_FILE FILENAME=/.plr/plr.gcode
|
||||||
|
|
||||||
|
|
||||||
|
# [gcode_macro RESUME_INTERRUPTED]
|
||||||
|
# gcode:
|
||||||
|
# set_zoffset
|
||||||
|
# {% set profile_name = params.PROFILE_NAME|default(printer.save_variables.variables.profile_name)|string %}
|
||||||
|
# {% set z_height = params.Z_HEIGHT|default(printer.save_variables.variables.power_resume_z)|float %}
|
||||||
|
# {% set last_file = params.GCODE_FILE|default(printer.save_variables.variables.last_file)|string %}
|
||||||
|
# {% set print_temp = params.PRINT_TEMP|default(printer.save_variables.variables.print_temp)|float %}
|
||||||
|
# {% set bed_temp = params.BED_TEMP|default(printer.save_variables.variables.bed_temp)|float %}
|
||||||
|
# {% set hot_temp = params.HOT_TEMP|default(printer.save_variables.variables.hot_temp)|float %}
|
||||||
|
# {% set filepath = params.FILE_PATH|default(printer.save_variables.variables.file_path)|string %}
|
||||||
|
# BED_MESH_PROFILE LOAD={profile_name}
|
||||||
|
# RUN_SHELL_COMMAND CMD=POWER_LOSS_RESUME PARAMS="{z_height} {last_file} {print_temp} {bed_temp} {hot_temp} {filepath}"
|
||||||
|
# SDCARD_PRINT_FILE FILENAME=/.plr/plr.gcode
|
||||||
|
|
||||||
@@ -1,17 +1,25 @@
|
|||||||
# Q1_Pro
|
# Q1_Pro
|
||||||
# V4.4.14 2024-3-14
|
# V4.4.14 2024-3-14
|
||||||
# modify: heater_generic hot -> chamber
|
# update: heater_generic hot -> chamber
|
||||||
# out_put_pin fan0 -> fan_generic cooling_fan
|
# out_put_pin fan0 -> fan_generic cooling_fan
|
||||||
# out_put_pin fan2 -> fan_generic auxiliary_cooling_fan
|
# out_put_pin fan2 -> fan_generic auxiliary_cooling_fan
|
||||||
# out_put_pin fan3 -> fan_generic chamber_circulation_fan
|
# out_put_pin fan3 -> fan_generic chamber_circulation_fan
|
||||||
# heater_fan hot -> heater_fan chamber
|
# heater_fan hot -> heater_fan chamber
|
||||||
# verify_heater hot -> verify_heater chamber
|
# verify_heater hot -> verify_heater chamber
|
||||||
# V4.4.17 2024-3-29
|
# V4.4.17 2024-3-29
|
||||||
# modify: delete comments
|
# update: delete comments
|
||||||
# add time_update macro
|
# add time_update macro
|
||||||
# [bed_mesh] 6,6 ->8,8
|
# [bed_mesh] 6,6 ->8,8
|
||||||
#V4.4.19 2024-4-16
|
# V4.4.19 2024-4-16
|
||||||
# modify: add [chamber_fan chamber_fan]
|
# update: add [chamber_fan chamber_fan]
|
||||||
|
# V4.4.20 2024-6-17
|
||||||
|
# update: [smart_effector]
|
||||||
|
# samples_result: average -> submaxmin
|
||||||
|
# speed: 10 -> 5
|
||||||
|
# sample_retract_dist: 3.0 -> 5.0
|
||||||
|
# [stepper_x]
|
||||||
|
# position_max: 245 -> 246
|
||||||
|
|
||||||
[include timelapse.cfg]
|
[include timelapse.cfg]
|
||||||
[include Adaptive_Mesh.cfg]
|
[include Adaptive_Mesh.cfg]
|
||||||
[include gcode_macro.cfg]
|
[include gcode_macro.cfg]
|
||||||
@@ -77,7 +85,6 @@ min_diameter: 0.3
|
|||||||
use_current_dia_while_delay: False
|
use_current_dia_while_delay: False
|
||||||
pause_on_runout:True
|
pause_on_runout:True
|
||||||
runout_gcode:
|
runout_gcode:
|
||||||
pause
|
|
||||||
RESET_FILAMENT_WIDTH_SENSOR
|
RESET_FILAMENT_WIDTH_SENSOR
|
||||||
M118 Filament run out
|
M118 Filament run out
|
||||||
event_delay: 3.0
|
event_delay: 3.0
|
||||||
@@ -152,7 +159,7 @@ full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper
|
|||||||
endstop_pin:tmc2240_stepper_x:virtual_endstop
|
endstop_pin:tmc2240_stepper_x:virtual_endstop
|
||||||
position_min: -5.5
|
position_min: -5.5
|
||||||
position_endstop: -5.5
|
position_endstop: -5.5
|
||||||
position_max:245
|
position_max:246
|
||||||
homing_speed:50
|
homing_speed:50
|
||||||
homing_retract_dist:0
|
homing_retract_dist:0
|
||||||
homing_positive_dir:False
|
homing_positive_dir:False
|
||||||
@@ -252,7 +259,7 @@ run_current: 0.6
|
|||||||
interpolate: True
|
interpolate: True
|
||||||
stealthchop_threshold: 9999999999
|
stealthchop_threshold: 9999999999
|
||||||
diag_pin:^U_1:PC12
|
diag_pin:^U_1:PC12
|
||||||
driver_SGTHRS:140
|
driver_SGTHRS:130
|
||||||
|
|
||||||
[tmc2209 stepper_z1]
|
[tmc2209 stepper_z1]
|
||||||
uart_pin:U_1: PB7
|
uart_pin:U_1: PB7
|
||||||
@@ -261,7 +268,7 @@ run_current: 0.6
|
|||||||
interpolate: True
|
interpolate: True
|
||||||
stealthchop_threshold: 9999999999
|
stealthchop_threshold: 9999999999
|
||||||
diag_pin:^U_1:PA13
|
diag_pin:^U_1:PA13
|
||||||
driver_SGTHRS:140
|
driver_SGTHRS:130
|
||||||
|
|
||||||
[heater_bed]
|
[heater_bed]
|
||||||
heater_pin: U_1:PB10
|
heater_pin: U_1:PB10
|
||||||
@@ -360,7 +367,7 @@ max_power:1.0
|
|||||||
shutdown_speed:1.0
|
shutdown_speed:1.0
|
||||||
cycle_time:0.01
|
cycle_time:0.01
|
||||||
fan_speed: 0.6
|
fan_speed: 0.6
|
||||||
stepper:stepper_z,stepper_z1
|
stepper:stepper_x,stepper_y
|
||||||
|
|
||||||
[fan_generic cooling_fan]
|
[fan_generic cooling_fan]
|
||||||
pin:gpio2
|
pin:gpio2
|
||||||
@@ -395,11 +402,12 @@ recovery_time:0
|
|||||||
x_offset: 17.6
|
x_offset: 17.6
|
||||||
y_offset: 4.4
|
y_offset: 4.4
|
||||||
z_offset: 0.000001
|
z_offset: 0.000001
|
||||||
speed:10
|
speed:5
|
||||||
|
lift_speed:5
|
||||||
probe_accel:50
|
probe_accel:50
|
||||||
samples: 2
|
samples: 2
|
||||||
samples_result: average
|
samples_result: submaxmin
|
||||||
sample_retract_dist: 3.0
|
sample_retract_dist: 5.0
|
||||||
samples_tolerance: 0.05
|
samples_tolerance: 0.05
|
||||||
samples_tolerance_retries:5
|
samples_tolerance_retries:5
|
||||||
|
|
||||||
@@ -417,105 +425,12 @@ algorithm:bicubic
|
|||||||
bicubic_tension:0.2
|
bicubic_tension:0.2
|
||||||
mesh_pps: 2, 2
|
mesh_pps: 2, 2
|
||||||
vibrate_gcode:
|
vibrate_gcode:
|
||||||
G90
|
Z_DOUDONG
|
||||||
m204 S5000
|
|
||||||
SET_Z_VELOCITY_LIMIT VALUE=15
|
|
||||||
SET_PIN PIN=ctlyd VALUE=1
|
|
||||||
G4 P500
|
|
||||||
G91
|
|
||||||
G1 Z1 F900
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G1 Z1
|
|
||||||
G1 Z-1
|
|
||||||
G90
|
|
||||||
SET_PIN PIN=ctlyd VALUE=0
|
|
||||||
SET_Z_VELOCITY_LIMIT VALUE=10
|
|
||||||
G4 P500
|
|
||||||
|
|
||||||
[filament_switch_sensor fila]
|
[filament_switch_sensor fila]
|
||||||
pause_on_runout: True
|
pause_on_runout: True
|
||||||
runout_gcode:
|
runout_gcode:
|
||||||
PAUSE
|
M118 Filament tangle detected
|
||||||
event_delay: 3.0
|
event_delay: 3.0
|
||||||
pause_delay: 0.5
|
pause_delay: 0.5
|
||||||
switch_pin:U_1:PC3
|
switch_pin:U_1:PC3
|
||||||
|
|||||||
11
config/saved_variables.cfg
Normal file
11
config/saved_variables.cfg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[Variables]
|
||||||
|
bed_temp = 60.0
|
||||||
|
filepath = ''
|
||||||
|
hot_temp = 0.0
|
||||||
|
last_file = ''
|
||||||
|
power_resume_z = 0.0
|
||||||
|
print_temp = 210.0
|
||||||
|
profile_name = 'kamp'
|
||||||
|
was_interrupted = False
|
||||||
|
z_offset = 0.0
|
||||||
|
|
||||||
424
config/timelapse.cfg
Normal file
424
config/timelapse.cfg
Normal file
@@ -0,0 +1,424 @@
|
|||||||
|
# Timelapse klipper macro definition
|
||||||
|
#
|
||||||
|
# Copyright (C) 2021 Christoph Frei <fryakatkop@gmail.com>
|
||||||
|
# Copyright (C) 2021 Alex Zellner <alexander.zellner@googlemail.com>
|
||||||
|
#
|
||||||
|
# This file may be distributed under the terms of the GNU GPLv3 license
|
||||||
|
#
|
||||||
|
# Macro version 1.14
|
||||||
|
#
|
||||||
|
|
||||||
|
##### DO NOT CHANGE ANY MACRO!!! #####
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# #
|
||||||
|
# GET_TIMELAPSE_SETUP: Print the Timelapse setup to console #
|
||||||
|
# #
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
[gcode_macro GET_TIMELAPSE_SETUP]
|
||||||
|
description: Print the Timelapse setup
|
||||||
|
gcode:
|
||||||
|
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||||
|
{% set output_txt = ["Timelapse Setup:"] %}
|
||||||
|
{% set _dummy = output_txt.append("enable: %s" % tl.enable) %}
|
||||||
|
{% set _dummy = output_txt.append("park: %s" % tl.park.enable) %}
|
||||||
|
{% if tl.park.enable %}
|
||||||
|
{% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %}
|
||||||
|
{% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %}
|
||||||
|
{% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %}
|
||||||
|
{% endif %}
|
||||||
|
{% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %}
|
||||||
|
{% if not tl.extruder.fw_retract %}
|
||||||
|
{% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %}
|
||||||
|
{% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %}
|
||||||
|
{% endif %}
|
||||||
|
{% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %}
|
||||||
|
{action_respond_info(output_txt|join("\n"))}
|
||||||
|
|
||||||
|
################################################################################################
|
||||||
|
# #
|
||||||
|
# Use _SET_TIMELAPSE_SETUP [ENABLE=value] [VERBOSE=value] [PARK_ENABLE=value] [PARK_POS=value] #
|
||||||
|
# [PARK_TIME=value] [CUSTOM_POS_X=value] [CUSTOM_POS_Y=value] #
|
||||||
|
# [CUSTOM_POS_DZ=value][TRAVEL_SPEED=value] [RETRACT_SPEED=value] #
|
||||||
|
# [EXTRUDE_SPEED=value] [EXTRUDE_DISTANCE=value] #
|
||||||
|
# [RETRACT_DISTANCE=value] [FW_RETRACT=value] #
|
||||||
|
# #
|
||||||
|
################################################################################################
|
||||||
|
|
||||||
|
[gcode_macro _SET_TIMELAPSE_SETUP]
|
||||||
|
description: Set user parameters for timelapse
|
||||||
|
gcode:
|
||||||
|
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||||
|
##### get min and max bed size #####
|
||||||
|
{% set min = printer.toolhead.axis_minimum %}
|
||||||
|
{% set max = printer.toolhead.axis_maximum %}
|
||||||
|
{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
|
||||||
|
else False %}
|
||||||
|
{% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3),
|
||||||
|
'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)},
|
||||||
|
'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3),
|
||||||
|
'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)},
|
||||||
|
'center': {'x': (max.x-(max.x-min.x)/2)|round(3),
|
||||||
|
'y': (max.y-(max.y-min.y)/2)|round(3)}} %}
|
||||||
|
##### set new values #####
|
||||||
|
{% if params.ENABLE %}
|
||||||
|
{% if params.ENABLE|lower is in ['true', 'false'] %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.VERBOSE %}
|
||||||
|
{% if params.VERBOSE|lower is in ['true', 'false'] %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.CUSTOM_POS_X %}
|
||||||
|
{% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %}
|
||||||
|
{% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.CUSTOM_POS_Y %}
|
||||||
|
{% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %}
|
||||||
|
{% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.CUSTOM_POS_DZ %}
|
||||||
|
{% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %}
|
||||||
|
{% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.PARK_ENABLE %}
|
||||||
|
{% if params.PARK_ENABLE|lower is in ['true', 'false'] %}
|
||||||
|
{% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.PARK_POS %}
|
||||||
|
{% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %}
|
||||||
|
{% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 },
|
||||||
|
'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 },
|
||||||
|
'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 },
|
||||||
|
'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 },
|
||||||
|
'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 },
|
||||||
|
'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz},
|
||||||
|
'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz},
|
||||||
|
'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %}
|
||||||
|
{% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %}
|
||||||
|
{% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]"
|
||||||
|
% params.PARK_POS|upper)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.PARK_TIME %}
|
||||||
|
{% if params.PARK_TIME|float >= 0.0 %}
|
||||||
|
{% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}"
|
||||||
|
{% if params.TRAVEL_SPEED %}
|
||||||
|
{% if params.TRAVEL_SPEED|float > 0.0 %}
|
||||||
|
{% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.RETRACT_SPEED %}
|
||||||
|
{% if params.RETRACT_SPEED|float > 0.0 %}
|
||||||
|
{% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.EXTRUDE_SPEED %}
|
||||||
|
{% if params.EXTRUDE_SPEED|float > 0.0 %}
|
||||||
|
{% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}"
|
||||||
|
{% if params.EXTRUDE_DISTANCE %}
|
||||||
|
{% if params.EXTRUDE_DISTANCE|float >= 0.0 %}
|
||||||
|
{% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.RETRACT_DISTANCE %}
|
||||||
|
{% if params.RETRACT_DISTANCE|float >= 0.0 %}
|
||||||
|
{% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if params.FW_RETRACT %}
|
||||||
|
{% if params.FW_RETRACT|lower is in ['true', 'false'] %}
|
||||||
|
{% if 'firmware_retraction' in printer.configfile.settings %}
|
||||||
|
{% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %}
|
||||||
|
{% else %}
|
||||||
|
{% set _dummy = tl.extruder.update({'fw_retract':False}) %}
|
||||||
|
{% if params.FW_RETRACT|capitalize == 'True' %}
|
||||||
|
{action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}"
|
||||||
|
{% if printer.configfile.settings['gcode_macro pause'] is defined %}
|
||||||
|
{% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %}
|
||||||
|
{% endif %}
|
||||||
|
{% if printer.configfile.settings['gcode_macro resume'] is defined %}
|
||||||
|
{% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %}
|
||||||
|
{% endif %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}"
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# #
|
||||||
|
# TIMELAPSE_TAKE_FRAME: take the next picture #
|
||||||
|
# #
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
######################### definition #########################
|
||||||
|
## enable: enable or disable the next frame. Valid inputs: [True, False]
|
||||||
|
## takingframe: internal use. Valid inputs: [True, False]
|
||||||
|
##
|
||||||
|
## park.enable: enable or disable to park the head while taking a picture. Valid inputs: [True, False]
|
||||||
|
## park.pos : used position for parking. Valid inputs: [center, front_left, front_right, back_left, back_right, custom, x_only, y_only]
|
||||||
|
## park.time : used for the debug macro. Time in s
|
||||||
|
## park.custom.x, park.custom.y: coordinates of the custom parkposition. Unit [mm]
|
||||||
|
## park.custom.dz : custom z hop for the picture. Unit [mm]
|
||||||
|
## park.coord : internal use
|
||||||
|
##
|
||||||
|
## extruder.fw_retract: enable disable fw retraction [True,False]
|
||||||
|
## extruder.extrude : filament extruded at the end of park. Unit [mm]
|
||||||
|
## extruder.retract : filament retract at the start of park. Unit [mm]
|
||||||
|
##
|
||||||
|
## speed.travel : used speed for travel from and to the park positon. Unit: [mm/min]
|
||||||
|
## speed.retract: used speed for retract [mm/min]
|
||||||
|
## speed.extrude: used speed for extrude [mm/min]
|
||||||
|
##
|
||||||
|
## verbose: Enable mesage output of TIMELAPSE_TAKE_FRAME
|
||||||
|
##
|
||||||
|
## restore.absolute.coordinates: internal use
|
||||||
|
## restore.absolute.extrude : internal use
|
||||||
|
## restore.speed : internal use
|
||||||
|
## restore.e : internal use
|
||||||
|
## restore.factor.speed : internal use
|
||||||
|
## restore.factor.extrude : internal use
|
||||||
|
##
|
||||||
|
## macro.pause : internal use
|
||||||
|
## macro.resume : internal use
|
||||||
|
##
|
||||||
|
## is_paused: internal use
|
||||||
|
###############################################################
|
||||||
|
[gcode_macro TIMELAPSE_TAKE_FRAME]
|
||||||
|
description: Take Timelapse shoot
|
||||||
|
variable_enable: False
|
||||||
|
variable_takingframe: False
|
||||||
|
variable_park: {'enable': False,
|
||||||
|
'pos' : 'center',
|
||||||
|
'time' : 0.1,
|
||||||
|
'custom': {'x': 0, 'y': 0, 'dz': 0},
|
||||||
|
'coord' : {'x': 0, 'y': 0, 'dz': 0}}
|
||||||
|
variable_extruder: {'fw_retract': False,
|
||||||
|
'retract': 1.0,
|
||||||
|
'extrude': 1.0}
|
||||||
|
variable_speed: {'travel': 100,
|
||||||
|
'retract': 15,
|
||||||
|
'extrude': 15}
|
||||||
|
variable_verbose: True
|
||||||
|
variable_restore: {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}}
|
||||||
|
variable_macro: {'pause': 'PAUSE', 'resume': 'RESUME'}
|
||||||
|
variable_is_paused: False
|
||||||
|
gcode:
|
||||||
|
{% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %}
|
||||||
|
{% if enable %}
|
||||||
|
{% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or
|
||||||
|
(not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %}
|
||||||
|
{% if park.enable %}
|
||||||
|
{% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '',
|
||||||
|
'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '',
|
||||||
|
'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %}
|
||||||
|
{% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates,
|
||||||
|
'extrude' : printer.gcode_move.absolute_extrude},
|
||||||
|
'speed' : printer.gcode_move.speed,
|
||||||
|
'e' : printer.gcode_move.gcode_position.e,
|
||||||
|
'factor' : {'speed' : printer.gcode_move.speed_factor,
|
||||||
|
'extrude': printer.gcode_move.extrude_factor}} %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}"
|
||||||
|
{% if not printer[printer.toolhead.extruder].can_extrude %}
|
||||||
|
{% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if extruder.fw_retract %}
|
||||||
|
G10
|
||||||
|
{% else %}
|
||||||
|
M83 ; insure relative extrusion
|
||||||
|
G0 E-{extruder.retract} F{speed.retract * 60}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True
|
||||||
|
{macro.pause} ; execute the klipper PAUSE command
|
||||||
|
SET_GCODE_OFFSET X=0 Y=0 ; this will insure that the head parks always at the same position in a multi setup
|
||||||
|
G90 ; insure absolute move
|
||||||
|
{% if "xyz" not in printer.toolhead.homed_axes %}
|
||||||
|
{% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %}
|
||||||
|
{% else %}
|
||||||
|
G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60}
|
||||||
|
{% endif %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True
|
||||||
|
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5
|
||||||
|
M400
|
||||||
|
{% endif %}
|
||||||
|
_TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
[gcode_macro _TIMELAPSE_NEW_FRAME]
|
||||||
|
description: action call for timelapse shoot. must be a seperate macro
|
||||||
|
gcode:
|
||||||
|
{action_call_remote_method("timelapse_newframe",
|
||||||
|
macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park,
|
||||||
|
hyperlapse=params.HYPERLAPSE)}
|
||||||
|
|
||||||
|
[delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME]
|
||||||
|
gcode:
|
||||||
|
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||||
|
{% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %}
|
||||||
|
{% if tl.takingframe %}
|
||||||
|
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5
|
||||||
|
{% else %}
|
||||||
|
{tl.macro.resume} VELOCITY={tl.speed.travel} ; execute the klipper RESUME command
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False
|
||||||
|
{% if not printer[printer.toolhead.extruder].can_extrude %}
|
||||||
|
{action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")}
|
||||||
|
{% else %}
|
||||||
|
{% if tl.extruder.fw_retract %}
|
||||||
|
G11
|
||||||
|
{% else %}
|
||||||
|
G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60}
|
||||||
|
G0 F{tl.restore.speed}
|
||||||
|
{% if tl.restore.absolute.extrude %}
|
||||||
|
M82
|
||||||
|
G92 E{tl.restore.e}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %}
|
||||||
|
{% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %}
|
||||||
|
{% if not tl.restore.absolute.coordinates %} G91 {% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
####################################################################################################
|
||||||
|
# #
|
||||||
|
# HYPERLAPSE: Starts or stops a Hyperlapse video #
|
||||||
|
# Usage: HYPERLAPSE ACTION=START [CYCLE=time] starts a hyperlapse with cycle time (default 30 sec) #
|
||||||
|
# HYPERLAPSE ACTION=STOP stops the hyperlapse recording #
|
||||||
|
# #
|
||||||
|
####################################################################################################
|
||||||
|
|
||||||
|
######################### definition #########################
|
||||||
|
## cycle: cycle time in seconds
|
||||||
|
## run: internal use [True/False]
|
||||||
|
###############################################################
|
||||||
|
[gcode_macro HYPERLAPSE]
|
||||||
|
description: Start/Stop a hyperlapse recording
|
||||||
|
variable_cycle: 0
|
||||||
|
variable_run: False
|
||||||
|
gcode:
|
||||||
|
{% set cycle = params.CYCLE|default(30)|int %}
|
||||||
|
{% if params.ACTION and params.ACTION|lower == 'start' %}
|
||||||
|
{action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)}
|
||||||
|
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True
|
||||||
|
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle}
|
||||||
|
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle}
|
||||||
|
TIMELAPSE_TAKE_FRAME HYPERLAPSE=True
|
||||||
|
{% elif params.ACTION and params.ACTION|lower == 'stop' %}
|
||||||
|
{% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False
|
||||||
|
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("Hyperlapse: No valid input parameter
|
||||||
|
Use:
|
||||||
|
- HYPERLAPSE ACTION=START [CYCLE=time]
|
||||||
|
- HYPERLAPSE ACTION=STOP")}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
[delayed_gcode _HYPERLAPSE_LOOP]
|
||||||
|
gcode:
|
||||||
|
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle}
|
||||||
|
TIMELAPSE_TAKE_FRAME HYPERLAPSE=True
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# #
|
||||||
|
# TIMELAPSE_RENDER: Render the video at print end #
|
||||||
|
# #
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
######################### definition #########################
|
||||||
|
## render: internal use. Valid inputs: [True, False]
|
||||||
|
## run_identifier: internal use. Valid input [0 .. 3]
|
||||||
|
###############################################################
|
||||||
|
[gcode_macro TIMELAPSE_RENDER]
|
||||||
|
description: Render Timelapse video and wait for the result
|
||||||
|
variable_render: False
|
||||||
|
variable_run_identifier: 0
|
||||||
|
gcode:
|
||||||
|
{action_respond_info("Timelapse: Rendering started")}
|
||||||
|
{action_call_remote_method("timelapse_render", byrendermacro="True")}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True
|
||||||
|
{printer.configfile.settings['gcode_macro pause'].rename_existing} ; execute the klipper PAUSE command
|
||||||
|
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5
|
||||||
|
|
||||||
|
[delayed_gcode _WAIT_TIMELAPSE_RENDER]
|
||||||
|
gcode:
|
||||||
|
{% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %}
|
||||||
|
SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1}
|
||||||
|
{% if printer['gcode_macro TIMELAPSE_RENDER'].render %}
|
||||||
|
M117 Rendering {['-','\\','|','/'][ri]}
|
||||||
|
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5
|
||||||
|
{% else %}
|
||||||
|
{action_respond_info("Timelapse: Rendering finished")}
|
||||||
|
M117
|
||||||
|
{printer.configfile.settings['gcode_macro resume'].rename_existing} ; execute the klipper RESUME command
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# #
|
||||||
|
# TEST_STREAM_DELAY: Helper macro to find stream and park delay #
|
||||||
|
# #
|
||||||
|
##########################################################################
|
||||||
|
|
||||||
|
[gcode_macro TEST_STREAM_DELAY]
|
||||||
|
description: Helper macro to find stream and park delay
|
||||||
|
gcode:
|
||||||
|
{% set min = printer.toolhead.axis_minimum %}
|
||||||
|
{% set max = printer.toolhead.axis_maximum %}
|
||||||
|
{% set act = printer.toolhead.position %}
|
||||||
|
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
|
||||||
|
{% if act.z > 5.0 %}
|
||||||
|
G0 X{min.x + 5.0} F{tl.speed.travel|int * 60}
|
||||||
|
G0 X{(max.x-min.x)/2}
|
||||||
|
G4 P{tl.park.time|float * 1000}
|
||||||
|
_TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE
|
||||||
|
G0 X{max.x - 5.0}
|
||||||
|
{% else %}
|
||||||
|
{action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)}
|
||||||
|
{% endif %}
|
||||||
Reference in New Issue
Block a user