Ramblings of an aging IT geek
← Ramblings of an aging IT geek
hardware

making peace with the first layer

Why bed levelling consumes so much of a 3D printing hobby, and the mix of mesh probing, Z-offset tuning and physical fixes that finally settled mine.

A 3D printer mid-print on a workbench

Every failed print I have ever had, near enough, comes down to the first layer. Not the slicer settings, not the filament, not the fancy multi-colour nonsense people get excited about. The first layer. Get it right and the print almost prints itself. Get it wrong and you are watching a bird's nest of spaghetti accrete over a cold bed at half past eleven, again, wondering why this is a hobby.

Bed levelling is the eternal war because "level" is a lie. You are not making the bed level relative to gravity. You are making the nozzle's path parallel to the bed surface across its entire travel, at the right distance, while everything involved is made of metal that moves when it gets hot. Those are not the same problem, and the second one is much harder.

what actually goes wrong

The printer is a CoreXY I've had a couple of years, and the bed is a cast aluminium plate with a spring steel sheet on top. None of those surfaces is flat. They are flat-ish. Across 300mm you can have a few tenths of a millimetre of dip in the middle and a rise at the corners, and a few tenths of a millimetre is the entire height of a first layer. So a single Z height that works in the centre will gouge the corners or float over them.

The classic answer is the paper test: slide a sheet under the nozzle, adjust until there's slight drag, move to the next corner, repeat, go round again because adjusting one corner moves the others. I did that for years. It is tedious, it is subjective, and it only sets four points on a surface that isn't a plane.

A workshop bench with tools and printer parts

mesh levelling, and where it stops helping

The proper fix is a probe and a mesh. The printer touches the bed at a grid of points (I run a 5x5), builds a height map of the actual surface, and then the firmware nudges Z up and down as it prints to follow the dips and rises. On Klipper this is BED_MESH_CALIBRATE, and the result is a little ASCII heightmap in the console that is genuinely useful to look at:

0.040  0.025  0.010  0.030  0.055
0.020  0.005 -0.010  0.010  0.035
0.010 -0.005 -0.025 -0.005  0.020
0.025  0.010 -0.005  0.015  0.040
0.050  0.035  0.020  0.040  0.065

That negative dip in the middle is real, it's repeatable, and the mesh compensates for it. Mesh levelling changed my hit rate enormously. But it doesn't fix everything, and this is the bit that took me longest to accept: the mesh corrects for the shape of the bed, not for the Z-offset, the absolute distance between nozzle tip and bed at the moment printing starts. Those are two separate numbers and you have to get both right.

The Z-offset is where the war is actually won or lost. Too high and the first layer doesn't squish, so it doesn't adhere, so it lifts and you get the bird's nest. Too low and you smear the nozzle across the plate, leave drag marks, and starve the extruder. The window between those is about a tenth of a millimetre, and it shifts with the build plate, the filament, the bed temperature, and whether you cleaned the sheet properly.

the unglamorous fixes that mattered most

  • Clean the plate. Genuinely. Isopropyl, every print, no skin oils. Half the "levelling" problems I chased for a season were adhesion problems caused by a fingerprint. A PEI sheet that looks clean and a PEI sheet that is clean behave like different products.
  • Probe at printing temperature. The bed expands when it's hot. Meshing a cold bed and then printing on a hot one means meshing the wrong surface. I heat-soak the bed for ten minutes before calibrating, every time.
  • Tram the gantry first. A mesh can compensate for a wavy bed but it can't compensate for a gantry that isn't square to the frame. On a CoreXY that means physically squaring the X rail before you ever touch software. Klipper's Z_TILT_ADJUST automates this on multi-Z machines and it was the single biggest improvement I made.
  • Use a baby-stepping macro. Live Z adjustment during the first layer, tuned by eye, then saved. Watching the line come out and nudging Z by 0.01mm until it looks right beats any test print.

Close-up of printer parts laid out for adjustment

where I've landed

The honest answer is that I stopped trying to win the war and started managing it. The probe meshes the bed before every print, the gantry self-trams on multi-Z, the plate gets wiped down, and I have a known-good Z-offset per filament type saved in config. First-layer failures went from a weekly event to something I genuinely can't remember the last of.

What I'd tell anyone starting out: don't buy the most expensive probe before you've cleaned the bed and squared the frame. The dull mechanical stuff fixes more than the clever electronics. The clever electronics are wonderful, but they compensate for the shape of the problem, not the cause of it. Sort the cause, let the mesh handle the rest, and the first layer stops being a battle and goes back to being the boring part of printing that it was always supposed to be.