Your printer’s bed isn’t flat. Even a cast aluminum bed on a $1000 printer deviates 0.05-0.15mm across its surface. Bed mesh leveling maps those deviations and compensates in software. But a poorly configured mesh is worse than no mesh at all. Here’s how to set it up correctly.
Probe Types: Inductive vs BLTouch vs CR Touch vs Strain Gauge
Inductive Probes (PL-08N, LJ12A3-4-Z/BX)
Detect metal through electromagnetic induction. Work with metal build plates only — useless on glass or PEI-on-glass. Accuracy: ±0.02mm repeatability after thermal stabilization. Drawback: temperature drift. As the probe heats up from the bed, the sensing distance changes by 0.01-0.03mm. Run the probe routine after the bed has been at temperature for 5 minutes, not cold. Cost: $5-10. Best for: budget builds with bare aluminum or magnetic spring steel beds.
BLTouch / CR Touch
Physical contact probe — deploys a plastic pin, touches the bed, retracts. Works on any surface: glass, PEI, BuildTak, bare metal. Accuracy: ±0.005mm repeatability. The gold standard for consistency. Drawback: mechanical complexity — the pin mechanism can jam if debris accumulates. Periodic cleaning with isopropyl alcohol prevents this. Cost: $35-45. Best for: any printer where consistent first layers matter.
Strain Gauge (Prusa, Voron Tap)
Measures force on the nozzle tip directly. No offset between probe and nozzle — the nozzle IS the probe. Accuracy: ±0.002mm. Eliminates z-offset drift because there’s no physical offset to calibrate. Drawback: requires a rigid toolhead mount — flexible hotend mounts dampen the force signal. Cost: $20-50 in parts. Best for: high-end builds where every micron counts.
Mesh Density: How Many Points
A 3×3 mesh (9 points) interpolates between measurements. On a 235x235mm bed, each point covers a 78x78mm zone. A 0.15mm dip between two measured points is invisible to the mesh — the printer assumes the surface is flat between points.
A 5×5 mesh (25 points) provides 47x47mm coverage per point. This catches mid-scale warps that 3×3 misses. For most printers, 5×5 is the sweet spot — good enough to detect typical bed warping without taking 5 minutes to probe.
7×7 (49 points) and higher densities matter for large beds (300x300mm+) or beds with known complex warping (high spots near the heater, low spots in corners). The probing time scales linearly — a 10×10 grid on a 350mm bed takes 3-4 minutes. Use UBL (Unified Bed Leveling) in Marlin to store a high-density mesh once, then tilt-adjust with 3 points before each print.
Fade Height
Mesh compensation doesn’t need to run for the entire print. After a few layers, the plastic above fills in any remaining deviation. Fade height tells the firmware to gradually reduce compensation from 100% at Z=0 to 0% at the configured height.
Set fade height to 5-10mm for most prints. At 10mm (50 layers at 0.2mm), the compensation smoothly reduces to zero. Too low (2-3mm) causes an abrupt transition — visible as a horizontal line in the print wall. Too high (20mm+) wastes CPU cycles and can interact with other compensation (input shaping) on Klipper machines.
Zero fade height means the mesh compensates forever. On tall prints (150mm+), this can cause the Z-axis to oscillate slightly as the firmware chases a 0.02mm deviation that’s no longer mechanically relevant. Always set a fade height.
Bed Mesh Quick Reference
| Firmware | Probe Type | Recommended Mesh | Fade Height | Command |
|---|---|---|---|---|
| Marlin | BLTouch | 5×5, bilinear | 10mm | G29 (auto) or M420 S1 (load saved) |
| Marlin | Inductive | 5×5, bilinear | 10mm | G29 after 5min heat soak |
| Marlin | UBL | 10×10 (once), 3-point tilt | 10mm | G29 P1 (save), G29 P3 (fill), G29 A (activate) |
| Klipper | BLTouch | 5×5, Lagrange | 5mm | BED_MESH_CALIBRATE |
| Klipper | Strain Gauge | 7×7, Lagrange | 5mm | BED_MESH_CALIBRATE |
Common Mistakes & How to Avoid Them
Mistake 1: Setting z-offset before running the bed mesh. The probe measures relative to its trigger point. If you set z-offset cold and then probe while hot, thermal expansion shifts everything by 0.05-0.10mm. Consequence: the nozzle drags on one side and floats on the other — exactly what the mesh was supposed to prevent. Fix: Heat the bed to printing temperature, wait 5 minutes, probe the mesh, THEN set z-offset with a live-adjust print.
Mistake 2: Saving the mesh and never re-probing. Bed geometry changes over time. Removing prints flexes the build plate. Temperature cycling slowly warps aluminum beds. After 50-100 print hours, your saved mesh is 0.05-0.10mm wrong. Consequence: first-layer adhesion degrades gradually and you spend hours troubleshooting filament and temperature settings instead. Fix: Re-probe every 20-30 prints, or add G29 to your start G-code for automatic probing before every print.
Mistake 3: Running UBL tilt-adjust on a dirty nozzle. UBL tilt adjustment probes 3 points and calculates the plane of the bed. If the nozzle has a blob of plastic on the tip, all three probe points are offset by 0.1mm — the tilt calculation is garbage. Consequence: the entire mesh is shifted by a constant offset, producing either a smashed first layer or zero adhesion. Fix: Heat the nozzle to 160°C, wipe it clean with a brass brush, then run tilt-adjust at full printing temperature.
Mistake 4: Not including M420 S1 in start G-code. Marlin disables the saved mesh on G28 (home). If your start G-code runs G28 after M420 S1, the mesh is loaded then immediately cleared. Consequence: printer acts as if no mesh exists. The first layer fails on one side of the bed. Fix: Place M420 S1 AFTER G28 in your start G-code. Or use the RESTORE_LEVELING_AFTER_G28 option in Configuration.h.
⚠️ Safety Notice: Bed probing involves physical contact between the probe/nozzle and the build surface. Verify your printer’s endstop and probe operate reliably before automated probing. A failed probe trigger can crash the nozzle into the bed, damaging both. As of 2026, Klipper’s probe accuracy validation (
samples_tolerance) and Marlin’s multiple probing options provide protection — always enable at least 2-probe verification for each mesh point.
For getting the first layer right after your mesh is dialed in, see our first layer calibration guide. If you’re fighting Z-axis issues, our Z-wobble fix guide covers mechanical corrections.
The uavmodel BLTouch kit includes an extended wiring harness and pre-configured Marlin firmware for Creality and BTT boards — install in 20 minutes and start printing with mesh-leveled first layers.
