RoBo3D Autolevel via Mike Kelly

A mod to upgrade any RoBo3D to have auto bed levelness compensation

3D printer parts and enhancements

Creative Commons Attribution Share Alike

Commercial use is allowed, you must attribute the creator, you may remix this work and the remixed work should be made available under this license.

Learn more or download attribution tags


Just want to begin by saying this mod is credit by team RoBo. I decided to make my own version based on their design

Auto Bed Levelness Compensation (ABLC)

Questions and Answers:

What is Auto Bed Leveling?

Auto Bed Leveling is when the bed levelness is adjusted through mechanical action to achieve a bed that is leveled against the nozzles movement. This is not the same as ABLC

What is Auto Bed Levelness Compensation?

ABLC is the process of probing the bed with a measurement device to determine the level error of the bed and compensate for this by moving the Z axis up and down. There is no mechanical variation but rather software compensation.

Why is it referred to as Auto Bed Leveling?

Probably for simplicity sake. Hence why I titled this Autolevel. It's generally acceptable to trim words if your point is still made.

How it works:

The Robo3d has a safety measure put in where when the nozzle touches the bed, the nuts will unseat from their housing so as to not put force on the bed and get "thrown" out. This is what people refer to when they " throw their nuts".

Using this principle of the nut unseating, they used a coupling nut in it's place and attached a switch to it. The switch connects to the coupling with a plastic mount. The switches then activates against the x motor carriage and the x idler respectively.

With this switch in place, as soon as the nozzle touches the bed and the couplings begin to unseat the switch will deactivate sending a signal to the ramps board that an endstop has been hit. It's used for both the Z0 sensor and the probe sensor.

How mine differs:

With my design the switches are run in series to avoid a failure situation. Were the switches to be improperly seated or a failure in the wire the RoBo3d would just raise up during it's normal z operation and not throw the nuts. Click Here to see why I ran my switches in series.

Note: If you have auto bed leveling from RoBo3D do not use my firmware without modifying your wiring

Build it

Parts List:

Printed Parts:

RoBo 3D auto level switch mount


Begin by securing the switch to the mounting plastic. It's probably easiest to thread on the coupling first before securing the switch. The bracket should expand enough to go around the threaded rods.

With the mounting bracket in place secure the M3 nut and screw and begin to tighten it down, but loose enough the plastic can still slide on the coupling.

Adjust the mount distance from the idler until the switch is barely activated. The switch should activate easily when the idler presses down on it, but deactivate quickly once the coupling begins to unseat. This may take some fine tuning but once you secure it it should stay true.


With the switch in position it's time to do the wiring.

Current Autolevel owners:

If you have RoBo3D's Autolevel switches you can turn your parallel switches into series but it requires unsoldering from the NC leg and soldering to the NO leg. Then you trim one of the legs short (say on red) and then another one long enough to solder onto, then you modify your wiring to represent below.

New to Autolevel owners:

Follow the wiring diagram to wire your switches in position. You will most likely need to trim and solder to get the lengths needed. Color/polarity is not critical.


Control It


With the switches wired in position it's time to change the firmware. This is the same Auto_Level firmware used by team RoBo, but modified with 1 key difference:

const bool Z_MIN_ENDSTOP_INVERTING = true;

modified to:

const bool Z_MIN_ENDSTOP_INVERTING = false;

Which is traditional.

Download the firmware below.

Use either MatterControl or Arduino software to flash the firmware.

It should also be noted this firmware will work on any RoBo 3d with or without auto-level.


With the firmware installed it's time to determine the Z offset between when the nozzle touches the bed and when the switches activate.

Begin by homing all axis, ensuring the Z homes in the center of the bed.

Using MC or Repetier raise the nozzle up .1mm at a time until you're able to slide a piece of paper underneath it, counting how many steps it took. Once you can barely fit the paper under, remove the paper and lower the nozzle by .1mm. This is your Z offset

Modify the G-code:

With the firmware installed it's time to configure the Gcode to run the auto-level script and calibrate the Z height. Insert this code in the starting procedures for your slicer after the G28 codes.


G1 Z0.5 ;Adjust Z offset
G92 Z0 ;Define new Z home
G29 ;Autocalibrate bed


That should be everything there is too it. I find it helps to monitor the output from the G29 sequence in the terminal. That way if you see an unusual number you'll be able to address it quicker.

Please let me know if you have any questions

Ace Hardware sells M8-1.25mm couplings for anyone that has them locally.

Materials and methods

-2x 5/16"-18 Coupling (Or M8-1.25 Coupling for those on metric rods)

-2x Micro switch (1x in addition to the 1 on the Z axis)

-2x M3 - 25mm

-2x M3 Nuts

-4x M2-10mm (2x in addition to 2 securing Z switch)



Issues are used to track todos, bugs or requests. To get started, you could create an issue.


Ad16ec57fe4bb2a17f3e45d023c52e5e?default=blank&size=40mkelly published this design ago