Makergear M2: Re-Relocated Z-min Platform Height Switch

A few trips with the M2 convinced me that the cable to the relocated Z-min switch along the front of the X gantry needed a clip on each end and should not run under the gantry. This time I used the full width of the steel strap and bashed a neater curve around a length of drill rod:

M2 Z-min Cable Clip - forming

M2 Z-min Cable Clip – forming

The new clips look a bit better with straight edges:

M2 Z-min Cable Clips - old vs new

M2 Z-min Cable Clips – old vs new

The top view shows the new clips and cable location:

M2 Z-min Switch - top view

M2 Z-min Switch – top view

While I was at it, I trimmed the edges off the switch mounting block. Rather than figure out the trig required to hack off the corners, I applied linear_extrude() to a polygon() defined by some obvious points, then poked the same holes in the block:

Z-min Front Mount Switch Block - chamfer - solid model

Z-min Front Mount Switch Block – chamfer – solid model

It pretty much vanishes in the top view, but here’s a view from the +Y end of the platform:

M2 Z-min Switch - bottom view

M2 Z-min Switch – bottom view

Despite all that maneuvering, the G92 Z-4.55 touchoff value remained the same!

If you’ve forgotten why all this makes sense, it’s a first pass at detecting the actual build platform position. The stock M2 uses that switch to detect the top of a screw attached to the Z-axis stage, which means it can’t sense the actual platform. The Z-min switch I added to the Thing-O-Matic convinced me that was the only way to fly; given the TOM’s plywood-and-acrylic frame, it was essentially mandatory.

Mounting the switch on the extruder would allow probing the entire platform, which would allow on-the-fly correction for both average height and (non-)flatness, but that’s a whole ‘nother project.

The OpenSCAD source code:

// Block to mount M2 Z-min switch on X gantry
// Ed Nisley KE4ZNU - Oct 2013

//- Extrusion parameters - must match reality!

ThreadThick = 0.25;
ThreadWidth = 0.40;

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

Protrusion = 0.1;

HoleWindage = 0.2;

//- Sizes

SwitchLength = 20.0;					// switch size across front of block

SwitchScrewOD = 2.05;					// microswitch screw tapping
SwitchScrewOC = 9.5;					//  ... on-center spacing

GantryScrewOD = 3.0;					// X rail screw clearance
GantryScrewOC = 25.0;					//  ... on-center spacing along X
GantryScrewOffset = 12.0;				//  ... Y offset from gantry front

BlockSize = [1.5*GantryScrewOC,17.0,5.0];			// XYZ dimensions as mounted
HalfBlock = BlockSize/2;

SwitchScrewLength = BlockSize[1] - 5*ThreadWidth;	// net length of switch screws
echo("Max switch screw length: ",SwitchScrewLength + 5.0);		// ... allow switch thickness

ChamferAngle = atan((BlockSize[0] - SwitchLength)/(BlockSize[1]/2));
echo("Chamfer Angle: ",ChamferAngle);

//- Adjust hole diameter to make the size come out right

module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes

  Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);

  FixDia = Dia / cos(180/Sides);

  cylinder(r=(FixDia + HoleWindage)/2,h=Height,$fn=Sides);

//- Put peg grid on build surface

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  RangeX = floor(100 / Space);
  RangeY = floor(125 / Space);

	for (x=[-RangeX:RangeX])
	  for (y=[-RangeY:RangeY])


//- Define basic block shape

module BaseBlock() {

//- Build it


difference() {
	for (i=[-1,1]) {
				PolyCyl(GantryScrewOD,(BlockSize[2] + 2*Protrusion));
		translate([i*SwitchScrewOC/2,-(GantryScrewOffset + Protrusion),BlockSize[2]/2])
					PolyCyl(SwitchScrewOD,(SwitchScrewLength + Protrusion));