Advertisements

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])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);

}

//- Define basic block shape

module BaseBlock() {
	translate([0,-GantryScrewOffset,0])
		linear_extrude(height=BlockSize[2])
		polygon(points=[[-HalfBlock[0],BlockSize[1]],
						[HalfBlock[0],BlockSize[1]],
						[HalfBlock[0],HalfBlock[1]],
						[SwitchLength/2,0],
						[-SwitchLength/2,0],
						[-HalfBlock[0],HalfBlock[1]]
						]);
}

//- Build it

ShowPegGrid();

difference() {
	BaseBlock();
	for (i=[-1,1]) {
		translate([i*GantryScrewOC/2,0,-Protrusion])
			rotate(-90)
				PolyCyl(GantryScrewOD,(BlockSize[2] + 2*Protrusion));
		translate([i*SwitchScrewOC/2,-(GantryScrewOffset + Protrusion),BlockSize[2]/2])
			rotate([-90,0,0])
				rotate(90)
					PolyCyl(SwitchScrewOD,(SwitchScrewLength + Protrusion));
	}
}
Advertisements

,