Levelling 3D printer bed

After around 2 years experience printing on my Geeetech A30, I've come to realise majority of my prints are due to two things. Most predominant issue is the gap from nozzle to bed being wrong, and usually that is caused by the bed being out of alignment.

Auto bed leveling can help here, but a level bed will reduce wear on the machine and also 

It's a good idea to do a bed levelling for a new 3D printer or a 3D printer that has recently been moved. It could be an idea to level the bed after a number of prints, usually in the order of 100's hours printing assuming everything is tightened up correctly and the machine does not vibrate too much whitest printing.

Tools Required

  • Feeler gauge (or any thin item, paper, thin card)
  • Perhaps tools depending on model, but usually it is a thumb screw adjuster

Some Assumptions

  • The bed is perfectly flat (if not go buy a new bed)
  • Bed and nozzle temperature are constant, so either on or room temperature but will remain the same throughout.
  • This article talks about moving the nozzle, if your printer has a static nozzle move the bed. If one axis moves on the bed and one moves on the nozzle, it will be a bit of each.
  • Regardless of what is chosen to be the "feeler gauge", they all work the same


Given that we are working with a relatively flat bed, only 4 corners need to be adjusted. Each corner is the same process and the overall process for each corner should be carried out until no adjustments are made. This could mean tweaking every corner 3-4 times. Overall it will probably take 1-2 hours the first time and as little as 10-15 minutes after a bit of experience.

This process is in principle the same for auto levelling beds and manual levelling beds. For non-auto leveling beds, the feeler gauge should be the thickness of the required gap. Auto beds will adjust to the correct gap before printing.

Rough adjustment

This first pass is to fix any beds that are way out of true and also finding the corner with the smallest gap

  • Move the nozzle to within a few mm of the bed on any one corner. Around 5-10mm between the nozzle and the bed. 
  • Move the noel to all other nozzles watching for the smallest gap.
  • If difficult to tell which corner has the smallest gap, move the nozzle down a few mm again and check each corner again.

Repeat moving the nozzle down and checking each corner until the smallest gap is just slightly more than the feeler gauge. 


This process is much of the same process as above, except this time the movements of the nozzle towards the bed are much less. You should be aiming to move down as little as a sheet of paper (0.1mm).

Measuring with a feeler gauge is all about the feel (it's in the name). Every corner should be the same feel.

Continue around the bed taking small steps down until reaching the desired gap between each coner and the nozzle.

Finnishing up

The process is finished when you've done a couple rounds to each corner without any adjustment needed. 


Time for something new

I've never been a hard core gamer, only the occasional binge. That's probably why I've never looked into game development. Even back in high school when time was abundant, I never managed to completelu finish any games. Things like Diablo II were binged to death, but I dont recall getting much past level 40-50. I played many hours of StarCraft, WarCraft (not WoW) and AOE2 but never once played a …


Is this thing on?

Been a while since the last post, but after having to do some random surgury on the site I thought I might as well post something. Perhaps more to come soon... 


CakePHP schema checker

If you have seen the previous tool I built for converting raw SQL to CakePHP code you might have an idea what is coming. There was good feedback from the initial tool so I have built something similar for people migrating legacy apps and newcomers alike.

Instead of conversions, this time it helps find specific errors in your schema. For example if you are using a field like user_id it will exp…


Cache all CakePHP find queries

I have been adding some cache to Infinitas recently and found it rather difficult to cache all find queries without having to overload and rewrite the entire Model::find() method. While its not the most complicated method in the world, its not DRY rewriting it and some time in the future its likely to bite me in the arse when something changes.

A basic way to cache the queries is as follows:



How to convert SQL to CakePHP find

There are a lot of newcomers asking the same question on CakePHP's IRC channel, Stack Overflow and various other places, and that question is how to convert a SQL query into the corresponding CakePHP code.

Once you have been using CakePHP for a while the ORM becomes second nature and its pretty easy to see how a query will fit into a Model::find(). I normally break the SQL up into the various …