You installed a BLTouch on your printer and now it either crashes into the bed or probes in mid-air. Auto bed leveling sensors are the single most impactful upgrade for print consistency, but the install process has enough pitfalls to turn a weekend project into a week of frustration. Here’s the complete install procedure that works the first time.
BLTouch vs CR Touch: Which to Buy
The BLTouch (Antclabs) and CR Touch (Creality) are functionally identical — both use a physical pin that extends, touches the bed, and retracts, sending a signal at the touch point. The differences:
-
BLTouch: Original design. Pin uses a hall-effect sensor for touch detection. Available in versions 3.0 (5-pin connector), 3.1 (5-pin with improved EMI shielding), and Smart (3.1 with auto-pin-retraction). The Smart version retracts the pin after probing so it won’t snag on prints.
-
CR Touch: Creality’s clone. Uses optical sensor for touch detection instead of hall-effect. The metal body is heavier (10g vs 8g for BLTouch) but better shielded against EMI from nearby stepper motor wiring. Plugs directly into Creality boards with a dedicated 5-pin BLTouch port.
Both use the same firmware configuration and wiring principles. The CR Touch is slightly more plug-and-play for Creality printers; the BLTouch 3.1 has better documentation and community support for non-Creality boards.
Wiring: 5-Pin vs 3+2 Split
The BLTouch/CR Touch has a 5-wire harness:
- Brown (GND): Ground
- Red (+5V): 5V power — never connect to 3.3V or the sensor won’t trigger reliably
- Orange (SERVO / control): Signal to deploy and retract the pin — connects to a PWM-capable pin
- Black (GND for Z-endstop): Ground for the endstop signal — ties to Z-min endstop ground
- White (Z-min signal): Endstop signal — triggers when the pin touches the bed
On boards with a dedicated 5-pin BLTouch port (Creality 4.2.2/4.2.7, BTT SKR Mini E3, BTT SKR 3): Plug the 5-pin connector directly. The pinout is standardized. Done.
On boards with separate Z-endstop and servo pins (RAMPS 1.4, older MKS boards, many non-dedicated boards):
– The 3-pin group (brown/red/orange) goes to a servo or dedicated probe header
– The 2-pin group (black/white) goes to the Z-min endstop connector
– Swap the black and white wires if they don’t match your board’s pinout. Connecting them reversed won’t damage anything — the probe simply won’t trigger and the Z-axis will crash. If this happens, power off and swap the two wires.
Critical wiring rule: The 5V (red) wire must go to a 5V source that stays powered during firmware flashing. Some boards cut power to servo pins during bootloader mode, which causes the BLTouch self-test (pin deploy/retract on startup) to fail silently. If your BLTouch doesn’t do its startup self-test (two quick pin cycles when you power on), the 5V pin isn’t getting power — verify with a multimeter.
Marlin Firmware Configuration
For Marlin 2.1.x (current):
In Configuration.h, uncomment or set:
#define BLTOUCH
#define NOZZLE_TO_PROBE_OFFSET { -40, -10, -2.5 } // X, Y, Z — measure these for your mount
#define PROBING_MARGIN 10
#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
#define USE_PROBE_FOR_Z_HOMING
#define Z_MIN_PROBE_PIN PB1 // Set to your board's pin — check pins.h for your board
In Configuration_adv.h:
#define BLTOUCH_DELAY 500 // Milliseconds after deploy before probing
#define BLTOUCH_SET_5V_MODE // Enable if your board switches 5V on the servo pin
#define PROBE_MULTIPLE 2 // Probe each point twice, use average
#define Z_CLEARANCE_DEPLOY_PROBE 10 // Raise Z 10mm before deploying pin
Compile and flash. The BLTouch should self-test (pin cycles twice) when the printer powers on. If it doesn’t, recheck the 5V wiring.
For Klipper:
In printer.cfg:
[bltouch]
sensor_pin: ^PB1 # ^ enables internal pull-up — required for reliable triggering
control_pin: PB0
x_offset: -40 # Negative if probe is left of nozzle
y_offset: -10 # Negative if probe is in front of nozzle
z_offset: 2.5 # Provisional — calibrate precisely after install
pin_up_touch_mode_reports_triggered: False
stow_on_each_sample: False # Faster probing — stows pin between samples if True
speed: 5.0
[safe_z_home]
home_xy_position: 117.5, 117.5 # Center of bed — set to your bed dimensions / 2
speed: 50
z_hop: 10
Restart Klipper and run BLTOUCH_DEBUG COMMAND=pin_down and BLTOUCH_DEBUG COMMAND=pin_up to verify the pin deploys and retracts correctly. Then BLTOUCH_DEBUG COMMAND=self_test — the pin should cycle twice.
Z-Offset Calibration
This is where most installs go wrong. The Z-offset is the vertical distance between the probe trigger point and the nozzle tip. It’s always negative (the nozzle is below the probe trigger point). An incorrect Z-offset either crashes the nozzle into the bed (offset not negative enough) or prints in mid-air (offset too negative).
Calibration Procedure:
- Home the printer. The BLTouch will probe the center of the bed to establish Z=0.
- Move the nozzle to Z=0 using the LCD or terminal:
G1 Z0 - Place a piece of standard printer paper under the nozzle.
- Use the Z-offset adjustment (LCD menu or terminal) to lower the nozzle until the paper drags with moderate resistance — the same feel as manual bed leveling. On the LCD, lowering the nozzle means making the number more negative (e.g., from -2.0 to -2.5).
- Note the Z-offset value displayed. This is your calibrated offset.
- Save to EEPROM. On Marlin:
M500. On Klipper:SAVE_CONFIG. - Print a first-layer test square (single-layer 50mm square). Check:
– Lines should merge together with no gaps (offset too high → gaps between lines)
– Lines should not have ridges or waves (offset too low → ridges, curling at edges)
– The square should peel off as one solid piece, not individual lines
Fine-tune the Z-offset in 0.02mm increments during the test print using the LCD babystep feature. The difference between a perfect first layer and a failed one is often 0.05mm.
Mesh Bed Leveling Setup
With the BLTouch installed, configure mesh bed leveling for a map of your bed surface:
Marlin: Enable AUTO_BED_LEVELING_BILINEAR. Add G29 (auto bed leveling) after G28 (home) in your start G-code. Use a 5×5 grid for beds up to 235mm, 7×7 for larger beds. More points = more accurate mesh, but probing takes longer.
Klipper: Add a [bed_mesh] section:
[bed_mesh]
speed: 120
horizontal_move_z: 5
mesh_min: 20, 20
mesh_max: 200, 200
probe_count: 5, 5
algorithm: bicubic
Add BED_MESH_CALIBRATE to your PRINT_START macro. The mesh compensates the first several layers for bed unevenness; fade height (default 10mm) gradually reduces compensation until the print returns to flat geometry.
BLTouch/CR Touch Troubleshooting
| Problem | Likely Cause | Fix |
|---|---|---|
| Pin doesn’t deploy (no self-test) | No 5V power | Check red wire voltage with multimeter during startup |
| Pin cycles continuously on startup | Wiring short or defective sensor | Disconnect, test with known-good wiring |
| Probe triggers mid-air during homing | Noise on signal wire or weak pull-up | Route signal wire away from stepper cables, enable internal pull-up (^PB1 in Klipper) |
| Nozzle crashes into bed during probing | Z-offset set to 0 or positive | Set negative Z-offset — measure physical distance between probe and nozzle |
| First layer inconsistent despite mesh | Probe not level with nozzle, or bed mesh not loaded | Verify probe mount is rigid, add M420 S1 or BED_MESH_PROFILE LOAD=default after G28 |
| Probe fails on some points | Warped bed or probe accuracy at edges | Increase probing margin, reduce probe speed |
⚠️ Safety Notice: The installation procedures in this guide involve modifying 3D printer firmware and electrical wiring. Always disconnect power before making wiring changes. Verify all connections with a multimeter before applying power. Incorrect wiring can damage the mainboard, the BLTouch sensor, or both. Thermal runaway protection must be enabled and verified in firmware before operating the printer — this is a critical fire safety feature independent of the BLTouch installation.
For dialing in first-layer perfection after BLTouch calibration, see our first layer calibration guide. For understanding how mesh leveling improves print consistency, our bed mesh leveling guide covers manual vs automatic probing. If you’re running Klipper, our Klipper vs Marlin comparison helps decide which firmware to use.
For a reliable auto bed leveling setup, the BLTouch 3.1 with its improved EMI shielding handles the electrical noise from nearby stepper wiring that causes false triggers on earlier versions. Pair it with a solid metal mounting bracket (not a printed one — PLA brackets flex under probing force and throw off your mesh by 0.05-0.10mm) for repeatable first layers across hundreds of prints.
