MPCNC: Tool Length Probe Station

Having a tool length probe station on the Sherline, I had to build one for the MPCNC:

MPCNC Tool Length Probe - plotter pen
MPCNC Tool Length Probe – plotter pen

It’s little more than a flange atop a wide base:

MPCNC Tool Length Probe - Slic3r preview
MPCNC Tool Length Probe – Slic3r preview

The flange offset puts the switch actuator on the midline of the base, not that that matters, and the base features rounded corners and a suitable legend, because I can.

I clipped the PCB’s through-hold leads nearly flush and stuck it to the flange with 3M permanent foam tape, which seems to work much better than screws & inserts for simple things that need never come apart.

The Protoneer CNC Shield includes a Probe input on the GRBL-compliant A5, although it took me a while to find the legend on the SCL pin in the I2C header. I moved the endstop power jumper to another header, then conjured a quick-and-dirty connector:

Protoneer CNC Shield - Tool Probe Wiring
Protoneer CNC Shield – Tool Probe Wiring

When I embed the endstop switch PCB in epoxy, I’ll add a drop to the connector while engaging in Magical Thinking. The whole Arduino + CNC Shield must go into an enclosure after I finish measuring the motor currents.

To forestall discussions about switch repeatability and accuracy, suffice it to say the MPCNC doesn’t claim to be much more than a woodworking router, so those switches seem Good Enough.

The OpenSCAD source code as a GitHub Gist:

// MPCNC Tool Length Probe Station
// Ed Nisley KE4ZNU - 2017-12-08
/* [Extrusion] */
ThreadThick = 0.25; // [0.20, 0.25]
ThreadWidth = 0.40; // [0.40]
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
/* [Hidden] */
Protrusion = 0.1; // [0.01, 0.1]
HoleWindage = 0.2;
/* [Sizes] */
EndstopPCB = [40.0,16.5,1.6]; // endstop PCB
ComponentHeight = 6.0; // max component height above PCB
SwitchOffset = [35.0,21.0,4.75]; // touch point center from lower left PCB corner
SwitchTravel = 2.5; // first touch to switch actuation
TapeThick = 1.0; // foam mounting tape
WallThick = 4.0; // basic wall & floor thickness
BaseRadius = 5.0;
Base = [IntegerMultiple(EndstopPCB[0] + 2*BaseRadius,20),
IntegerMultiple(EndstopPCB[2] + TapeThick + WallThick + 2*BaseRadius,2*25),
2.0];
NumSides = 8*4;
TextDepth = 2*ThreadThick;
//- Build it
union() {
difference() {
hull()
for (i=[-1,1], j=[-1,1])
translate([i*(Base[0]/2 - BaseRadius),j*(Base[1]/2 - BaseRadius),0])
resize([0,0,Base[2]])
intersection() {
cylinder(r=BaseRadius,h=BaseRadius,$fn=NumSides);
sphere(r=BaseRadius,$fn=NumSides);
}
translate([0,0,Base[2] - TextDepth])
linear_extrude(height=TextDepth + Protrusion) {
translate([0,-10,0])
text(text="MPCNC",size=8,spacing=1.05,font="Arial:style=Bold",halign="center");
translate([0,-18,0])
text(text="Tool Probe",size=6,spacing=1.05,font="Arial:style=Regular",halign="center");
}
}
translate([0,
WallThick/2 + TapeThick + SwitchOffset[2],
(EndstopPCB[1] - Protrusion)/2 + Base[2]])
cube([EndstopPCB[0],WallThick,EndstopPCB[1] + Protrusion],center=true);
}

The original doodles show a severely over-complexicated solution desperately searching for an actual problem:

MPCNC Tool Length Probe - doodles
MPCNC Tool Length Probe – doodles

Putting a large flat pan at the end of a relatively long lever arm, with the pivot arranged to put the pan level at the switch actuation point, made sense at the time. Give the relatively small tools I expect to use, directly ramming them into the switch lever should work just as well.

Putting all that complexity in harm’s way seemed like a Bad Idea when I sat down and looked at it in cold blood.

6 thoughts on “MPCNC: Tool Length Probe Station

  1. I’d be more worried about adhesive tape flowing over time – some of them tend to move when force is biased only in one direction over long time.

    1. The cable really should pass through a strain relief anchor, but the tape is allegedly good for mounting relatively heavy stuff on walls. If the PCB pops off, I’ll be both mightily disappointed and completely unsurprised.

Comments are closed.