That quarter-turn on the bed knob you make between every print — the one that takes 2 minutes and still leaves your first layer uneven on the far side — stops today. A BLTouch probe automates bed mesh measurement in 90 seconds and compensates for the warped aluminum plate your printer shipped with. Here’s the install, firmware config, and tuning.
BLTouch vs CR Touch: Which Probe to Buy
Both probes use the same principle: a solenoid-driven plastic pin drops, touches the bed, retracts, and triggers a Hall effect sensor. The difference is build quality and accuracy.
BLTouch (Antclabs, original): ±0.005mm repeatability. Three iterations (v3.0, v3.1, Smart) with incremental reliability improvements. The Smart V3.1 is the current standard. Uses a plastic pin that retracts on collision — if your gantry crashes into the bed, the pin breaks (cheap) instead of the probe body (expensive).
CR Touch (Creality): ±0.01mm repeatability. Creality’s clone of the BLTouch. Metal pin instead of plastic. Slightly less precise but more crash-resistant. If you’re running an Ender series printer, the CR Touch has direct-fit mounting brackets in the box.
3D Touch (clone): ±0.02-0.05mm repeatability. Cheap clones ($10 vs $40). Accuracy varies wildly between units. I’ve measured 0.07mm variance on a “3D Touch V3” from AliExpress — enough to ruin a 0.12mm first layer. Not recommended.
Step 1: Physical Installation and Wiring
Mount the probe to your print head using a bracket specific to your printer model. The probe tip must be 2-3mm above the nozzle tip when retracted and 3-5mm below when deployed. If the probe can’t reach below the nozzle, it can’t trigger before the nozzle hits the bed.
Wiring (5-pin connector, standard across BLTouch/CR Touch):
| Wire Color (BLTouch) | Wire Color (CR Touch) | Signal | Connects To |
|---|---|---|---|
| Brown | Red | +5V | 5V pin on controller board |
| Red | Blue | GND | GND pin |
| Orange/Yellow | Yellow | Servo/Signal | Dedicated probe pin or Z-endstop pin |
| Black | Black | GND (Z-min) | GND on Z-endstop connector |
| White | White | Z-min output | Signal on Z-endstop connector |
Critical wiring note — don’t use the 3-pin servo connector alone. The BLTouch needs both the 3-pin servo connector (power, ground, signal — for deploying/retracting the pin) AND the 2-pin Z-endstop connector (ground, signal — for detecting when the pin triggers). Some boards have a dedicated 5-pin BLTouch port that combines both. If your board only has a 3-pin probe port, the 2-pin Z-min connector replaces your existing Z-endstop switch.
Step 2: Marlin Firmware Configuration
If your printer runs Marlin (most Ender-series, CR-10, Prusa clones), you need to recompile firmware with BLTouch support enabled. No configuration.h edit survives a reboot — you must flash new firmware.
Essential Marlin configuration changes in Configuration.h:
#define BLTOUCH
#define NOZZLE_TO_PROBE_OFFSET { -42, -10, 0 } // X, Y, Z — measure your mount
#define PROBING_MARGIN 20
#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
#define USE_PROBE_FOR_Z_HOMING
#define Z_SAFE_HOMING
#define AUTO_BED_LEVELING_BILINEAR
#define GRID_MAX_POINTS_X 5
#define RESTORE_LEVELING_AFTER_G28
The nozzle-to-probe offset is unique to your mount. Measure it with calipers: X offset (negative if probe is left of nozzle), Y offset (negative if probe is in front of nozzle). Getting this wrong means the mesh is applied at the wrong physical position, and your nozzle digs into the bed on one side while printing in mid-air on the other.
G-code changes in your slicer start G-code. Add G29 (auto bed leveling) or M420 S1 (load saved mesh from EEPROM) AFTER G28 (home all axes). G28 disables leveling — if you don’t restore it, you get no compensation and the probe does nothing.
Step 3: Klipper Configuration
For Klipper, add to printer.cfg:
[bltouch]
sensor_pin: ^PB1 # Signal pin — check your board pinout
control_pin: PB0 # Servo pin
x_offset: -42 # From measured mount position
y_offset: -10
z_offset: 2.5 # Initial rough value — calibrate later
pin_up_touch_mode_reports_triggered: False
[bed_mesh]
speed: 120
horizontal_move_z: 5
mesh_min: 20, 20
mesh_max: 200, 200
probe_count: 5, 5
The pin_up_touch_mode_reports_triggered setting catches a common clone behavior where the probe reports triggered even when the pin is up. On genuine BLTouch, set to False. On clones, try True if the probe triggers during deployment before touching the bed.
Probe Configuration Comparison
| Setting | Marlin | Klipper | Effect of Wrong Value |
|---|---|---|---|
| Probe X/Y Offset | NOZZLE_TO_PROBE_OFFSET {X, Y} |
x_offset, y_offset |
Mesh applied at wrong XY position |
| Z Offset | NOZZLE_TO_PROBE_OFFSET {Z} |
z_offset in [bltouch] |
Nozzle too high or scrapes bed |
| Mesh Points | GRID_MAX_POINTS_X/Y |
probe_count |
Misses bed warp between probe points |
| Probe Speed | Z_PROBE_SPEED_FAST/SLOW |
speed in [bed_mesh] |
Missed triggers or probe pin damage |
| Pin Deploy Time | BLTOUCH_DELAY |
Built-in timing | Pin doesn’t fully deploy before probing |
What Goes Wrong With BLTouch Installs
Mistake 1: Using a clone probe and expecting BLTouch accuracy.
The consequence: A “3D Touch” clone might have ±0.05mm or worse repeatability. Your mesh compensation varies by 0.1mm between runs because the probe itself isn’t consistent. You’ll chase firmware settings thinking it’s a configuration problem when it’s a hardware problem.
The fix: Test repeatability: run M48 V4 (Marlin) or PROBE_ACCURACY (Klipper). A genuine BLTouch should return standard deviation under 0.003mm. Anything over 0.01mm and the probe is unreliable — replace it.
Mistake 2: Forgetting to remove the Z-endstop switch when using the probe for Z-homing.
The consequence: The printer homes Z using the physical endstop switch at Z=0, then probes the bed with the BLTouch. The mesh is offset by the height difference between the endstop trigger point and the probe trigger point. Your first layer is consistently 0.3mm too high or too low.
The fix: If using the BLTouch for Z-homing (recommended), physically remove the Z-endstop switch and enable Z_SAFE_HOMING in firmware. The probe becomes your only Z reference. No ambiguity.
Mistake 3: Not checking that the probe deploys and retracts reliably at print temperature.
The consequence: The probe works fine cold but fails mid-print when the chamber heats up. Heat expands the solenoid and can cause intermittent sticking. Your mesh probe before a hot print works, but the probe fails during a heat-soaked restart — the pin doesn’t drop and the nozzle crashes.
The fix: After install, heat-soak the bed and hotend to printing temperature for 10 minutes, then run M48 V4 to verify probe repeatability at temperature. If it fails at temperature but not cold, the probe is overheating — mount it further from the hotend or add a heat shield.
Mistake 4: Setting the Z offset once and forgetting about it.
The consequence: The Z offset changes when you change nozzles (different nozzle lengths), change build surfaces (PEI vs glass have different thicknesses), or when the probe mount shifts slightly from vibration/thermal cycling. You’ll print a perfect first layer Tuesday and a failed one Saturday with the same g-code.
The fix: Re-calibrate Z offset after any hardware change involving the nozzle, hotend, or build plate. Use the paper test for a rough offset, then live-adjust during a first-layer test print. The Z offset isn’t “set and forget” — it’s “set and verify monthly.”
⚠️ Safety Notice: When configuring a BLTouch or CR Touch probe, always test with the Z-axis raised 50mm above the bed using the
M119endstop status command before running a full homing sequence. An incorrectly wired probe can fail to trigger, causing the nozzle to crash into the bed. Ensure your printer’s firmware has software endstops enabled (#define MAX_SOFTWARE_ENDSTOPS). All electrical work should be performed with the printer powered off.
From Mesh to First Layer: Closing the Loop
The probe generates a mesh — a grid of Z heights representing your bed’s warp. But the mesh is only applied if your start G-code includes the right commands. Too many people install a BLTouch, see the pretty mesh visualization in OctoPrint, and assume their first layer is automatically perfect. The mesh data must be actively loaded and applied during the print.
As we detailed in our 3D printer first layer calibration guide, even with a perfect probe mesh, you still need a correctly set Z offset — the probe measures the bed, but it can’t measure where the nozzle tip is relative to the bed. That’s your job.
The uavmodel BLTouch mounting kit includes 6 printer-specific brackets (Ender 3/5, CR-10, Prusa MK3, Artillery Sidewinder, Anycubic) with pre-measured offset data — install and enter the provided X/Y offsets without breaking out the calipers.
