A probe is a switch (much like an Endstop) used to find where something is located automatically.
Smoothie will use it to move until the probe is “triggered” and stop there.
It can be used on CNC mills to:
It can be used on 3D printers to:
Different strategies are useful for different geometries of machines, click on one to go to it:
NOTE When G30 stores the probe position or prints out the value, it is in actuator units not necessarily in mm. This is only an issue for rotary deltas where the actuator units are degrees not mm. Most other configurations it will be mm.
Making the probe retractable allows the probe not to be in the way of the plastic when it is not used.
You will need a probe switch attached to the machine’s actuator, or a bed able to trigger an end stop input when the hotend touches it. A point detection is best as the actual position is important for probing. (proximity probes are suboptimal as they do not detect the point position).
[!WARNING] A probe is not an endstop and therefore cannot be used to Home the Z axis. You need a Z endstop to use G28 to home the Z axis. Below are some instructions on how you can set the bed Z height using a probe (G30). NOTE that gamma_max in the endstop configuration IS used to set the maximum default travel for a probe command (G30) ONLY IF zprobe.max_z is not defined.
A bit more: You have two choices:
The point is you configure your sensor as either a probe or an endstop, not both. You can still use it for both leveling/calibration and bed seeking, it’s just that if it’s a probe (and not an endstop), you use a different Gcode (G30) than if it were an endstop (G28).
Here is a table of the common sensor types, with their pros, cons, and our advice:
Type | Uses | Pros | Cons | Our rating | Advice |
---|---|---|---|---|---|
Mechanical switch | Endstops, retractable Z-probes | Cheap, very durable, very precise/repeatable | None | This is the simplest, and also by chance the best sensor. Don’t use anything else unless you have a very good reason to. Just getting a fancier sensor because it feels cool to do so, is most likely going to bite you in the back quickly. | |
Optical switch | Endstops, retractable Z-probes | Cheap, durable, very precise/repeatable | Dust can block light path after some time | This can be used in place of mechanical switches in most situations, has similar advantages, and doesn’t produce any sound. | |
Hall effect | Endstops, bed probe | Fairly cheap, non-contact, variable precision/repeatability | Requires magnets, which accumulates ambient metal dust, can lack repeatability | A fair non-contact option if contact is an issue in your setup. | |
Inductive | Endstops, bed probe | Non-contact | Expensive, difficult to wire, substandard repeatability, 24-36V requirement, endstop input protection (voltage divider) required | You probably shouldn’t use these unless you have a very good reason. | |
Capacitive | Endstops, bed probe | Non-contact, can be used with glass bed | Expensive, difficult to wire, substandard repeatability, 24-36V requirement, endstop input protection (voltage divider) required | You probably shouldn’t use these unless you have a very good reason. | |
Force sensitive resistor (FSR) | Bed probe | Can be used under a glass bed, non-contact, can be very reliable if set up correctly | Difficult to set up correctly, finicky, expensive, analog meaning it requires an adapter, more complex to wire | You probably shouldn’t use these unless you have a very good reason. | |
IR probes | Z probe, bed probe | Non-contact | Expensive, analog meaning it requires an adapter, terrible repeatability/accuracy, more complex to wire | You probably shouldn’t use these unless you have a very good reason. | |
Bltouch | Retractable Z-probes | Cheap, very durable, very precise/repeatable, retractable (equivalent to a servo-mounted mechanical switch) | None, other than the added complexity of retracting | The mechanical switches are the best sensors by far, but this is very similar, essentially emulating a servo-mounted mechanical switch. |
The Reprap probe page also has information on this that you might find helpful.
Add the following to the config file:
gamma_min_endstop nc # normally 1.28. Change to nc to prevent conflict, not needed on Azteeg X5
zprobe.enable true # set to true to enable a zprobe
zprobe.probe_pin 1.28!^ # pin probe is attached to if NC remove the !, Azteeg X5 this is 1.29
zprobe.slow_feedrate 5 # mm/sec probe feed rate
#zprobe.debounce_ms 1 # set if noisy
zprobe.fast_feedrate 100 # move feedrate
zprobe.probe_height 5 # how much above bed to start probe NB only needed for G32 on delta
zprobe.return_feedrate 0 # feedrate after a probe, default 0 is double of slow_feedrate (mm/s)
zprobe.max_z 200 # maximum default travel for the probe command, will use gamma_max if not defined
[!NOTE] The
slow_feedrate
is the speed the probe moves down to find the bed, it returns (probe up) at 2 *slow_feedrate
orreturn_feedrate
.fast_feedrate
is only used for any XY moves done during probing.
First test the zprobe with M119
, make sure that the probe is 1 when triggered and 0 when not triggered.
G30
will probe from the current position until it hits the bed and the probe triggers, it will report the distance traveled then return to where it started.
G30 Znnn
will probe until it hits the bed then sets Z to nnn (by doing G92 Znnn), this can be used to set the nozzle height if nnn is the probes Z offset from the nozzle in the Z direction.
G30 Fxxx
will run the probe at xxx mm/min overriding the slow_feedrate.
G38.2
, G38.3
, G38.4
, G38.5
(for probing in X and Y) are also implemented as documented here NOTE probing in X or Y on a delta is not recommended due to non-linear movement issues.
If there are multiple leveling strategies selected the Pn
parameter will select which one to send leveling codes to, 0 being the first defined one, 1 the second and so on. eg G29 P1
will send G29 to the second defined leveling strategy.
There are several M670 parameters that can set different settings for zprobe overriding the config settings, these are all saved with M500
M670 S0.50 K2.00 R2.5 |
Set Probe feedrates slow/fast/return (mm/sec) |
M670 Z200.00 |
Set Probe max_z (mm) |
M670 H2.00 |
Set Probe height (mm) |
M670 I1 |
Temporarily invert the sense of the probe pin (Not saved with M500) |
[!IMPORTANT] If a
leveling-strategy.xxx.enable
is set totrue
this enables one of the bed leveling strategies described below. NOTE that most leveling strategies cannot be run from a web interface, if using network use telnet to run them, or use the USB serial port.
| Option | Example value | Explanation | | — | — | — |
The following table lists the configuration options for the Z-probe module:
Option | Value | Description |
---|---|---|
zprobe.enable |
true |
Set to true to enable the Z-probe module. This is used to scan surfaces, and to calibrate parameters and compensate for non-planar surfaces. |
zprobe.probe_pin |
1.28!^ |
Pin the probe is connected to. |
zprobe.slow_feedrate |
5 |
Speed in millimetres/second at which the probe seeks a surface. |
zprobe.fast_feedrate |
100 |
Speed in millimetres/second at which the probe does fast moves. |
zprobe.return_feedrate |
50 |
Speed in millimetres/second at which the probe does the return after a probe. |
zprobe.debounce_ms |
1 |
Debounce the probe pin over this number of milliseconds. Set to 1 or 2 if your probe is too noisy and gives false readings. |
zprobe.probe_height |
5 |
Distance above the bed at which the probing is started, once the bed’s height is known. |
zprobe.max_z |
200 |
Maximum Z (was gamma_max) |
zprobe.dwell_before_probing |
0.2 |
Dwell time in seconds before probing. Useful for piezo Z-probe to avoid false trigger. |
[!WARNING] This calibrates the endstops and delta radius only, it is designed to be run once and done, no need to run it before each print. Just run it and save the results. It does not set the Z height, that can be done in several different ways as described later.
Make sure the config has delta_homing
true set and that zprobe.max_z
is set to about 20-30mm shorter than the distance to the bed, otherwise it will crash into the bed at high speed.
Also in the config set:
leveling-strategy.delta-calibration.enable true # basic delta calibration
leveling-strategy.delta-calibration.radius 100 # the probe radius
leveling-strategy.delta-calibration.initial_height 10 # height above bed to stop initial move
#the initial height above the bed we stop the initial move down after home to find the bed
#this should be a height that is enough that the probe will not hit the bed and is an offset from zprobe.max_z (can be set to 0 if zprobe.max_z takes into account the probe offset)
[!WARNING] Note that
leveling-strategy.delta-calibration.radius
should optimally be set such that the probe points are on the circumference of a circle that is equidistant from the center of the bed to the towers. This minimizes the effect one endstop has on the others when adjusted. This will usually put the probe points close to the edge of the glass bed.
Issuing the G32
command will run the full calibration sequence automatically.
It will cycle several times to converge on a good result.
If the result is good use M500
to save the M666
settings.
What will happen is it will home the probe down to find the bed, then home again then move down to 5mm above the bed (or whatever you set zprobe.probe_height
to).
Then it will probe the three towers at the specified leveling-strategy.delta-calibration.radius
from the center, and will print out the results, it will set the endstop trims and home, this will repeat 3-4 times, each time the difference between the three probes should get smaller, once it has completed 4 probes or the difference is under 0.03mm it will home one last time then probe the three points to confirm the calibration, then probe the center.
It will also adjust the delta radius (M665 Rnnn
) to get the center the same height as the outside points.
| Option | Example value | Explanation | | — | — | — |
The following table outlines the configuration options for the delta calibration leveling strategy:
Option | Value | Description |
---|---|---|
leveling-strategy.delta-calibration.enable |
true |
Set to true to enable the delta calibration leveling strategy. This uses the probe to determine the plane’s tilt and arm’s radius in a delta machine. |
leveling-strategy.delta-calibration.radius |
100 |
Radius at which to probe the three points. |
leveling-strategy.delta-calibration.initial_height |
10 |
The initial height above the bed where we stop the initial move down after home to find the bed. This should be a height that is enough that the probe will not hit the bed and is the absolute Z position. |
To activate this leveling strategy, copy/paste the following to your configuration file and edit it accordingly:
leveling-strategy.delta-calibration.enable true # Set to true to enable the delta calibration leveling strategy.
# This uses the probe to figure out the plane's tilt and arm's radius
# in a delta machine
leveling-strategy.delta-calibration.radius 100 # Radius at which to probe the three points
leveling-strategy.delta-calibration.initial_height 10 # The initial height above the bed we stop the initial move down after home
# to find the bed. This should be a height that is enough that the probe
# will not hit the bed
These are the different ways to use the calibration routine:
G29 |
will probe the seven points on your bed, you can use this to see how well the bed is leveled. |
G29.1 |
will probe the seven points on your bed, and output the data that can be fed into some offline least errors scripts to adjust tower offsets |
G32 |
Does the full calibration sequence, endstop and delta radius |
G32 R0 |
Will only do delta radius calibration |
G32 E0 |
Will only do endstop calibration |
G32 I0.02 |
Will set the target to within 0.02mm |
G32 K0 |
Will keep the current endstop trim settings and check them, without K the trims are cleared to zero and a full calibration is performed |
G32 J110.0 |
will set the probe radius to 110.0 mm for this session |
M500 |
saves the probe points |
M503 |
displays the current settings |
Example use:
G28 (Home XYZ)
(Move Z at least 30mm away from the bed if it's not, and attach probe if you have a removable probe)
G32 (Calibrate the machine)
(Remove probe if you have a removable probe)
M500 (to save probe results)
G28 (Home XYZ)
(Manually: jog down to touch the plate)
M306 Z0
M500 (to save homing offset)
G28
(Machine is now calibrated and knows its correct height above the bed)
[!WARNING] You will need to set the Z height after calibration using one of the several methods available mentioned here Delta
[!WARNING] There are NO probe offsets for delta calibration, so the probe should be within 10-20mm of the nozzle. This is by design as the calibration works solely on relative positions. To be clear: there are no offsets in Smoothie, and they would not be useful as calibration is relative. This can be confusing to Marlin users. Just use it and you’ll see.
[!NOTE] If you are getting the
Calibration failed to complete
error, or the probe crashes into the bed on the initial probe, it usually means you need to increase theleveling-strategy.delta-calibration.initial_height
config setting to a bigger value, try 10 or 20 or bigger. With the recent version it should move fast to just above the bed then move to the bed slowly, if it hits the bed on the first fast move then you need to set initial-height bigger.
See http://minow.blogspot.com/ for more details of calibrating a delta.
Nothing is perfect
Probes delta_grid.size points in X and Y (total probes size * size) and stores the relative offsets from the 0,0 Z height. When enabled every move will calculate the Z offset based on interpolating the height offset within the grids nearest 4 points.
Should be used in conjunction with the delta calibration strategy above.
First calibrate with G32 then if needed do G31 to set the grid compensation. If you want to save the grid, do M374.
[!WARNING] For use on linear delta machines only, do not use for a cartesian machine. The
delta-grid.radius
specified should be at least as big as the largest X,Y position likely to be moved to. It gets very inaccurate if you try to print outside of the radius you specified.
[!WARNING]
G31
is the probe command on this notG32
.
The strategy must be enabled in the config as well as zprobe.
leveling-strategy.delta-grid.enable true
The radius of the bed must be specified with…
leveling-strategy.delta-grid.radius 50
This needs to be at least as big as the maximum printing radius as moves outside of this will not be compensated for correctly
The size of the grid can be set with…
leveling-strategy.delta-grid.size 7
This is the X and Y size of the grid, it must be an odd number, the default is 7 which is 49 probe points
leveling-strategy.delta-grid.do_home true
This must be set on a Delta printer (although it should default to true).
If you are not using all 3 endstops (or prefer to home manually before G32):
leveling-strategy.delta-grid.do_home false
[!WARNING] You are responsible to make sure that (0,0) is in a repeatable location if
do_home
is set tofalse
.
Optionally probe offsets from the nozzle or tool head can be defined with…
leveling-strategy.delta-grid.probe_offsets 0,0,0 # probe offsets x,y,z (Z should always be 0)
They may also be set with M565 X0 Y0 Z0.
[!WARNING] Setting probe offsets on a delta will make the grid less effective the further the probe is from the head, this is especially true if you are using it to correct geometry errors, as they depend on the actuator position not the head position. So having a probe offset from the head will try to compensate for errors which are offset from where the head actually is. There is no easy way to overcome this other than have the probe as close to the nozzle as possible.
If the saved grid is to be loaded on boot then this must be set in the config…
leveling-strategy.delta-grid.save true
Then when M500 is issued it will save M375 which will cause the grid to be loaded on boot. The default is to not autoload the grid on boot.
[!NOTE] The grid size and the radius is saved in the file, and restored when it is loaded with M375. If the grid size is different from the one in config it will NOT load. If the radius is different, then the radius will be set to whatever was saved overriding the one set in config. DO NOT call M375 from a gcode file as that will cause the system to run out of memory and crash.
Optionally an initial_height can be set that tell the initial probe where to stop the fast descent before it probes, this should be around 5-10mm above the bed
leveling-strategy.delta-grid.initial_height 10
| Option | Example value | Explanation | | — | — | — |
The following are the configuration options for the Delta Grid leveling strategy:
Option | Value | Description |
---|---|---|
leveling-strategy.delta-grid.enable |
true |
The strategy must be enabled in the config, as well as the zprobe module. |
leveling-strategy.delta-grid.size |
7 |
The size of the grid, for example, 7 causes a 7x7 grid with 49 points. Must be an odd number. |
leveling-strategy.delta-grid.probe_offsets |
0,0,0 |
Optional probe offsets from the nozzle or tool head. NOTE: Z must be 0 |
leveling-strategy.delta-grid.save |
false |
If the saved grid is to be loaded on boot then this must be set to true. |
leveling-strategy.delta-grid.initial_height |
10 |
Optionally, an initial_height can be set that tells the initial probe where to stop the fast descent before it probes. This should be around 5-10mm above the bed. |
To activate this leveling strategy, copy/paste the following to your configuration file and edit it accordingly:
leveling-strategy.delta-grid.enable true # The strategy must be enabled in the config, as well as the zprobe module.
leveling-strategy.delta-grid.radius 50 # Radius of the bed, must be specified. This needs to be at least as big as
# the maximum printing radius as moves outside of this will not
# be compensated for correctly
leveling-strategy.delta-grid.size 7 # The size of the grid, for example, 7 causes a 7x7 grid with 49 points.
# Must be an odd number.
leveling-strategy.delta-grid.probe_offsets 0,0,0 # Optional probe offsets from the nozzle or tool head
leveling-strategy.delta-grid.save false # If the saved grid is to be loaded on boot then this must be set to true
leveling-strategy.delta-grid.initial_height 10 # Optionally an initial_height can be set that tell the initial probe
# where to stop the fast descent before it probes, this should be
# around 5-10mm above the bed
G29 |
test probes in a grid pattern within the radius producing a map of offsets, this can be imported into a graphing program to visualize the bed ( |