diff --git a/README.md b/README.md
index 0a36017..d9e6d04 100644
--- a/README.md
+++ b/README.md
@@ -56,7 +56,7 @@ I am creating these files for my personal use and cannot be held responsible for
Watch for releases and updates.
-
+
## Preface
@@ -64,8 +64,8 @@ Although I've made switching over to Klipper as easy as is possible, it can stil
## Before You Begin
-- On the SV06 Plus, your screen will not work if you install Klipper. You can get it working again via the instructions found [here](https://github.com/fryc88/klipper-sv06plus-screen).
-- Read this documentation _fully!_
+- This entire page is a **13 minute read**. Save yourself _hours of troubleshooting_ and read this documentation **fully!**
+- On the SV06 Plus, your screen will not work if you install Klipper. You can get it _mostly_ working again via the instructions found [here](https://github.com/fryc88/klipper-sv06plus-screen).
- Make sure your printer is in good physical condition, because print and travel speeds will be _a lot faster_ than they were before. Beginner's would be wise to go through the steps mentioned [here](https://github.com/bassamanator/everything-sovol-sv06/blob/main/initialsteps.md). Consider yourself warned.
- Follow the steps in order.
- If an error was reported at a step, do no proceed to the next step.
@@ -133,14 +133,18 @@ You can choose _either_ of the 2 following methods.
### Adjust Configuration with MCU Path
-1. Find what port the `mcu` (printer motherboard) is connected to via `ls -l /dev/serial/by-id/` or `ls -l /dev/serial/by-path/`.
+1. Find what port the `mcu` (printer motherboard) is connected to via **one** of the following commands:
+
+ - `ls /dev/serial/by-id/*`
+ - `ls /dev/serial/by-path/*`
+
1. The output will be something along the lines of
- `lrwxrwxrwx 13 root root 22 Apr 11:10 usb-1a86_USB2.0-Serial-if00-port0 -> ../../ttyUSB0`.
- 2. `usb-1a86_USB2.0-Serial-if00-port0` is the relevant part.
- 3. Therefore, the full path to your `mcu` is either `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0` or `/dev/serial/by-path/usb-1a86_USB2.0-Serial-if00-port0`, depending on the command you used to find the `mcu`.
-2. Adjust the `[mcu]` section in `printer.cfg` accordingly. 🗒️ This is just an **example**:
+ - `/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0`
+
+2. Adjust the `[mcu]` section in `printer.cfg` accordingly.
```yaml
+ # 🗒️ This is just an example
[mcu]
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
restart_method: command
@@ -156,9 +160,13 @@ If the Klipper flash that you did earlier was successful, and you've done everyt
❗☠️ **Power off if there is a collision/problem** ☠️❗
+💡 The ${\small{\textcolor{red}{\texttt{EMERGENCY STOP}}}}$ button in your dashboard works faster than hitting the power switch.
+
+💡 Do a practice emergency stop.
+
💡 I recommend no filament be loaded for any of these steps.
-🗒️ Find explanations for gcode commands at [https://marlinfw.org/](https://marlinfw.org/) and [https://www.klipper3d.org/](https://www.klipper3d.org/G-Codes.html).
+🗒️ Find explanations for gcode commands: [https://marlinfw.org/](https://marlinfw.org/), [https://www.klipper3d.org/](https://www.klipper3d.org/G-Codes.html).
You will be pasting/typing these commands into the Mainsail/Fluidd console.
@@ -193,9 +201,10 @@ But first, adjust your slicer.
You need to adjust the start and end gcode in your slicer. The relevant macros are `PRINT_START` and `PRINT_END`. Find instructions [here](https://ellis3dp.com/Print-Tuning-Guide/articles/passing_slicer_variables.html#slicer-start-g-code).
-If you would like to print a purge line before your print starts, at the end of your start gcode, on a new line add `PURGE_LINE`. 🗒️ This is just an **example**:
+If you would like to print a purge line before your print starts, at the end of your start gcode, on a new line add `PURGE_LINE`.
-```
+```yaml
+# 🗒️ This is just an example
PRINT_START ...
PURGE_LINE
```
diff --git a/cfgs/kamp/Adaptive_Meshing.cfg b/cfgs/kamp/Adaptive_Meshing.cfg
index 21f42a7..ac2c498 100644
--- a/cfgs/kamp/Adaptive_Meshing.cfg
+++ b/cfgs/kamp/Adaptive_Meshing.cfg
@@ -13,12 +13,13 @@ gcode:
{% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} # Get bed mesh min from printer.cfg
{% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} # Get bed mesh max from printer.cfg
{% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} # Get probe count from printer.cfg
- {% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %} # Pull verbose setting from _KAMP_Settings
- {% set probe_dock_enable = printer["gcode_macro _KAMP_Settings"].probe_dock_enable | abs %} # Pull probe dockable probe settings from _KAMP_Settings
- {% set attach_macro = printer["gcode_macro _KAMP_Settings"].attach_macro | string %} # Pull attach probe command from _KAMP_Settings
- {% set detach_macro = printer["gcode_macro _KAMP_Settings"].detach_macro | string %} # Pull detach probe command from _KAMP_Settings
- {% set mesh_margin = printer["gcode_macro _KAMP_Settings"].mesh_margin | float %} # Pull mesh margin setting from _KAMP_Settings
- {% set fuzz_amount = printer["gcode_macro _KAMP_Settings"].fuzz_amount | float %} # Pull fuzz amount setting from _KAMP_Settings
+ {% set kamp_settings = printer["gcode_macro _KAMP_Settings"] %} # Pull variables from _KAMP_Settings
+ {% set verbose_enable = kamp_settings.verbose_enable | abs %} # Pull verbose setting from _KAMP_Settings
+ {% set probe_dock_enable = kamp_settings.probe_dock_enable | abs %} # Pull probe dockable probe settings from _KAMP_Settings
+ {% set attach_macro = kamp_settings.attach_macro | string %} # Pull attach probe command from _KAMP_Settings
+ {% set detach_macro = kamp_settings.detach_macro | string %} # Pull detach probe command from _KAMP_Settings
+ {% set mesh_margin = kamp_settings.mesh_margin | float %} # Pull mesh margin setting from _KAMP_Settings
+ {% set fuzz_amount = kamp_settings.fuzz_amount | float %} # Pull fuzz amount setting from _KAMP_Settings
{% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} # If probe count is only a single number, convert it to 2. E.g. probe_count:7 = 7,7
{% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} # Determine max probe point distance
{% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} # Determine max probe point distance
@@ -28,10 +29,10 @@ gcode:
{% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} # Set y_max from largest object y point
{% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} # Set fuzz_range between 0 and fuzz_amount
- {% set adapted_x_min = (bed_mesh_min[0] + fuzz_amount - mesh_margin, x_min) | max - (fuzz_range | random / 100.0) %} # Adapt x_min to margin and fuzz constraints
- {% set adapted_y_min = (bed_mesh_min[1] + fuzz_amount - mesh_margin, y_min) | max - (fuzz_range | random / 100.0) %} # Adapt y_min to margin and fuzz constraints
- {% set adapted_x_max = (bed_mesh_max[0] - fuzz_amount + mesh_margin, x_max) | min + (fuzz_range | random / 100.0) %} # Adapt x_max to margin and fuzz constraints
- {% set adapted_y_max = (bed_mesh_max[1] - fuzz_amount + mesh_margin, y_max) | min + (fuzz_range | random / 100.0) %} # Adapt y_max to margin and fuzz constraints
+ {% set adapted_x_min = x_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt x_min to margin and fuzz constraints
+ {% set adapted_y_min = y_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt y_min to margin and fuzz constraints
+ {% set adapted_x_max = x_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt x_max to margin and fuzz constraints
+ {% set adapted_y_max = y_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt y_max to margin and fuzz constraints
{% set adapted_x_min = [adapted_x_min , bed_mesh_min[0]] | max %} # Compare adjustments to defaults and choose max
{% set adapted_y_min = [adapted_y_min , bed_mesh_min[1]] | max %} # Compare adjustments to defaults and choose max
@@ -55,49 +56,56 @@ gcode:
{% set points_y = [points_y , probe_count[1]]|min %}
{% if verbose_enable == True %} # If verbose is enabled, print information about KAMP's calculations
+ {% if printer.exclude_object.objects != [] %}
- { action_respond_info( "Algorithm: {}.".format(
- (algorithm),
- )) }
+ { action_respond_info( "Algorithm: {}.".format(
+ (algorithm),
+ )) }
- { action_respond_info("Default probe count: {},{}.".format(
- (probe_count[0]),
- (probe_count[1]),
- )) }
+ { action_respond_info("Default probe count: {},{}.".format(
+ (probe_count[0]),
+ (probe_count[1]),
+ )) }
- { action_respond_info("Adapted probe count: {},{}.".format(
- (points_x),
- (points_y),
- )) }
+ { action_respond_info("Adapted probe count: {},{}.".format(
+ (points_x),
+ (points_y),
+ )) }
- {action_respond_info("Default mesh bounds: {}, {}.".format(
- (bed_mesh_min[0],bed_mesh_min[1]),
- (bed_mesh_max[0],bed_mesh_max[1]),
- )) }
+ {action_respond_info("Default mesh bounds: {}, {}.".format(
+ (bed_mesh_min[0],bed_mesh_min[1]),
+ (bed_mesh_max[0],bed_mesh_max[1]),
+ )) }
- {% if mesh_margin > 0 %}
- {action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format(
- (mesh_margin),
- (mesh_margin),
- )) }
- {% else %}
- {action_respond_info("Mesh margin is 0, margin not increased.")}
- {% endif %}
+ {% if mesh_margin > 0 %}
+ {action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format(
+ (mesh_margin),
+ (mesh_margin),
+ )) }
+ {% else %}
+ {action_respond_info("Mesh margin is 0, margin not increased.")}
+ {% endif %}
- {% if fuzz_amount > 0 %}
- {action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format(
- (fuzz_amount),
- )) }
- {% else %}
- {action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")}
- {% endif %}
+ {% if fuzz_amount > 0 %}
+ {action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format(
+ (fuzz_amount),
+ )) }
+ {% else %}
+ {action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")}
+ {% endif %}
- { action_respond_info("Adapted mesh bounds: {}, {}.".format(
- (adapted_x_min, adapted_y_min),
- (adapted_x_max, adapted_y_max),
- )) }
+ { action_respond_info("Adapted mesh bounds: {}, {}.".format(
+ (adapted_x_min, adapted_y_min),
+ (adapted_x_max, adapted_y_max),
+ )) }
- {action_respond_info("KAMP adjustments successful. Happy KAMPing!")}
+ {action_respond_info("KAMP adjustments successful. Happy KAMPing!")}
+
+ {% else %}
+
+ {action_respond_info("No objects detected! Check your gcode and make sure that EXCLUDE_OBJECT_DEFINE is happening before BED_MESH_CALIBRATE is called. Defaulting to regular meshing.")}
+ G4 P5000 # Wait 5 seconds to make error more visible
+ {% endif %}
{% endif %}
diff --git a/cfgs/kamp/KAMP_Settings.cfg b/cfgs/kamp/KAMP_Settings.cfg
index 9ddcfca..401b91b 100644
--- a/cfgs/kamp/KAMP_Settings.cfg
+++ b/cfgs/kamp/KAMP_Settings.cfg
@@ -1,5 +1,6 @@
# Below you can include specific configuration files depending on what you want KAMP to do:
+# NOTE bassamanator: uncomment the functionality that you want to use from KAMP
[include ./Adaptive_Meshing.cfg] # Include to enable adaptive meshing configuration.
# [include ./Line_Purge.cfg] # Include to enable adaptive line purging configuration.
# [include ./Voron_Purge.cfg] # Include to enable adaptive Voron logo purging configuration.
diff --git a/cfgs/kamp/Smart_Park.cfg b/cfgs/kamp/Smart_Park.cfg
index 2d2acb4..f24ae7e 100644
--- a/cfgs/kamp/Smart_Park.cfg
+++ b/cfgs/kamp/Smart_Park.cfg
@@ -1,4 +1,4 @@
-[gcode_macro Smart_Park]
+[gcode_macro SMART_PARK]
description: Parks your printhead near the print area for pre-print hotend heating.
gcode:
@@ -8,14 +8,18 @@ gcode:
{% set verbose_enable = kamp_settings.verbose_enable | abs %} # Set verbosity
{% set center_x = printer.toolhead.axis_maximum.x / 2 | float %} # Create center point of x for fallback
{% set center_y = printer.toolhead.axis_maximum.y / 2 | float %} # Create center point of y for fallback
+ {% set axis_minimum_x = printer.toolhead.axis_minimum.x | float %}
+ {% set axis_minimum_y = printer.toolhead.axis_minimum.y | float %}
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Gather all object points
{% set x_min = all_points | map(attribute=0) | min | default(center_x) %} # Set x_min from smallest object x point
{% set y_min = all_points | map(attribute=1) | min | default(center_y) %} # Set y_min from smallest object y point
{% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} # Set travel speed from config
{% if purge_margin > 0 and x_min != center_x and y_min != center_y %} # If objects are detected and purge margin
- {% set x_min = [ x_min - purge_margin , x_min ] | max %} # value is greater than 0, move
- {% set y_min = [ y_min - purge_margin , y_min ] | max %} # to purge location + margin
+ {% set x_min = [ x_min - purge_margin , x_min ] | min %} # value is greater than 0, move
+ {% set y_min = [ y_min - purge_margin , y_min ] | min %} # to purge location + margin
+ {% set x_min = [ x_min , axis_minimum_x ] | max %}
+ {% set y_min = [ y_min , axis_minimum_y ] | max %}
{% endif %}
{% if verbose_enable == True %} # Verbose park location
@@ -27,5 +31,8 @@ gcode:
{% endif %}
+ {% if printer.toolhead.position.z < z_height %}
+ G0 Z{z_height} # Move Z to park height if current Z position is lower than z_height
+ {% endif %}
G0 X{x_min} Y{y_min} F{travel_speed} # Move near object area
G0 Z{z_height} # Move Z to park height
diff --git a/cfgs/kamp/Voron_Purge.cfg b/cfgs/kamp/Voron_Purge.cfg
index 30cf5de..6383b96 100644
--- a/cfgs/kamp/Voron_Purge.cfg
+++ b/cfgs/kamp/Voron_Purge.cfg
@@ -15,12 +15,13 @@ gcode:
{% endif %}
# Get purge settings from _Kamp_Settings
- {% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %}
- {% set purge_height = printer["gcode_macro _KAMP_Settings"].purge_height | float %}
- {% set tip_distance = printer["gcode_macro _KAMP_Settings"].tip_distance | float %}
- {% set purge_margin = printer["gcode_macro _KAMP_Settings"].purge_margin | float %}
- {% set purge_amount = printer["gcode_macro _KAMP_Settings"].purge_amount | float %}
- {% set flow_rate = printer["gcode_macro _KAMP_Settings"].flow_rate | float %}
+ {% set kamp_settings = printer["gcode_macro _KAMP_Settings"] %}
+ {% set verbose_enable = kamp_settings.verbose_enable | abs %}
+ {% set purge_height = kamp_settings.purge_height | float %}
+ {% set tip_distance = kamp_settings.tip_distance | float %}
+ {% set purge_margin = kamp_settings.purge_margin | float %}
+ {% set purge_amount = kamp_settings.purge_amount | float %}
+ {% set flow_rate = kamp_settings.flow_rate | float %}
{% set size = 10 | float %}
# Calculate purge origins and centers from objects
@@ -58,33 +59,33 @@ gcode:
{action_respond_info("KAMP purge is not using firmware retraction, it is recommended to configure it.")}
{% endif %}
- SAVE_GCODE_STATE NAME=Prepurge_State # Create gcode state
+ SAVE_GCODE_STATE NAME=Prepurge_State # Create gcode state
- G92 E0 # Reset extruder
- G0 F{travel_speed} # Set travel speed
- G90 # Absolute positioning
- G0 X{purge_x_origin} Y{purge_y_origin+size/2} # Move to purge position
- G0 Z{purge_height} # Move to purge Z height
- M83 # Relative extrusion mode
- G1 E{tip_distance} F{purge_move_speed} # Move tip of filament to nozzle
- G1 X{purge_x_origin+size*0.289} Y{purge_y_origin+size} E{purge_amount/4} F{purge_move_speed}# Purge first line of logo
- G1 E-.5 F2100 # Retract
- G0 Z{purge_height*2} # Z hop
- G0 X{purge_x_origin+size*0.789} Y{purge_y_origin+size} # Move to second purge line origin
- G0 Z{purge_height} # Move to purge Z height
- G1 E.5 F2100 # Recover
- G1 X{purge_x_origin+size*0.211} Y{purge_y_origin} E{purge_amount/2} F{purge_move_speed} # Purge second line of logo
- G1 E-.5 F2100 # Retract
- G0 Z{purge_height*2} # Z hop
- G0 X{purge_x_origin+size*0.711} Y{purge_y_origin} # Move to third purge line origin
- G0 Z{purge_height} # Move to purge Z height
- G1 E.5 F2100 # Recover
- G1 X{purge_x_origin+size} Y{purge_y_origin+size/2} E{purge_amount/4} F{purge_move_speed} # Purge third line of logo
- G1 E-.5 F2100 # Retract
- G92 E0 # Reset extruder distance
- M82 # Absolute extrusion mode
- G0 Z{purge_height*2} F{travel_speed} # Z hop
+ G92 E0 # Reset extruder
+ G0 F{travel_speed} # Set travel speed
+ G90 # Absolute positioning
+ G0 X{purge_x_origin} Y{purge_y_origin+size/2} # Move to purge position
+ G0 Z{purge_height} # Move to purge Z height
+ M83 # Relative extrusion mode
+ G1 E{tip_distance} F{purge_move_speed} # Move tip of filament to nozzle
+ G1 X{purge_x_origin+size*0.289} Y{purge_y_origin+size} E{purge_amount/4} F{purge_move_speed} # Purge first line of logo
+ {RETRACT} # Retract
+ G0 Z{purge_height*2} # Z hop
+ G0 X{purge_x_origin+size*0.789} Y{purge_y_origin+size} # Move to second purge line origin
+ G0 Z{purge_height} # Move to purge Z height
+ {UNRETRACT} # Recover
+ G1 X{purge_x_origin+size*0.211} Y{purge_y_origin} E{purge_amount/2} F{purge_move_speed} # Purge second line of logo
+ {RETRACT} # Retract
+ G0 Z{purge_height*2} # Z hop
+ G0 X{purge_x_origin+size*0.711} Y{purge_y_origin} # Move to third purge line origin
+ G0 Z{purge_height} # Move to purge Z height
+ {UNRETRACT} # Recover
+ G1 X{purge_x_origin+size} Y{purge_y_origin+size/2} E{purge_amount/4} F{purge_move_speed} # Purge third line of logo
+ {RETRACT} # Retract
+ G92 E0 # Reset extruder distance
+ M82 # Absolute extrusion mode
+ G0 Z{purge_height*2} F{travel_speed} # Z hop
- RESTORE_GCODE_STATE NAME=Prepurge_State # Restore gcode state
+ RESTORE_GCODE_STATE NAME=Prepurge_State # Restore gcode state
{% endif %}