diff --git a/README.md b/README.md index 866927d..1e4a1f2 100644 --- a/README.md +++ b/README.md @@ -1,607 +1,58 @@ -# Klipper plugin for a self calibrating Z offset +

+ Z-Calibration Logo +

Automatic Z-Calibration

+

-This is a plugin to self calibrate the nozzle offset to the print surface on a 3D printer -using Klipper. There is no need for a manual Z offset or first layer calibration any more. -It is possible to change any variable in the printer from the temperature, the nozzle, -the flex plate, any modding on the print head or bed or even changing the Z endstop -position value in the Klipper configuration. Any of these changes or even all of them -together do **not** affect the first layer at all. +

+It's like automatically baby-stepping on your 3D printer before every print, and the first layer will +always be perfect - no matter which nozzle or new flex-plate is being tested. +

-Here is a small video for a short demonstration: -[https://streamable.com/wclrmc](https://streamable.com/wclrmc) +

+ + + + + + + + + + + + +

-And now, we have a nice how-to from Kapman: -[https://youtu.be/oQYHFecsTto](https://youtu.be/oQYHFecsTto) +## Documentation -### If you are looking for a RRF version of this automatic Z offset calibration +Visit the [Wiki](https://github.com/protoloft/klipper_z_calibration/wiki) to view the full documentation. -Then, you can find it [here](https://github.com/pRINTERnOODLE/Auto-Z-calibration-for-RRF-3.3-or-later-and-Klicky-Probe) from pRINTERnOODLE - really fantastic to see this :tada: +The latest release notes are [here](https://github.com/protoloft/klipper_z_calibration/wiki/Changelog). -### Many thanks for all your feedback to make this happen +:pushpin: **And remember:** The smaller the switch-offset, the further the + nozzle is away from the bed! :wink: -And, if you love my work and would like to support me, please feel free to do this here: +## Further Resources -[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/X8X1C0DTD) - -# Changes - -- **v0.9.3** (2022-..........) - - Split the first movement to the endstop into separate X and Y moves to prevent hitting the dock -- **v0.9.2** (2022-07-08) - - The probe is now docked again before raising an error, if end_gcode is used (thanks to top-gun) - - Probings are more consistent now as the probing sequence is also applied for the bed probing - - More secure: the check for an attached probe is now after the movement to the probing site -- **v0.9.1** (2022-04-06) - - The dummy system service for Moonraker's update manager is removed :tada: - - **:exclamation:Please update this plugin and Moonraker, adapt your moonraker.conf and execute - the install.sh script again!** -- **v0.9.0** (2022-04-05) - - **CAUTION:** The X and Y position configurations are now merged to a combined X,Y parameter, - - **:exclamation:Please update your Configuration!** - - The CALIBRATE_Z command has an optional parameter for the probing position on the bed - - The restriction for a relative reference index in the "bed_mesh" section is removed - - Some other small changes from the failed Klipper PR are merged back now - - Example configurations are removed because they were just examples and confused many people -- **v0.8.1** (2022-02-21) - - Now, the relative reference index (RRI) of the bed mesh is read every time the calibration - starts. So, feel free to use any adaptive mesh macro :tada: - - Checks for homed axes and attached probe just before using it - - A new Z-Tilt macro in the examples - - Improvements of the documentation for installation, configuration and switch_offset -- **v0.8.0** (2021-08-09) - - New configurations for executing G-Code commands (useful for V1 users) - - Bugfix for configuring the z_calibration too early (many thanks to Frix-x), - - New example configurations - - **Action needed** for the Moonraker update, see: [Moonraker Update Manager](#moonraker-update-manager) -- **v0.7.0** (2021-06-23) - - New "PROBE_Z_ACCURACY" command - - Renaming of the dummy service (**CAUTION**: the configuration needs to be adapted for this!) - - Fix in "_SET_ACC" Macro -- **v0.6.2** (2021-06-01) - - As desired, added Moonraker Update possibility. -- **v0.5** (2021-05-30) - - Added compatibility for newer Klipper versions. -- **v0.4** (2021-05-17) - - The "calibrate_z:probe_bed_x|y" settings can be omitted in the configuration and the - "mesh:relative_reference_index" of the bed mesh is taken as default instead. -- **v0.3** (2021-05-13) - - A new option to first probe down fast before recording the probing samples is added. - - And all indirect properties from other sections can be customized now. -- **v0.2** (2021-05-12) - - The probing repeatability is now increased dramatically by using the probing - procedure instead of the homing procedure! - -# Table of Content - ->:pray: **Please:** read this document carefully! Any details from feedbacks and trouble ->shootings are documented here! - -- [Why This](#why-this) -- [Requirements](#requirements) -- [What It Does](#what-it-does) - - [Drawback](#drawback) - - [Interference](#interference) - - [Example](#example) - - [Thermal Frame Expansion](#thermal-frame-expansion) -- [How To Install It](#how-to-install-it) - - [Moonraker Update Manager](#moonraker-update-manager) -- [How To Configure It](#how-to-configure-it) - - [Preconditions](#preconditions) - - [Configurations](#configurations) - - [Bed Mesh](#bed-mesh) - - [Switch Offset](#switch-offset) -- [How To Test It](#how-to-test-it) -- [How To Use It](#how-to-use-it) - - [Command CALIBRATE_Z](#command-calibrate_z) - - [Command PROBE_Z_ACCURACY](#command-probe_z_accuracy) -- [Ooze Mitigation](#ooze-mitigation) -- [Disclaimer](#disclaimer) - -## Why This - -- With a Z endstop where the tip of nozzle drives on the endstop switch (like the one in - the Voron V1 or V2), you can exchange nozzles without adapting the offset: - ![endstop offset](pictures/endstop-offset.png) -- Or, by using a mag-probe (or SuperPinda, but this is not probing the surface directly - and thus needs an other offset which is not as constant as the one of a switch) - configured as Z endstop, you can exchange the flex plates without adapting the offset: - ![probe offset](pictures/probe-offset.png) -- But, why can't you get both of it? Or even more.. ? - -And this is what I did with this plugin. I just combined these two probing methods to be -completely independent of any offset calibrations - forever. This is so amazing! :tada: - -## Requirements - -- A Z endstop where the tip of the nozzle drives on a switch (like the standard - Voron V1/V2 enstop). **It will not work with the virtual pin of the probe as endstop!** - It is not essential to have a Voron printer for this - but this kind of endstop. -- A magnetic switch based probe at the print head - instead of the stock inductive probe - (e.g. [this ones from Annex](https://github.com/Annex-Engineering/Quickdraw_Probe), - or the popular drop in replacement [KlickyProbe](https://github.com/jlas1/Klicky-Probe) - with many mounting options) -- Both, the Z endstop and mag-probe are configured properly and homing and QGL are working. -- The "z_calibration.py" file needs to be copied to the `klipper/klippy/extras` folder. - Klipper will then load this file if it finds the "[z_calibration]" configuration section. - It does not interfere with the Moonraker's Klipper update since git ignores unknown - files. -- It's good practice to use the probe switch as normally closed. Then, macros can detect - if the probe is attached/released properly. The plugin is also able to detect that - the mag-probe is attached to the print head - otherwise it will stop! -- (My previous Klipper macro for compensating the temperature based expansion of the - Z endstop rod is **not** needed anymore.) - ->:point_up: **Note:** After copying the pyhton script, a full Klipper service restart is -> needed to load it! - -## What It Does - -1. A normal homing of all axes using the Z endstop for Z (this is not part of this plugin). - Now we have a zero point in Z. Everything is in relation to this point now. So, a new - homing would change everything, since the homing is not that precise. That is one point, - why absolute values of the offset are not so relevant. -2. Determine the height of the nozzle by probing the tip of it on the Z endstop - (this can be slightly different to the homed one): - ![nozzle position](pictures/nozzle-position.png) -3. Determine the height of the mag-probe by probing the body of the switch on the - z-endstop: - ![switch position](pictures/switch-position.png) -4. Calculate the offset between the tip of the nozzle and the trigger point of the - mag-probe: - - `nozzle switch offset = mag probe height - nozzle height + switch offset` - - ![switch offset](pictures/switch-offset.png) -5. Determine the height of the print surface by probing one point with the mag-probe. -6. Now, calculate the final offset: - - `probe offset = probed height - calculated nozzle switch offset` - -7. Finally, the calculated offset is applied by using the `SET_GCODE_OFFSET` command - (a previous offset is reset before!). - -### Drawback - -The only downside is, that the trigger point of the mag-probe cannot be probed directly. -This is why the body of the switch is clicked on the endstop. This small offset between the -body of the switch and the trigger point can be taken from the data sheet of the switch and -is hardly ever influenced in any way. And, this is the perfect setting for fine tuning -the first layer. - -### Interference - -Temperature or humidity changes are not a big deal since the switch is not affected much -by them and all values are probed in a small time period and only the relations to each -other are used. The nozzle height in step 2 can be determined some time later and even -many celsius higher in the printer, compared to the homing in step 1. That is why the -nozzle is probed again and can vary a little to the first homing position. - -### Example - -The output of the calibration with all determined positions looks like this -(the offset is the one which is applied as GCode offset): - -```text -Z-CALIBRATION: ENDSTOP=-0.300 NOZZLE=-0.300 SWITCH=6.208 PROBE=7.013 --> OFFSET=-0.170 -``` - -The endstop value is the homed Z position which is always zero or the configure -"stepper_z:position_endstop" setting - and in this case, it's even the same as the -probed nozzle hight. - -### Thermal Frame Expansion - -There is a further Klipper plugin for adapting the Z height continuously to the thermal -expansion of the printer frame after starting a print. It is from alchemyEngine and -can be found -[here](https://github.com/alchemyEngine/klipper_frame_expansion_comp). - -## How To Install It - -To install this plugin, you need to copy the `z_calibration.py` file into the `extras` -folder of klipper. Like: - -```bash -/home/pi/klipper/klippy/extras/z_calibration.py -``` - -An alternative would be to clone this repo and run the `install.sh` script. Like: - -```bash -cd /home/pi -git clone https://github.com/protoloft/klipper_z_calibration.git -./klipper_z_calibration/install.sh -``` - -It's safe to execute the install script multiple times. - -More on this in the [Moonraker Update Manager](#moonraker-update-manager) section. - -### Moonraker Update Manager - ->:bulb: **NEW:** With a current Moonraker version, the dummy service is not -> necessary anymore. If you have updated to the 0.9.1 version, you need to adapt the -> following configuration block in your "moonraker.conf" file. The old dummy service -> can be removed by executing the install script again. Like: -> `/home/pi/klipper_z_calibration/install.sh` - -It's possible to keep this extension up to date with the Moonraker's update manager by -adding this configuration block to the "moonraker.conf" of your printer: - -```text -[update_manager client z_calibration] -type: git_repo -path: ~/klipper_z_calibration -origin: https://github.com/protoloft/klipper_z_calibration.git -install_script: install.sh -managed_services: klipper -``` - -This requires this repository to be cloned into your home directory (e.g. /home/pi): - -```bash -git clone https://github.com/protoloft/klipper_z_calibration.git -``` - -The install script assumes that Klipper is also installed in your home directory under -"klipper": `${HOME}/klipper`. - ->:point_up: **NOTE:** If your Moonraker is not on a recent version, you may get an error -> with the "managed_services" line! - -## How To Configure It - -### Preconditions - -As a precondition, the probe needs to be configured properly. It must work flawlessly! -If you don't know how, **please have a look at the -[KlickyProbe](https://github.com/jlas1/Klicky-Probe) and how to configure it!** -There is also a very good but complex example configuration from -[zellneralex](https://github.com/zellneralex/klipper_config/tree/master). - -Now, if the probe works reliably, Then this auto Z offset calibration is basically configured -by adding the `z_calibration` section. All possible properties and it's default values -are documented here under [configurations](#configurations). - -A minimal start configuration could look like this: - -```text -[z_calibration] -nozzle_xy_position: -switch_xy_position: -bed_xy_position: -switch_offset: -start_gcode: -#before_switch_gcode: -end_gcode: -``` - -It is good practice to use more than one sample and use "median" as "probe:samples_result". -And it's **important** to configure an appropriate probe offset in X, Y and **Z**. The -Z offset does not need to be an exact value, since we do not use it as an offset, but it -needs to be roughly a real value! - -It even doesn't matter what "stepper_z:position_endstop" value is configured in Klipper. -All positions are relative to this point - only the absolute values are different. But, -it's advisable to configure a safe value here to not crash the nozzle into the build -plate by accident. The plugin only changes the GCode offset and it's still possible to -move the nozzle beyond this offset. - -### Configurations - ->:bulb: **NEW:** The X and Y coordinates are now combined into one option with a "X,Y" value. - -The following configuration is needed to activate the plugin and to set some needed values: - -```text -[z_calibration] -nozzle_xy_position: -# A X, Y coordinate (e.g. 100,100) of the nozzle, clicking on the Z endstop. -switch_xy_position: -# A X, Y coordinate (e.g. 100,100) of the probe's switch body, clicking on -# the Z endstop. -bed_xy_position: default from relative_reference_index of bed_mesh -# a X, Y coordinate (e.g. 100,100) where the print surface (e.g. the center -# point) is probed. These coordinates will be adapted by the -# probe's X and Y offsets. The default is the relative_reference_index -# of the configured bed_mesh, if configured. It's possible to change the relative -# reference index at runtime or use the GCode argument BED_POSITION of CALIBRATE_Z. -switch_offset: -# The trigger point offset of the used mag-probe switch. -# Larger values will position the nozzle closer to the bed. -# This needs to be find out manually. More on this later -# in this section.. -max_deviation: 1.0 -# The maximum allowed deviation of the calculated offset. -# If the offset exceeds this value, it will stop! -# The default is 1.0 mm. -samples: default from "probe:samples" section -# The number of times to probe each point. The probed z-values -# will be averaged. The default is from the probe's configuration. -samples_tolerance: default from "probe:samples_tolerance" section -# The maximum Z distance (in mm) that a sample may differ from other -# samples. The default is from the probe's configuration. -samples_tolerance_retries: default from "probe:samples_tolerance_retries" section -# The number of times to retry if a sample is found that exceeds -# samples_tolerance. The default is from the probe's configuration. -samples_result: default from "probe:samples_result" section -# The calculation method when sampling more than once - either -# "median" or "average". The default is from the probe's configuration. -clearance: 2 * z_offset from the "probe:z_offset" section -# The distance in mm to move up before moving to the next -# position. The default is two times the z_offset from the probe's -# configuration. -position_min: default from "stepper_z:position_min" section. -# Minimum valid distance (in mm) used for probing move. The -# default is from the Z rail configuration. -speed: 50 -# The moving speed in X and Y. The default is 50 mm/s. -lift_speed: default from "probe:lift_speed" section -# Speed (in mm/s) of the Z axis when lifting the probe between -# samples and clearance moves. The default is from the probe's -# configuration. -probing_speed: default from "stepper_z:homing_speed" section. -# The fast probing speed (in mm/s) used, when probing_first_fast -# is activated. The default is from the Z rail configuration. -probing_second_speed: default from "stepper_z:second_homing_speed" section. -# The slower speed (in mm/s) for probing the recorded samples. -# The default is second_homing_speed of the Z rail configuration. -probing_retract_dist: default from "stepper_z:homing_retract_dist" section. -# Distance to retract (in mm) before probing the next sample. -# The default is homing_retract_dist from the Z rail configuration. -probing_first_fast: false -# If true, the first probing is done faster by the probing speed. -# This is to get faster down and the result is not recorded as a -# probing sample. The default is false. -start_gcode: -# A list of G-Code commands to execute prior to each calibration command. -# See docs/Command_Templates.md for G-Code format. This can be used to -# attach the probe. -before_switch_gcode: -# A list of G-Code commands to execute prior to each probing on the -# mag-probe. See docs/Command_Templates.md for G-Code format. This can be -# used to attach the probe after probing on the nozzle and before probing -# on the mag-probe. -end_gcode: -# A list of G-Code commands to execute after each calibration command. -# See docs/Command_Templates.md for G-Code format. This can be used to -# detach the probe afterwards. -``` +A great how-to video by Kapman: [https://youtu.be/oQYHFecsTto](https://youtu.be/oQYHFecsTto) ->:bulb: **INFO:** The settings about probing from this section do not apply to the probing on the ->bed, since the script just calls the probe to do it's job at this point. Only the first fast down ->probing is covered by this script directly. +##### And if you are looking for an RRF version of this automatic z-offset calibration -### Bed Mesh +You can find one [here](https://github.com/pRINTERnOODLE/Auto-Z-calibration-for-RRF-3.3-or-later-and-Klicky-Probe) from pRINTERnOODLE - This is really fantastic to see :tada: ->:bulb: **NEW:** Adaptive mesh macros can be used now by redefining the RRI of the mesh and/or by -> using the new "BED_POSITION" parameter of the "CALIBRATE_Z" command. +## Thanks for all your feedback and support! -If you use a bed mesh, it is advised to configure it with a relative reference index -("bed_mesh:relative_reference_index" setting). But this is not enforced anymore. With a configured -relative reference, the position at this index will become the Z=0 point of the mesh. So, it's -good to calibrate Z at this point. If the configuration lacks a "bed_xy_position", then the -relative reference index will be read every time the calibration is started. Thereby it's -possible to change this index by a macro at runtime. +And if you like my work and want to support me, you can do so here: -This is used by adaptive mesh macros. They create a smaller mesh which is only on the area used -by the starting print. One example would be the macros from Frix-x which can be found -[here](https://github.com/Frix-x/klipper-voron-V2). - ->:point_up: **NOTE:** Be careful with adaptive mesh macros because they use Klipper's mesh function ->in an unsupported way! It's important to calibrate Z correctly for the created mesh! - -### Switch Offset - -The "z_calibration:switch_offset" is the already mentioned offset from the switch body -(which is the probed position) to the actual trigger point above it. A starting point -for this value can be taken from the data sheet of the Omron switch (D2F-5: 0.5mm and SSG-5H: 0.7mm). -It's safe to start with a little less depending on the squishiness you prefer for the -first layer (for me, it's about 0.46 for the D2F-5). So, with a smaller offset value, the nozzle -is more away from the bed! The value cannot be negative. - -For example, the data sheet of the D2F-5: - -![endstop offset](pictures/d2f-example.png) - -And the calculation of the offset base: - -```text -offset base = OP (Operation Position) - switch body height - 0.5 mm = 5.5 mm - 5 mm -``` - -#### How About A Negative Switch Offset? - -First of all, there cannot be a negative switch_offset! If the switch_offset is already -really small after tuning it and the nozzle is still too close to the bed, then there is -something wrong measuring the probe's body. The following image illustrates this context: - -![switch offset](pictures/negative-switch-offset.png) - -So, please check your endstop, the rod of the endstop and the position touching the body -of the probe's switch! - -> **:exclamation: Please, do NOT drive the endstop pin on the switch's actuator directly! -> Otherwise, you do it on your own risk and I will reject any request for support!** - -If you do so, a correct or at least a working measured hight at the switch is all up to the -different forces in this system. But forces can change due to many reasons. The best case -would be that the actuator is pushed all the way in until the pin touches the body of the -switch - before the endstop is triggered! But it can also be anything in between... -So, there is no reason to not touch the body directly in a safe and robust way :thumbsup: - -## How To Test It - -Do not bother too much about absolute values of the calculated offsets. These can vary a lot. -Only the real position from the nozzle to the bed counts. To test this, the result of the -calibration can be queried by `GET_POSITION` first: - -```text -> CALIBRATE_Z -> Z-CALIBRATION: ENDSTOP=-0.300 NOZZLE=-0.267 SWITCH=2.370 PROBE=3.093 --> OFFSET=-0.010000 -> GET_POSITION -> mcu: stepper_x:17085 stepper_y:15625 stepper_z:-51454 stepper_z1:-51454 stepper_z2:-51454 stepper_z3:-51454 -> stepper: stepper_x:552.500000 stepper_y:-47.500000 stepper_z:10.022500 stepper_z1:10.022500 stepper_z2:10.022500 stepper_z3:10.022500 -> kinematic: X:252.500000 Y:300.000000 Z:10.022500 -> toolhead: X:252.500000 Y:300.000000 Z:10.021472 E:0.000000 -> gcode: X:252.500000 Y:300.000000 Z:9.990000 E:0.000000 -> gcode base: X:0.000000 Y:0.000000 Z:-0.010000 E:0.000000 -> gcode homing: X:0.000000 Y:0.000000 Z:-0.010000 -``` - -Here, the Z position in "gcode base" reflects the calibrated Z offset. - -Then, the offset can be tested by moving the nozzle slowly down to zero by moving it in -multiple steps. It's good to do this by using GCodes, since the offset is applied as -GCode-Offset. For example like this: - -```gcode -> G90 -> G0 Z5 -> G0 Z3 -> G0 Z1 -> G0 Z0.5 -> G0 Z0.3 -> G0 Z0.1 -``` - -Check the distance to the print surface after every step. If there is a small discrepancy -(which should be smaller than the offset base from the switch's data sheet), then adapt -the "z_calibration:switch_offset" by that value. Decreasing the "switch_offset" will move -the nozzle more away from the bed. - -And finally, if you have double checked, that the calibrated offset is correct, you can go -for fine tuning the "z_calibration:switch_offset" by actually printing first layer tests. - -## How To Use It - ->:point_up: **NOTE:** If you calibrate Z within a `SAVE_GCODE_STATE` and `RESTORE_GCODE_STATE`, -> the calibrated offset will be lost after calling `RESTORE_GCODE_STATE`! - -### Command CALIBRATE_Z - ->:bulb: **NEW:** The configured position for probing on the bed can now be overwritten by -> using the new "BED_POSITION" parameter. - -The Z offset calibration is started by: - -```text -CALIBRATE_Z [BED_POSITION=] -``` - -The optional "BED_POSITION" parameter can be used to define a different position to be -probed on the bed. But, if the "bed_xy_position" is not configured and there is no bed mesh -or relative reference index, this parameter becomes mandatory. - -The "BED_POSITION" argument overrules any configured bed position. - -If the probe is not attached to the print head, it will abort the calibration process -(if configured normally closed). So, macros can help here to attach and detach the probe like -this: - -```gcode -[gcode_macro CALIBRATE_Z] -rename_existing: BASE_CALIBRATE_Z -gcode: - {% set bed_position = params.BED_POSITION|default('None') %} - G28 # can also be a conditional homing macro - M117 Z-Calibration.. - ATTACH_PROBE # a macro for fetching the probe first - {% if bed_position != 'None' %} - BASE_CALIBRATE_Z BED_POSITION={bed_position} - {% else %} - BASE_CALIBRATE_Z - {% endif %} - DETACH_PROBE # and parking it afterwards (or DOCK_PROBE in klicky macros) - M117 -``` - ->:bulb: **INFO:** Meanwhile, it's possible to use the "start_gcode" or "before_switch_gcode" -> and the "end_gcode" instead of rewriting the `CALIBRATE_Z` command! - -Then the `CALIBRATE_Z` command needs to be added to the `PRINT_START` macro. - -**:exclamation: And remove any Z offset adjustments here (like `SET_GCODE_OFFSET`) :exclamation:** - -The print start sequence could look like this: - -1. Home all axes -2. Heat up the bed and nozzle (and chamber) -3. Get probe, make QGL or Z-Tilt, park probe -4. Purge and clean the nozzle if available -5. (Get probe), CALIBRATE_Z, (park probe) -6. (Adjust Z offset if needed) -7. Print intro line -8. Start printing... - -For textured print plates it can be necessary to adjust the offset to be more close to the bed. -This can be done from the Slicers start GCode by adding a parameter to the `PRINT_START` macro -**after** the Z calibration: - -```text -# Adjust the G-Code Z offset if needed -SET_GCODE_OFFSET Z_ADJUST={params.Z_ADJUST|default(0.0)|float} MOVE=1 -``` - -Then, you can use `PRINT_START Z_ADJUST=0.0` in your Slicer. This does **not** reset the -offset set by the calibration but adjusts it by the given value! - ->:point_up: **NOTE:** Do not home Z again after running this calibration or it needs to be executed again! - -Now, I wish you happy printing with an always perfect first layer - doesn't matter what you just -modded on your printer's head or bed or what nozzle and flex plate you like to use for your next -project. It's just perfect :smiley: - -#### Resetting the Calibration - -The calibration can be resetted by executing this GCode command: - -```text -SET_GCODE_OFFSET Z=0.0 -``` - -### Command PROBE_Z_ACCURACY - -There is also a PROBE_Z_ACCURACY command to test the accuracy of the Z endstop: - -```text -PROBE_Z_ACCURACY [PROBE_SPEED=] [LIFT_SPEED=] [SAMPLES=] [SAMPLE_RETRACT_DIST=] -``` - -It calculates the maximum, minimum, average, median and standard deviation of multiple probe samples on -the endstop by taking the configured nozzle position on the endstop. The optional parameters default -to their equivalent setting in the z_calibration config section. - -## Ooze Mitigation - -Ooze with any nozzle probe endstop can cause inaccuracies, as the filament will continue to leak or -deform over the space of multiple probes. It is highly recommended to take some measures to prevent -ooze buildup before the nozzle probe portion of this plugin. - -A slow long retraction, of as much as 15mm at print end, can reduce the potential for ooze. If you do -this, consider adding a comparable extrude as the last command in your print start sequence to bring -the plastic back to the tip. (Retracts longer than 5mm have been linked to clogs in many hotends, -especially the Rapido. This may be best considered a last resort, depending on exact hardware and -filament.) - -Heating the nozzle about a minute before scrubbing - using a purge bucket - will allow all the -remaining plastic time to drain from the nozzle and be cleaned away by a simple wipe. If using a -purge and scrubbing bucket, do not purge filament at this stage. - -An endstop switch that requires a stronger activation force, such as sexbolt with a spring, or -unklicky z, can help squash any remaining ooze and improve consistency. +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/X8X1C0DTD) -Probing can be done with a hotend temperature below the full temperature for the print. If you print -at 250, you can preheat the nozzle to 180, and run this script before finishing the heat up to full -temperature. This may have varying effects depending on temperatures used. +## A Quick Demonstration -Also consider picking up your probe prior to your nozzle wipe, to allow this script to probe the -nozzle immediately after cleaning it. +
## Disclaimer -You use this on your onw risk! I'm not responsible for any damage this could lead to. Although, -this extension works rock solid for me and many more for almost a year now. Be always carefully -and double check everything while configuring or working with your printer. Do never leave it -unattended during prints! +You use it at your onw risk! I'm not responsible for any damage that might result. Although, +this extension works rock solid for me and many others for years now. Always be careful +and double check everything when configuring or working with your printer. And as always, +never leave unattended while printing! diff --git a/pictures/banner.png b/pictures/banner.png new file mode 100644 index 0000000..1512c36 Binary files /dev/null and b/pictures/banner.png differ