TOM Z-min Endstop

by emmett, published

TOM Z-min Endstop by emmett Feb 28, 2012
0 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps



Use This Project

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

5042Views 847Downloads Found in 3D Printer Parts


The Thing-O-Matic is a good machine, but it has one quirk that really irks me: the Z-height calibration never stays quite right. Since it goes all the way to the top to hit the endstop, then counts down 120 or so mm to find the build platform, if there is any change in temperature or humidity, the wood sides of the bot will expand or contract, easily making the nozzle move +/-0.1mm with respect to the platform. That may not sound like a lot, but when you're printing raftless, that's the difference between a first layer that doesn't stick down, and one that's so smashed the bottom of the print is wider than the rest.

This little block fixes all that. By making the Z-endstop contact the platform directly, the nozzle will always find the correct height, regardless of whatever thermal expansion the bot may be experiencing.


Beware, when messing with endstops and nozzle heights, it is very easy to make a mistake and ram your nozzle into your build platform. Go slow, measure twice, cut once, etc. I'm not taking any responsibility for you harming your bot.

I designed this around a HBP, and it's important that absolutely nothing sticks up above that surface. You'll need the aluminum plate with the counter-sunk bolts and I even clipped off the plug retainer because it stuck up a little. You will have very little clearance with the endstop. Now, for the steps:

1) Print the block and bolt an endstop into it (M3 screws should be able to tap themselves into the small plastic holes). I bought a 4th endstop for this purpose, but I don't see any reason you couldn't remove your current Z-endstop and use that. Just don't tell it to build something too tall, or you'll get a surprise.

2) Remove the metal switch lever. This is important, or else that'll get dragged through prints and ruin them.

3) Unbolt the left-hand M5 screw that hold the extruder. I designed this part for a MK6+ extruder; hopefully it'll work for others as well, since I believe the mounting points are universal, but the SCAD file is there so you can adjust as necessary. Set the block on the Z-stage as shown in the pictures and put the bolt back in through the large hole. Tighten it down and make sure it's sturdily attached (that goes for the extruder as well).

4) Plug the endstop cable into the endstop and route it down to the motherboard and plug it into the slot marked Z-min (instead of Z-max). I found the cable supplied was not long enough, so I had to solder an extra length of wire in as a splice.

5) Calibrate. The tip of the nozzle should extend slightly (~1mm) below the bottom of the endstop button, so that it will clear prints. If that's not the case, go into the OpenSCAD file and adjust the "e" value to make the block a different thickness. If that works, then jog your axes so that the build platform is in front of your nozzle (X centered, Y max). Then jog Z down until the endstop hits the platform and stops it. The nozzle should now be below the level of the platform, so don't jog Y. Instead jog up until you can just slide the platform barely under it. Record the vertical Z there for your Z-offset. Mine is -1.0mm (the number should always be negative, since we started below the platform).

6) Copy my start.gcode to your start.gcode and adjust as desired. Mine is for SF44, so you'll need to replace the extruder commands if you're still using SF35. Save your new Z-offset in the motherboard. Skein up a simple part and try printing. Keep your finger on the stop button at first in case it all goes wrong. You'll probably have to adjust your Z-offset a bit to get that first layer just right, but hopefully once you've got it, you'll never have to do it again.

More from 3D Printer Parts

view more

All Apps

3D Print your file with 3D Hubs, the world’s largest online marketplace for 3D printing services.

App Info Launch App

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Quickly Scale, Mirror or Cut your 3D Models

App Info Launch App

3D Print a wide range of designs with Treatstock. Easy to use tools to get the perfect result. The global 3D printing network that connects you with high-quality and fast working print services nea...

App Info Launch App

i use your z-min endstop on my cupcake. But when i print a file from sd-card, after homing the z-axis, the platform (waiting position X65 Y0) starts moving the same time as the z axis. That means, the platform runs into the side of the nozzle. Is there a delay-command, that will work on sd-card . So that i can first move the z-axis to 10 and after that, the build-platform starts moving to its homeposition.

Generally each Gcode command is supposed to complete before going to the next one. I'm guessing you've run across the same bug I did in RepG, in which the M132 command ends up causing unexpected motion on some axes. The solution I found was to put in values for X Y and Z for each G1 command that comes after an M132 in your start.gcode. Leaving some blank seems to be what triggers the bug.

Wouldn't the endstop drag across the print on any print larger than the width from the tip of the endstop switch to the tip of the extruder? i.e. if the endstop extends 1mm below the tip of the extruder and switches on when it's depressed by .5mm, doesn't that mean that its pressing into the surface of any large print?

No, read #5. You want the extruder below the switch for that very reason. This means when you home the Z-axis you need the nozzle to be off the side of the platform, so it doesn't run into anything. I've been printing lots of big parts with this upgrade and it's working great.

I've always wondered about the hysteresis on these switches, regardless of where it's placed. Is a simple microswitch really exact to 0.1mm?

I'm sure there's some hysteresis, but it doesn't really have an effect because the bot calibrates based on when the switch is depressed, but ignores when it is released. I've found them to be exceedingly accurate, which is why this mod works.

Basically, everything else in the TOM will be less accurate than the switch closure. I added the crudest possible switch to my Sherline CNC mill and it worked very well:


A nicer switch with a more rigid mount worked even better:


Platform probing FTW!

hmm. I tried the z min mounted on a bracket like the z min bracket on the prusa.

currently considering a modified http://www.thingiverse.com/thing:16380www.thingiverse.com/thing:1638... on one of the z smooth bars

High accuracy adjustable Z Endstop for Prusa
by jedynak
propeller helicopter
by heberth

Last year I put a metal-button SMD switch directly on the platform and twiddled start.gcode to poke it with the nozzle after wiping. The gotcha is that the switch must operate around 100 C, but nigh onto a year later, it's still working fine!

Because it's an additional switch, the start.gcode routine does a normal home sequence to get the usual XYZ calibration. Then it knows where the Z-min switch should be in XYZ space, positions the nozzle directly over it, and homes downward to poke the button.

The idea dates back to the Barbie Era
, when I was coating the plate with ABS slurry:


A simple level test pattern gives a quick check that the switch is working and the platform remains level:


The start.gcode routi
ne that I'm now using has somewhat better homing code, but requires SJFW firmware:


Never having to worry about Z-axis offsets again is wonderful!

Build Platform Level Test Pattern

Ooh I like that Idea. I am constantly having to re adjust my Z-Min pointy sticky thing (IE I've got a bit of thread that extends down from the platform and press the end stop when at the correct high. Except that due to expansion and other things I'm constantly have to readjust).

Now if I mount it directly to the build platform it'll always we at the right height. Only downside I see is if there's a bit of plastic in the nozzle prior to it heating up.

Good work.

Yeah, I thought about doing the switch on the platform too, but decided against it because I was worried about ABS getting deposited on the switch and changing its height. I also want to install a quick change build platform so I can switch between the HBP and ABP, and I think this solution will work for both without having to change anything.

I was pleasantly surprised to find the metal switch actuator didn't accumulate anything. Wiping the nozzle first takes care of most drool and any small remnant gets smashed flat because it's still molten.

The switch sits atop the upper plate of the two and is mildly awkward, but the payoff is that I can swap out the top plate and start the next object without any manual recalibration.

Doesn't matter much which way the switch works, as long as it's indexed to the surface!

Science! Err... Engineering!

This is a very good idea -- to move the reference to, well, the reference!