-
Digital Caliper Thumbwheel Holder: Another Repair
The digital caliper on my desk has been getting a lot of use lately and, as expected, that delicate glued repair failed.
Well, I can fix that…

Thumbwheel holder – installed That’s a somewhat chopped-up Version 1; as always, I must build one prototype to see how everything fits, then make a real part incorporating all the changes. The models and code below have those changes and should print fine.
This picture from the previous repair shows what broke and why:

Broken caliper thumb roller mount I removed the remainder of the arch, filed the stub square, made a bunch of tedious measurements, and wrote a chunk of OpenSCAD code to create a repair part that looks like this:

Thumbwheel holder – build model There’s also a layout arrangement to confirm that it’ll fit the stub:

Thumbwheel holder – fit model And then I printed four so I could pick the best one. The horizontal hole and notch come out surprisingly well, although this thing is right down around the minimum size you’d want to print:

Thumbwheel holders – as built The 1-72 screw threads itself into the hole without a nut; I simply match-drilled a hole in the stub under the hole in the part. Of course, that means I must fit the next part to that hole…
I really wish I was printing with, say, black filament. Even dark green would be better. Heck, I’d go with yellow, but if I don’t get rid of this pink stuff I’ll have it forever.
The OpenSCAD source code:
// Digital Caliper thumbwheel holder // Ed Nisley - KE4ZNU - Apr 2011 Build = true; // set true to generate buildable layout $fn = 8; // default for holes // Extrusion values // Use 0 extra shells behind the perimeter // 2 solid shells on the top & bottom ThreadThickness = 0.33; ThreadWT = 1.75; ThreadWidth = ThreadThickness * ThreadWT; HoleWindage = ThreadWidth; // enlarge hole dia by extrusion width Protrusion = 0.1; // extend holes beyond surfaces for visibility // Caliper dimensions WheelDia = 10.0; // thumbwheel OD WheelRadius = WheelDia/2; WheelMargin = 1.0; // space around wheel WheelRimThick = 2.5; // subtract from repair block ShaftDia = 2.90; // axle between knurled wheels ShaftRadius = ShaftDia/2; ShaftLength = 2.7; ShaftRetainer = 3.0; // thickness around shaft StubThick = 2.45; // stub of holder on caliper head StubLength = 5.0; // toward caliper head StubHeight = 6.0; // perpendicular to caliper head StubClearance = 0.5; // distance to caliper frame FrameLength = 50; // for display only FrameHeight = 16.0; FrameThick = 3.0; // Repart part dimensions ForkLength = StubLength - StubClearance; // toward caliper head around stub ForkHeight = StubHeight; // perpendicular to caliper head ForkGap = 0.2; // clearance to stub on all sides ForkBladeThick = 2.0; // on each side of stub ShaftClearance = 0.0; // Additional clearance around shaft ShaftOffset = 8.5; // Shaft center to stub BoltHoleDia = 1.8; // 1-72 machine screw, more or less BoltHoleRadius = BoltHoleDia/2; // Convenient sizes and shapes FrameBlock = [FrameLength,FrameThick,FrameHeight]; StubBlock = [StubLength,StubThick,StubHeight]; StubMargin = [ForkGap,2*ForkGap,ForkGap]; RepairBlockLength = ForkLength + ShaftOffset; RepairBlockThick = 2*ForkBladeThick + StubThick; RepairBlockHeight = WheelRadius + ShaftRadius + ShaftRetainer; RepairBlock = [RepairBlockLength,RepairBlockThick,RepairBlockHeight]; // Caliper parts to show how repair fits in module CaliperParts() { union() { translate([0,0,-(StubClearance + FrameHeight/2)]) cube(FrameBlock,center=true); translate([-(StubLength/2 + ShaftOffset),0,(StubHeight/2)]) cube(StubBlock,center=true); } } // Repair block with origin below wheel shaft module RepairPart() { difference() { // Body of repair part union() { translate([-RepairBlockLength/2,0,RepairBlockHeight/2]) cube(RepairBlock,center=true); translate([0,0,WheelRadius]) rotate([90,0,0]) cylinder(r=ShaftRadius+ShaftRetainer,h=ShaftLength,center=true,$fn=12); } // wheels translate([0,(ShaftLength + WheelRimThick)/2,WheelRadius]) rotate([90,0,0]) cylinder(r=(WheelRadius + WheelMargin),h=WheelRimThick,center=true,$fn=16); translate([-(WheelRadius + WheelMargin)/2, (ShaftLength + WheelRimThick)/2, (WheelRadius - Protrusion)/2]) cube([(WheelRadius + WheelMargin),WheelRimThick,(WheelRadius + Protrusion)], center=true); translate([0,-(ShaftLength + WheelRimThick)/2,WheelRadius]) rotate([90,0,0]) cylinder(r=(WheelRadius + WheelMargin),h=WheelRimThick,center=true,$fn=16); translate([-(WheelRadius + WheelMargin)/2, -(ShaftLength + WheelRimThick)/2, (WheelRadius - Protrusion)/2]) cube([(WheelRadius + WheelMargin),WheelRimThick,(WheelRadius + Protrusion)], center=true); // axle clearance translate([0,0,WheelRadius]) rotate([90,0,0]) cylinder(r=ShaftRadius,h=(ShaftLength + 2*Protrusion),center=true); translate([0,0,(WheelRadius - Protrusion)/2]) cube([ShaftDia,(ShaftLength + 2*Protrusion),(WheelRadius + Protrusion)], center=true); // stub of previous wheel holder translate([-(ShaftOffset + (ForkLength - ForkGap)/2 + Protrusion), 0, (StubHeight + ForkGap - Protrusion)/2]) cube([(ForkLength + ForkGap + Protrusion), (StubThick + 2*ForkGap), (StubHeight + ForkGap + Protrusion)], center=true); // mounting screw hole translate([-(ShaftOffset + ForkLength/2),0,StubHeight/2]) rotate([90,0,0]) cylinder(r=(BoltHoleDia + HoleWindage)/2, h=(RepairBlockThick + 2*Protrusion), center=true,$fn=6); } } // Build it! if (!Build) { CaliperParts(); RepairPart(); } if (Build) { translate([-RepairBlockLength/2,0,RepairBlockHeight]) rotate([0,180,0]) RepairPart(); }