From 42bab87f6b7cd2925c3cc2b09118e8e818280372 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 13 Sep 2023 18:36:37 -0400 Subject: [PATCH 01/18] Adjust extruder.max_extrude_cross_section. --- printer.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/printer.cfg b/printer.cfg index 9565a9f..bbfe350 100644 --- a/printer.cfg +++ b/printer.cfg @@ -109,6 +109,7 @@ pid_ki: 1.326 min_temp: 0 max_temp: 300 max_extrude_only_distance: 150.0 +# max_extrude_cross_section: 5 # NOTE Uncomment this line if you intend on using KAMP pruge [tmc2209 extruder] uart_pin: PC14 From fddbbc2acc941f9d20d8c472258e0f48b48ffcd6 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 17:20:39 -0500 Subject: [PATCH 02/18] Adjust readme. --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 563b9df..9b75d25 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ I am creating these files for my personal use and cannot be held responsible for - Filament runout sensor usage implemented. - Minimum configuration settings for Mainsail/Fluiddpi to work. - A SuperSlicer config bundle that contains the printer configurations for the SV06/Plus, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). -- `NEW` A PrusaSlicer config bundle based on Ellis' SuperSlicer Profiles. +- `NEW` dancing blob A PrusaSlicer config bundle based on Ellis' SuperSlicer Profiles. - Bed model and texture to use in SuperSlicer/PrusaSlicer. - Macros - **Improved** mechanical gantry calibration/`G34` macro that provides the user audio feedback, and time to check the calibration. @@ -45,8 +45,8 @@ I am creating these files for my personal use and cannot be held responsible for - Parking macros (parks the printhead at various locations): `PARKFRONT`, `PARKFRONTLOW`, `PARKREAR`, `PARKCENTER`, `PARKBED`. - Load/unload filament macros. - `PURGE_LINE` macro. - - `NEW` `TEST_SPEED` macro. Find instructions [here](#how-do-i-use-the-test_speed-macro). -- `NEW` Klipper Adaptive Meshing & Purging (KAMP) added (disabled by default)! Read about it [here](#how-do-i-enable-kamp-klipper-adaptive-meshing--purging). + - `NEW` dancing blob `TEST_SPEED` macro. Find instructions [here](#how-do-i-use-the-test_speed-macro). +- `NEW` dancing blob Klipper Adaptive Meshing & Purging (KAMP) added (disabled by default)! Read about it [here](#how-do-i-enable-kamp-klipper-adaptive-meshing--purging). ## Stay Up-to-Date @@ -66,8 +66,8 @@ Although I've made switching over to Klipper as easy as is possible, it can stil - 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. -- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. Note that most of the micro USB cables that you find at home are _unlikely_ to be data cables, and it's not possible to tell just by looking. -- [Disable](https://github.com/bassamanator/everything-sovol-sv06/blob/main/initialsteps.md#disable-usb-cable-5v-pin) the USB cable's 5V pin. +- It is assumed that you are connected to your host Raspberry Pi (or other host device) via SSH, and that your printer motherboard is connected to the host via a data USB cable. 💡 Most of the micro USB cables that you find at home are _unlikely_ to be data cables, and it's not possible to tell just by looking. +- [Disable](https://github.com/bassamanator/everything-sovol-sv06/blob/main/howto.md#disable-usb-cable-5v-pin) the USB cable's 5V pin. - It is also assumed that the username on the host device is `pi`. If that is not the case, you will have to manually edit `moonraker.conf` and `cfgs/misc-macros.cfg` and change any mentions of `/home/pi` to `/home/yourUserName`. - Klipper _must_ be installed on the host Raspberry Pi for everything to work. Easiest is to use a [MainsailOS](https://github.com/mainsail-crew/mainsail/releases/latest) image. Alternatively, you can install `Fluidd` or `Mainsail` via [KIAUH](https://github.com/th33xitus/kiauh). - Robert Redford's performance in _Spy Game (2001)_ was superb! @@ -86,7 +86,8 @@ Please note: - For the sake of simplicity, I will refer to the klipper firmware file as `klipper.bin` even though the actual filename is something along the lines of `klipper-v0.11.0-148-g52f4e20c.bin`. - The firmware file is located in the `misc` folder. - Flashing will only work if current firmware filename is _different from previous flashing procedure_. The `.bin` is also important. -- Many users have reported having issues flashing Klipper using the Sovol microSD card. +- You may find this [video](https://youtu.be/p6l253OJa34) useful. +- ⚠️ Many users have reported having issues flashing Klipper using the Sovol microSD card. #### 1. Prepare the microSD Card for Flashing with These Parameters @@ -104,9 +105,7 @@ Please note: 5. Turn on the printer and wait a minute (usually takes 10 seconds). 6. Turn off the printer and remove the microSD. -At this point, it's not possible to tell with certainty whether your flash was successful, continue on with the guide. - -You may find this [video](https://youtu.be/p6l253OJa34) useful. +⏲️ At this point, it's not possible to tell with certainty whether your flash was successful, continue on with the guide. ### Download OSS Klipper Configuration @@ -136,10 +135,9 @@ You can choose _either_ of the 2 following methods. `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_ `mcu` section: +2. Adjust the `[mcu]` section in `printer.cfg` accordingly. 🗒️ This is just an **example**: - ``` + ```yaml [mcu] serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 restart_method: command @@ -157,7 +155,7 @@ If the Klipper flash that you did earlier was successful, and you've done everyt 💡 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 at [https://marlinfw.org/](https://marlinfw.org/) and [https://www.klipper3d.org/](https://www.klipper3d.org/G-Codes.html). You will be pasting/typing these commands into the Mainsail/Fluidd console. @@ -182,15 +180,17 @@ You will be pasting/typing these commands into the Mainsail/Fluidd console. 1. `DO_CREATE_MESH` 2. `SAVE_CONFIG` (once completed) -If you've made it here, then your printer has been Klipperized, and is ready to print! +🏁 If you've made it here, then your printer has been Klipperized, and is ready to print! 🏁 But first, adjust your slicer. ## Adjust Your Slicer +💡 If you are using the config bundles found on this repo, you can skip this step. + 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`. 🗒️ This is just an **example**: ``` PRINT_START ... From 122c5a1d3a85a1fcad872350f36ee519eff50b1e Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 20:36:24 -0500 Subject: [PATCH 03/18] Adjust readme. --- README.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9b75d25..cd2b362 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ I am creating these files for my personal use and cannot be held responsible for Watch for releases and updates. -githubstar +github star ## Preface @@ -62,7 +62,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil ## Before You Begin -- Read this documentation _fully!_ +- This entire page is a **13 minute read**. Save yourself _hours of troubleshooting_ and read this documentation **fully!** - 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. @@ -130,14 +130,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 @@ -153,9 +157,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 `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. From a9c2e25ff4c21d272098ed0b2b87b6ed22e9e955 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 20:43:53 -0500 Subject: [PATCH 04/18] Adjust readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd2b362..f5ad618 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ If the Klipper flash that you did earlier was successful, and you've done everyt ❗☠️ **Power off if there is a collision/problem** ☠️❗ -💡 The `emergency stop` button in your dashboard works faster than hitting the power switch. +💡 The ${\small{\textcolor{red}{\texttt{EMERGENCY STOP}}}}$ button in your dashboard works faster than hitting the power switch. 💡 Do a practice emergency stop. From dca53a3c52faa0d3b53487e7fc4649cd27517b21 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 20:45:26 -0500 Subject: [PATCH 05/18] Adjust readme. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f5ad618..4c4053a 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ You can choose _either_ of the 2 following methods. 2. Adjust the `[mcu]` section in `printer.cfg` accordingly. ```yaml - 🗒️ This is just an example + #🗒️ This is just an example [mcu] serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 restart_method: command From 8a62ed2701d8398f1f2e948947c5541b625cb9b5 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 20:49:19 -0500 Subject: [PATCH 06/18] Adjust readme. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4c4053a..f1feed3 100644 --- a/README.md +++ b/README.md @@ -198,9 +198,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 ``` From f032246743a49ac6a6642c8162c3b22e0a680023 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 20:57:28 -0500 Subject: [PATCH 07/18] Pull in updates to KAMP. --- cfgs/kamp/Adaptive_Meshing.cfg | 98 ++++++++++++++++++---------------- cfgs/kamp/Smart_Park.cfg | 13 +++-- cfgs/kamp/Voron_Purge.cfg | 65 +++++++++++----------- 3 files changed, 96 insertions(+), 80 deletions(-) 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/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 %} From f22aacbb0ed2b683fe6c860c64feb72260515de6 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 21:01:33 -0500 Subject: [PATCH 08/18] Adjust readme, add comment to KAMP settings. --- README.md | 4 ++-- cfgs/kamp/KAMP_Settings.cfg | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f1feed3..03c7f33 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ You can choose _either_ of the 2 following methods. 2. Adjust the `[mcu]` section in `printer.cfg` accordingly. ```yaml - #🗒️ This is just an example + # 🗒️ This is just an example [mcu] serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 restart_method: command @@ -201,7 +201,7 @@ You need to adjust the start and end gcode in your slicer. The relevant macros a 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 +# 🗒️ This is just an example PRINT_START ... PURGE_LINE ``` 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. From c51947fe0471407a1d10c69cb5a182269a985b58 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Sun, 19 Nov 2023 21:35:08 -0500 Subject: [PATCH 09/18] Adjust PS config bundle. --- misc/PrusaSlicer_config_bundle-SV06-Both.ini | 135 ++++++++++++++++++- 1 file changed, 130 insertions(+), 5 deletions(-) diff --git a/misc/PrusaSlicer_config_bundle-SV06-Both.ini b/misc/PrusaSlicer_config_bundle-SV06-Both.ini index 83e2c35..00e687a 100644 --- a/misc/PrusaSlicer_config_bundle-SV06-Both.ini +++ b/misc/PrusaSlicer_config_bundle-SV06-Both.ini @@ -1,4 +1,4 @@ -# generated by PrusaSlicer 2.6.0+linux-x64-GTK3 on 2023-08-23 at 23:37:05 UTC +# generated by PrusaSlicer 2.6.1+linux-x64-GTK3 on 2023-11-20 at 02:32:36 UTC [print:0.20mm QUALITY SV06 Ellis] avoid_crossing_curled_overhangs = 0 @@ -73,6 +73,7 @@ max_volumetric_speed = 15 min_bead_width = 85% min_feature_size = 25% min_skirt_length = 20 +mmu_segmented_region_interlocking_depth = 0 mmu_segmented_region_max_width = 0 notes = only_retract_when_crossing_perimeters = 1 @@ -249,6 +250,7 @@ max_volumetric_speed = 15 min_bead_width = 85% min_feature_size = 25% min_skirt_length = 20 +mmu_segmented_region_interlocking_depth = 0 mmu_segmented_region_max_width = 0 notes = only_retract_when_crossing_perimeters = 1 @@ -262,7 +264,7 @@ overhangs = 1 perimeter_acceleration = 1000 perimeter_extruder = 1 perimeter_extrusion_width = 0.46 -perimeter_generator = classic +perimeter_generator = arachne perimeter_speed = 150 perimeters = 3 post_process = @@ -425,6 +427,7 @@ max_volumetric_speed = 15 min_bead_width = 85% min_feature_size = 25% min_skirt_length = 20 +mmu_segmented_region_interlocking_depth = 0 mmu_segmented_region_max_width = 0 notes = only_retract_when_crossing_perimeters = 1 @@ -438,7 +441,7 @@ overhangs = 1 perimeter_acceleration = 1000 perimeter_extruder = 1 perimeter_extrusion_width = 0.4 -perimeter_generator = classic +perimeter_generator = arachne perimeter_speed = 150 perimeters = 4 post_process = @@ -601,6 +604,7 @@ max_volumetric_speed = 15 min_bead_width = 85% min_feature_size = 25% min_skirt_length = 20 +mmu_segmented_region_interlocking_depth = 0 mmu_segmented_region_max_width = 0 notes = only_retract_when_crossing_perimeters = 1 @@ -777,6 +781,7 @@ max_volumetric_speed = 15 min_bead_width = 85% min_feature_size = 25% min_skirt_length = 20 +mmu_segmented_region_interlocking_depth = 0 mmu_segmented_region_max_width = 0 notes = only_retract_when_crossing_perimeters = 1 @@ -907,16 +912,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 8 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -971,16 +981,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -1035,16 +1050,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -1099,16 +1119,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1163,16 +1188,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = 0.6 filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1227,16 +1257,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = 0.8 filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1291,16 +1326,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = 0.8 filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1355,16 +1395,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";Full spool weight: 1280g" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = 25 filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -1419,16 +1464,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1483,16 +1533,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1547,16 +1602,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1611,16 +1671,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";Full spool weight: 1280g" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = 30 filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -1675,16 +1740,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";Full spool weight: 1280g" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -1739,16 +1809,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "- Original print temp was 235.\n- Retraction lenght was 0.3." filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = 30 filament_settings_id = "Generic FLEX" filament_soluble = 0 @@ -1803,16 +1878,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = 0.1 filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1867,16 +1947,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 15 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1931,16 +2016,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";max fan speed changed from 0 to 100" filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -1995,16 +2085,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.7 +filament_retract_length_toolchange = nil filament_retract_lift = 0.6 filament_retract_lift_above = 0.26 filament_retract_lift_below = 250 filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -2059,16 +2154,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = 0.6 +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = 25 filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -2123,16 +2223,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";max fan speed changed from 0 to 100" filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -2187,16 +2292,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 12 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";max fan speed changed from 0 to 100" filament_ramming_parameters = "120 100 5.70968 6.03226 7 8.25806 9 9.19355 9.3871 9.77419 10.129 10.3226 10.4516 10.5161| 0.05 5.69677 0.45 6.15484 0.95 8.76774 1.45 9.20323 1.95 9.95806 2.45 10.3871 2.95 10.5677 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "" filament_soluble = 0 @@ -2251,16 +2361,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";Full spool weight: 1280g" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -2315,16 +2430,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = "" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -2379,16 +2499,21 @@ filament_loading_speed = 28 filament_loading_speed_start = 3 filament_max_volumetric_speed = 0 filament_minimal_purge_on_wipe_tower = 15 +filament_multitool_ramming = 0 +filament_multitool_ramming_flow = 10 +filament_multitool_ramming_volume = 10 filament_notes = ";Full spool weight: 1280g" filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" filament_retract_before_travel = nil filament_retract_before_wipe = nil filament_retract_layer_change = nil filament_retract_length = nil +filament_retract_length_toolchange = nil filament_retract_lift = nil filament_retract_lift_above = nil filament_retract_lift_below = nil filament_retract_restart_extra = nil +filament_retract_restart_extra_toolchange = nil filament_retract_speed = nil filament_settings_id = "ABS - KVP" filament_soluble = 0 @@ -2580,7 +2705,7 @@ z_offset = 0 [physical_printer:Local SV06] host_type = octoprint -preset_name = Sovol SV06 +preset_name = preset_names = "Sovol SV06" print_host = http://10.0.0.51 printer_technology = FFF @@ -2594,7 +2719,7 @@ printhost_user = [physical_printer:Local SV06 Plus] host_type = octoprint -preset_name = Sovol SV06 Plus +preset_name = preset_names = "Sovol SV06 Plus" print_host = http://10.0.0.51 printer_technology = FFF From 051fa0eb39589b54a09bd4715dc974e6e18ae0bd Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 20 Nov 2023 01:28:19 -0500 Subject: [PATCH 10/18] Adjust readme structure, minor. --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 03c7f33..bc407c7 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,8 @@ I am creating these files for my personal use and cannot be held responsible for 1. [Adjust Configuration with MCU Path](#adjust-configuration-with-mcu-path) 2. [Configure Your Printer](#configure-your-printer) - [Adjust Your Slicer](#adjust-your-slicer) -- [Directory Structure](#directory-structure) - [Support Me](#support-me) +- [Directory Structure](#directory-structure) - [FAQ](#faq) - [Useful Resources](#useful-resources) - [Sovol Official Links](#sovol-official-links) @@ -62,7 +62,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil ## Before You Begin -- This entire page is a **13 minute read**. Save yourself _hours of troubleshooting_ and read this documentation **fully!** +- This entire page is a **13 minute read**. Save yourself _hours of troubleshooting_ and read this documentation fully. - 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. @@ -79,7 +79,7 @@ Although I've made switching over to Klipper as easy as is possible, it can stil ### Flash Firmware -💡 _If you have already flashed klipper onto your motherboard in the past, you can skip this step._ +💡 If you have already flashed klipper onto your motherboard in the past, you can skip this step. Please note: @@ -206,6 +206,12 @@ PRINT_START ... PURGE_LINE ``` +## Support Me + +Please ⭐ star this repository! + +If you found my work useful, consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). + ## Directory Structure This repository contains many files and folders. Some are _necessary_ for this Klipper configuration to work, others are not. @@ -251,12 +257,6 @@ This repository contains many files and folders. Some are _necessary_ for this K └── settings.json ``` -## Support Me - -Please ⭐ star this repository! - -If you found my work useful, consider buying me a [Ko-fi](https://ko-fi.com/bassamanator). - ## FAQ ##### How do I import a configuration bundle into SuperSlicer/PrusaSlicer? From 82bead899660162c7e6b633a2a079e3495153517 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 20 Nov 2023 02:08:21 -0500 Subject: [PATCH 11/18] Adjust readme: directory structure section. --- .vscode/settings.json | 1 + README.md | 40 ++++++++++------------------------------ 2 files changed, 11 insertions(+), 30 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 9bef908..226a9c2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,6 +23,7 @@ "moonraker", "normalsize", "octahedroflake", + "osskc", "PARKBED", "PARKCENTER", "PARKFRONT", diff --git a/README.md b/README.md index bc407c7..154e25e 100644 --- a/README.md +++ b/README.md @@ -218,43 +218,23 @@ This repository contains many files and folders. Some are _necessary_ for this K - **Necessary** items are marked with a ✅. - Items that can _optionally_ be deleted are marked with a ❌. + -``` -├── cfgs ✅ -│ ├── adxl-direct.cfg -│ ├── adxl-rp2040.cfg -│ ├── adxl-rpi-pico-2x.cfg -│ ├── MECHANICAL_GANTRY_CALIBRATION.cfg -│ ├── misc-macros.cfg -│ ├── PARKING.cfg -│ └── TEST_SPEED.cfg +```sh +├── cfgs/ ✅ ├── CODE_OF_CONDUCT.md ❌ ├── CONTRIBUTING.md ❌ -├── .github ❌ -│ ├── FUNDING.yml -│ └── ISSUE_TEMPLATE -│ ├── bug_report.md -│ └── feature_request.md +├── .github/ ❌ ├── .gitignore ❌ -├── images ❌ -│ ├── cup-border.png -│ ├── githubstar.gif -│ ├── heart.gif -│ ├── logo_white_stroke.png -│ └── party_blob.gif -├── misc ❌ -│ ├── klipper-v0.11.0-148-g52f4e20c.bin -│ ├── M503-output.yml -│ ├── marlin-SV06V2.0.0A_2.24.bin -│ ├── SuperSlicer_config_bundle.ini -│ ├── sv06-buildPlate.png -│ ├── SV06-buildPlate.stl -│ └── SV06-texture.svg +├── images/ ❌ +├── LICENSE ❌ +├── misc/ ❌ ├── moonraker.conf ✅ +├── osskc.cfg ✅ ├── printer.cfg ✅ ├── README.md ❌ -└── .vscode ❌ - └── settings.json +├── SECURITY.md ❌ +└── .vscode/ ❌ ``` ## FAQ From ed1a6584196b8c6796c2b94367e2e70133111fd1 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 20 Nov 2023 02:30:26 -0500 Subject: [PATCH 12/18] Adjust readme. --- README.md | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 154e25e..3c1e0ef 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,11 @@ I am creating these files for my personal use and cannot be held responsible for - 💥 This Klipper configuration is an _endpoint_, meaning that it contains **everything** that you could possibly need in order to have an excellent Klipper experience! 💥 - Filament runout sensor usage implemented. -- Minimum configuration settings for Mainsail/Fluiddpi to work. -- A SuperSlicer config bundle that contains the printer configurations for the SV06/Plus, as well as what are considered by many to be the best print settings available for any FDM printer ([Ellis' SuperSlicer Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles)). -- `NEW` dancing blob A PrusaSlicer config bundle based on Ellis' SuperSlicer Profiles. +- Minimum configuration settings for Mainsail/Fluidd. +- Pre-configured configuration bundles based on the [Ellis SuperSlicer Print Profiles](https://github.com/AndrewEllis93/Ellis-SuperSlicer-Profiles) + - SuperSlicer + - PrusaSlicer + - Printer profiles: SV06; SV06 Plus - Bed model and texture to use in SuperSlicer/PrusaSlicer. - Macros - **Improved** mechanical gantry calibration/`G34` macro that provides the user audio feedback, and time to check the calibration. @@ -45,8 +47,8 @@ I am creating these files for my personal use and cannot be held responsible for - Parking macros (parks the printhead at various locations): `PARKFRONT`, `PARKFRONTLOW`, `PARKREAR`, `PARKCENTER`, `PARKBED`. - Load/unload filament macros. - `PURGE_LINE` macro. - - `NEW` dancing blob `TEST_SPEED` macro. Find instructions [here](#how-do-i-use-the-test_speed-macro). -- `NEW` dancing blob Klipper Adaptive Meshing & Purging (KAMP) added (disabled by default)! Read about it [here](#how-do-i-enable-kamp-klipper-adaptive-meshing--purging). + - `TEST_SPEED` macro. Find instructions [here](#how-do-i-use-the-test_speed-macro). +- Klipper Adaptive Meshing & Purging (KAMP) integrated. Read about it [here](#how-do-i-enable-kamp-klipper-adaptive-meshing--purging). ## Stay Up-to-Date @@ -260,12 +262,12 @@ The printer will beep upon: Make the following changes according to your needs. All beeping will be disabled _except_ during gantry calibration. -| File | `cfgs/misc-macros.cfg` | -| --------------- | -------------------------- | -| Section | `[gcode_macro _globals]` | -| Variable | `variable_beeping_enabled` | -| Disable beeping | `0` | -| Enable beeping | `1` | +| File | `cfgs/misc-macros.cfg` | +| -------- | -------------------------- | +| Section | `[gcode_macro _globals]` | +| Variable | `variable_beeping_enabled` | +| Disable | `0` | +| Enable | `1` (default) | ##### I want to use a filament sensor. How do I set it up? @@ -275,12 +277,12 @@ You can find information about the physical setup [here](https://github.com/bass Make the following changes according to your needs. -| File | `cfgs/misc-macros.cfg` | -| -------------- | ---------------------------------- | -| Section | `[gcode_macro _globals]` | -| Variable | `variable_filament_sensor_enabled` | -| Disable sensor | `0` | -| Enable sensor | `1` | +| File | `cfgs/misc-macros.cfg` | +| -------- | ---------------------------------- | +| Section | `[gcode_macro _globals]` | +| Variable | `variable_filament_sensor_enabled` | +| Disable | `0` (default) | +| Enable | `1` | ##### My filament runout sensor works, but I just started a print without any filament loaded. What gives? @@ -316,7 +318,7 @@ The printhead is now parked front center waiting for you to insert filament. You ##### How do I enable KAMP (Klipper Adaptive Meshing & Purging)? -Although this repo contains all the code from the KAMP repository, only the `mesh` functionality of KAMP has been configured and tested. +Although this repo contains all the code from the KAMP repository, only the `mesh` functionality of KAMP has been configured and tested. To enable other functionality, adjust `/cfgs/kamp/KAMP_Settings.cfg`. The [Label objects setting](https://docs.mainsail.xyz/overview/features/exclude-objects#enable-the-label-objects-setting-in-your-slicer) in your slicer must be enabled for KAMP to work. @@ -330,7 +332,7 @@ Adjust according to your needs. | -------- | ------------------------ | | Section | `[gcode_macro _globals]` | | Variable | `variable_kamp_enable` | -| Disable | `0` | +| Disable | `0` (default) | | Enable | `1` | ##### How do I use the `TEST_SPEED` macro? From 62e2e96e0c4f2eccc2020b9ce0ff014807f64a0f Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Mon, 20 Nov 2023 03:14:27 -0500 Subject: [PATCH 13/18] Adjust readme: FAQs. --- README.md | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 3c1e0ef..1dbf3cb 100644 --- a/README.md +++ b/README.md @@ -241,26 +241,24 @@ This repository contains many files and folders. Some are _necessary_ for this K ## FAQ -##### How do I import a configuration bundle into SuperSlicer/PrusaSlicer? +### How do I import a configuration bundle into SuperSlicer/PrusaSlicer? Please see [this discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/13). -##### How do I print using SuperSlicer? +### How do I print using SuperSlicer? Please see [this discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/14). -##### When does beeping occur? +### When does beeping occur? The printer will beep upon: - Filament runout. - Filament change/`M600`. - Upon `PRINT_END`. -- `MECHANICAL_GANTRY_CALIBRATION`/`G34`. +- `MECHANICAL_GANTRY_CALIBRATION`/`G34` (beeping will occur even if beeping is disabled, as long as you have a speaker on your board). -##### How do I disable beeping? - -Make the following changes according to your needs. All beeping will be disabled _except_ during gantry calibration. +Adjust behaviour according to your needs. | File | `cfgs/misc-macros.cfg` | | -------- | -------------------------- | @@ -269,13 +267,11 @@ Make the following changes according to your needs. All beeping will be disabled | Disable | `0` | | Enable | `1` (default) | -##### I want to use a filament sensor. How do I set it up? +### I want to use a filament sensor. How do I set it up? You can find information about the physical setup [here](https://github.com/bassamanator/everything-sovol-sv06#filament-sensor). -##### I have a simple filament sensor connected. How do I enable/disable it? - -Make the following changes according to your needs. +Adjust behaviour according to your needs. | File | `cfgs/misc-macros.cfg` | | -------- | ---------------------------------- | @@ -284,28 +280,28 @@ Make the following changes according to your needs. | Disable | `0` (default) | | Enable | `1` | -##### My filament runout sensor works, but I just started a print without any filament loaded. What gives? +### My filament runout sensor works, but I just started a print without any filament loaded. What gives? A simple runout sensor can only detect a change in state. So, if you start a print without filament loaded, the printer will not know that there is no filament loaded. You should test your sensor by having filament loaded, starting a print, then cutting the filament. The expected behaviour is that the print will pause, and as long as you have beeping enabled, you will hear 3 annoying beeps. -##### What happens when I put in `M600`/colour change at a certain layer? +### What happens when I put in `M600`/colour change at a certain layer? 1. The printer will beep 3 times (not annoyingly). 2. Printing will stop. 3. The printhead will park itself front center. 4. The hotend will turn off, but the bed will remain hot. -##### What happens when I pause a print? +### What happens when I pause a print? Same behaviour as `M600`/colour change _except_ there won't be any beeping. -##### What happens when filament runs out? +### What happens when filament runs out? _If_ you have a working filament sensor, the same behaviour as `M600`/colour change will occur _except_ the beeps will be fairly annoying. -##### How do I resume a print after a colour change or filament runout? +### How do I resume a print after a colour change or filament runout? -⚠️ _Do not disable the stepper motors during this process!_ +⚠️ Do not disable the stepper motors during this process! The printhead is now parked front center waiting for you to insert filament. You will: @@ -316,7 +312,7 @@ The printhead is now parked front center waiting for you to insert filament. You - OR, you can push some filament by hand _making sure to first disengage the extruder's spring loaded arm_. 3. Hit resume in your Klipper dashboard. -##### How do I enable KAMP (Klipper Adaptive Meshing & Purging)? +### How do I enable KAMP (Klipper Adaptive Meshing & Purging)? Although this repo contains all the code from the KAMP repository, only the `mesh` functionality of KAMP has been configured and tested. To enable other functionality, adjust `/cfgs/kamp/KAMP_Settings.cfg`. @@ -326,7 +322,7 @@ The [Label objects setting](https://docs.mainsail.xyz/overview/features/exclude- ⚠️ KAMP cannot be used with low-powered devices such as the Raspberry Pi Zero. -Adjust according to your needs. +Adjust behaviour according to your needs. | File | `cfgs/misc-macros.cfg` | | -------- | ------------------------ | @@ -335,7 +331,7 @@ Adjust according to your needs. | Disable | `0` (default) | | Enable | `1` | -##### How do I use the `TEST_SPEED` macro? +### How do I use the `TEST_SPEED` macro? ⚠️ This is for advanced users only, with well oiled machines. You can cause serious damage to your printer if you're not careful. ☠️ **You have been warned** ☠️. From 4b42fcccd6f77f69282aa4c82bcd6d0b9081fba9 Mon Sep 17 00:00:00 2001 From: Bassam <61985779+bassamanator@users.noreply.github.com> Date: Tue, 21 Nov 2023 01:24:26 -0500 Subject: [PATCH 14/18] Update CONTRIBUTING.md --- CONTRIBUTING.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30a0878..fe035e1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,14 @@ # Contribution Guidelines -When contributing, please ... +When contributing, please: - provide a clear and concise explanation of your pull request. -- try to make small changes, ie, make many small pull requests as opposed to a single large pull request. This allows me to check your work more quickly, thus merge more quickly. +- try to make small changes, ie, make many small pull requests as opposed to a single large pull request. - try to follow the patterns I've already established. +Contributions to `README.md` should do some or all of the following: +- add clarity +- reduce complexity for the user +- reduce verbosity +- fix errors + Thank you. From 89183cad941ab0f64201ce7014326a104f6d3623 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 22 Nov 2023 19:05:26 -0500 Subject: [PATCH 15/18] Adjust MECHANICAL_GANTRY_CALIBRATION.cfg: change to CONDITIONAL_BEEP. --- README.md | 2 +- cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1dbf3cb..9690417 100644 --- a/README.md +++ b/README.md @@ -256,7 +256,7 @@ The printer will beep upon: - Filament runout. - Filament change/`M600`. - Upon `PRINT_END`. -- `MECHANICAL_GANTRY_CALIBRATION`/`G34` (beeping will occur even if beeping is disabled, as long as you have a speaker on your board). +- `MECHANICAL_GANTRY_CALIBRATION`/`G34`. Adjust behaviour according to your needs. diff --git a/cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg b/cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg index f99852c..3a9f928 100644 --- a/cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg +++ b/cfgs/MECHANICAL_GANTRY_CALIBRATION.cfg @@ -72,16 +72,16 @@ gcode: SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={my_current} ; drop current {% endif %} - BEEP I=1 + CONDITIONAL_BEEP I=1 G4 P200 ; Probably not necessary, it is here just for sure SET_KINEMATIC_POSITION Z={z_max - 25} ; Trick printer into beleiving the gantry is 25mm lower than it is ; CHANGED G1 Z{z_max} F{6 * 60} ; based on above figures, there will be 20mm worth of grinding ; CHANGED - BEEP I=2 + CONDITIONAL_BEEP I=2 G4 P10000 ; wait 10 seconds G1 Z{z_max -6} F{6 * 60} ; move 4mm down - BEEP I=3 + CONDITIONAL_BEEP I=3 G4 P200 ; same as the first one SET_TMC_CURRENT STEPPER=stepper_z CURRENT={oldcurrent} HOLDCURRENT={oldhold} From cf544f43cdc7c183cdd9b3531cb1649b109465eb Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Wed, 22 Nov 2023 21:04:08 -0500 Subject: [PATCH 16/18] Update klipper.bin. --- README.md | 4 ++++ images/make-menuconfig.png | Bin 0 -> 74070 bytes misc/klipper-v0.11.0-148-g52f4e20c.bin | Bin 24244 -> 0 bytes misc/klipper-v0.12.0-10-gea2f6bc0.bin | Bin 0 -> 26092 bytes 4 files changed, 4 insertions(+) create mode 100644 images/make-menuconfig.png delete mode 100755 misc/klipper-v0.11.0-148-g52f4e20c.bin create mode 100644 misc/klipper-v0.12.0-10-gea2f6bc0.bin diff --git a/README.md b/README.md index 9690417..634dac7 100644 --- a/README.md +++ b/README.md @@ -343,6 +343,10 @@ Some tips: - Pay close attention throughout the run, so that you can click ${\small{\textcolor{red}{\texttt{EMERGENCY STOP}}}}$ at a moment's notice. - This macro will simply help you determine the maximum speed your printhead and bed can reliably move at, not necessarily print at. The bottleneck for my SV06, for example, is the 15mm/s^2 that the hotend maxes out at (well under 200mm/s actual print speed). +### How do I compile my own firmware? + +Please see [this discussion](https://github.com/bassamanator/Sovol-SV06-firmware/discussions/111). + ## Useful Resources - [Everything Sovol SV06](https://github.com/bassamanator/everything-sovol-sv06) diff --git a/images/make-menuconfig.png b/images/make-menuconfig.png new file mode 100644 index 0000000000000000000000000000000000000000..644263629294cc15c8ef5815c1f935b4a2610d38 GIT binary patch literal 74070 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 uyd);t!ZT?bj~} Date: Thu, 23 Nov 2023 01:19:26 -0500 Subject: [PATCH 17/18] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e6411c7..631bb83 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -36,5 +36,14 @@ If applicable, add screenshots to help explain your problem. **Is your local copy of this configuration up to date?** - This configuration changes all the time, when did you install it? Are you sure you're running the latest version? +**What slicer are you using?** +- PrusaSlicer, SuperSlicer, etc. + +**Are you using the config bundles from this repo?** +- Yes/No. + +**Did you [Adjust your slicer](https://github.com/bassamanator/Sovol-SV06-firmware#adjust-your-slicer)? +- Yes/No + **Additional context** Add any other context about the problem here. From 189a612e33b6e668b3a82dae0f40e9f31e703c90 Mon Sep 17 00:00:00 2001 From: Bassam Husain Date: Thu, 23 Nov 2023 01:32:40 -0500 Subject: [PATCH 18/18] Adjust bug_report. --- .github/ISSUE_TEMPLATE/bug_report.md | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 631bb83..20b225a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -12,6 +12,7 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -24,26 +25,38 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **What printer are you using?** + - SV06, SV06 Plus, etc. **What kind of device are you using to host Klipper?** - - OS: [e.g. old laptop, PC, Raspberry Pi] - - Version: [] + +- OS: [e.g. old laptop, PC, Raspberry Pi] +- Version: [] **How did you install Klipper?** - - Manual install, KIAUH, MainsailOS, FluiddPi, etc. + +- Manual install, KIAUH, MainsailOS, FluiddPi, etc. **Is your local copy of this configuration up to date?** + - This configuration changes all the time, when did you install it? Are you sure you're running the latest version? **What slicer are you using?** -- PrusaSlicer, SuperSlicer, etc. + +- [ ] PrusaSlicer +- [ ] SuperSlicer +- [ ] Cura +- [ ] OrcaSlicer **Are you using the config bundles from this repo?** -- Yes/No. -**Did you [Adjust your slicer](https://github.com/bassamanator/Sovol-SV06-firmware#adjust-your-slicer)? -- Yes/No +- [ ] Yes +- [ ] No + +**Did you [Adjust your slicer](https://github.com/bassamanator/Sovol-SV06-firmware#adjust-your-slicer)**? + +- [ ] Yes +- [ ] No **Additional context** Add any other context about the problem here.