Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
Well, another year, another deep-cleaning session, another break in the strut holding up the drawers in the Whirlpool refrigerator:
Whirlpool refrigerator drawer strut – clamped
This time, there’s a fixture positioning the tab in the proper orientation while the solvent evaporates. The two bottom clamps hold an aluminum plate against the top (far side) of the strut, with the top-center clamp holding the tab against a steel block shimmed with cardboard to get the correct angle. The other two clamps squash the tab against the joint, which is well-soaked with IPS 4 adhesive.
I replaced the right-side guide plate, originally made from phosphor bronze strip, with some thicker steel strip. The bronze strip collapsed into the worn section of the plastic bump that appeared in the previous post:
Refrigerator strut – worn retainers
I’ve written bigger caution messages on the top of the strut in red letters, but we think it’s getting on time for a whole new refrigerator…
Our Larval Engineer reports that the PLA pivot for the Sienna’s hood rod didn’t survive contact with the van’s NYS Inspection. I’m not surprised, as PLA tends to be brittle and the inspection happened on a typical February day in upstate New York. Seeing as how PETG claims to be stronger and more durable than PLA, I ran off some replacements:
Toyota Sienna hood rod pivot – small – PETG
The square cap fit snugly over the bottom of the post; PETG tolerances seem pretty much the same as for PLA.
A slightly larger loop may be more durable, so I changed one parameter in the OpenSCAD code to get this:
Toyota Sienna Hood Rod Pivot – up-armored – solid model
Which printed just like you’d expect:
Toyota Sienna hood rod pivot – large – PETG hairs
Despite the hairs stretching between each part, the nozzle didn’t deposit any boogers during the print. The top and bottom use Hilbert Curve infill, which looks pretty and keeps the nozzle from zipping back and forth quite so much; perhaps that’s a step in the right direction.
Tapping the holes for 6-32 stainless machines screws went easily enough:
Toyota Sienna hood rod pivot – PETG – assembled
She gets one of each and I keep the others for show-n-tell sessions.
The OpenSCAD source code, which differs from the original by a constant or two:
// Sienna Hood Rod Pivot
// Ed Nisley KE4ZNU November 2013
//- Extrusion parameters must match reality!
// Print with 2 shells and 3 solid layers
ThreadThick = 0.25;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
inch = 25.4;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
//----------------------
// Dimensions
ShellOD = 20.0;
ShellID = 8.75;
ShellLength = 10.0;
TaperLength = 1.5;
TaperID = 11.4;
BaseWidth = 20.0;
BaseThick = 3.0;
PegSide = 9.5; // mounting peg through sheet metal
PegLength = 7.0;
PegCornerTrim = 0.75;
PegHoleOD = 0.107*inch; // 6-32 tap hole
PegTrimSide = sqrt(2)*PegSide - PegCornerTrim;
ClampWall = 3.0; // clamping cap under sheet metal
ClampHoleOD = 0.150*inch; // 6-32 clearance hole
ClampCap = 3.0; // solid end thickness
PanelThick = 2.0; // sheet metal under hood
NumSides = 6*4;
//----------------------
// Useful routines
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);
}
module ShowPegGrid(Space = 10.0,Size = 1.0) {
Range = floor(50 / Space);
for (x=[-Range:Range])
for (y=[-Range:Range])
translate([x*Space,y*Space,Size/2])
%cube(Size,center=true);
}
//----------------------
// Build it
//ShowPegGrid();
// pivot
translate([-ShellOD,0,0])
difference() {
union() {
cylinder(r=ShellOD/2,h=ShellLength,$fn=NumSides); // housing
translate([-ShellOD/2,0,0]) // filler
cube([ShellOD,(ShellOD/2 + BaseThick),ShellLength],center=false);
translate([0,(ShellOD/2 + BaseThick/2),ShellLength/2]) // foot
cube([BaseWidth,BaseThick,ShellLength],center=true);
translate([0, // peg
(ShellOD/2 + PegLength/2 + BaseThick - Protrusion),
PegSide/2])
intersection() {
cube([PegSide,(PegLength + Protrusion),PegSide],center=true);
rotate([0,45,0])
cube([PegTrimSide,2*PegLength,PegTrimSide],center=true);
}
}
PolyCyl(ShellID,ShellLength,NumSides); // central hole
translate([0,0,-Protrusion]) // end bevels
cylinder(r1=TaperID/2,r2=ShellID/2,h=(TaperLength + Protrusion),$fn=NumSides);
translate([0,0,(ShellLength + Protrusion)])
rotate([180,0,0])
cylinder(r1=TaperID/2,r2=ShellID/2,h=(TaperLength + Protrusion),$fn=NumSides);
translate([0,0,PegSide/2]) // screw tap hole
rotate([-90,0,0])
PolyCyl(PegHoleOD,(ShellOD + BaseThick + PegLength),6);
}
// anchor cap
translate([2*PegSide,0,0])
difference() {
translate([0,0,(PegLength + ClampCap)/2]) // overall shape
cube([(PegSide + ClampWall),(PegSide + ClampWall),(PegLength + ClampCap)],center=true);
translate([0,0,(PegLength/2 + ClampCap + Protrusion)]) // peg cutout
cube([(PegSide + ThreadWidth),(PegSide + ThreadWidth),(PegLength + Protrusion)],center=true);
translate([0,0,-Protrusion]) // screw clearance
PolyCyl(ClampHoleOD,2*PegLength,6);
}
Although chain mail provides a good test of the M2’s setup and slicing parameters, it doesn’t offer much in the way of infill. To test that, I designed a holder for the cap of the bulk laundry detergent container:
Detergent Cap Holder – in place
The container must rest on its side, but if you snap the cap back in place, detergent will ooze out between the cap and the container and drip on whatever’s below. The never-sufficiently-to-be-damned Whirlpool high-efficiency front loading washer vibrates like crazy during the spin cycle, shaking anything from its top to the floor. The cap must sit in a cup to catch the inevitable ooze down its side, the wire shelf already has a bunch of other crap on it, and I needed a bulky test object, soooo ….
We regard that detergent container and its cap as a botched design.
Anyhow.
The holder has pair of holes in its back surface for the copper (!) hangers:
Detergent Cap Holder – solid model – rear
I stripped a length of 10 AWG wire, straightened & annealed it, bent up a pair of hooks, then hammered them just flat enough to work-harden the copper, and they were all good.
Printing that massive block with 20% infill showed that the nozzle collected enough PETG during the first few layers to leave a substantial booger behind:
Detergent cup holder – oxidized PETG
Fortunately, that was the only one and it ended up on the inside, tucked out of sight.
The PETG deposit on the outside of the nozzle gradually darkens from the original magenta to brown, which I’m pretty sure means that it’s oxidizing / decomposing / going bad. There’s no obvious way to remove the booger during the print; I’ve taken to wiping the nozzle after each object, while it’s still hot and the PETG remains flexible.
Because the nozzle didn’t accumulate any more PETG during the rest of the print, it’s not a constant problem, but I have seen boogers several times so far.
Perhaps continued refinement of the slicing parameters will help? One can always hope…
The OpenSCAD source code:
// Detergent Cap Holder
// Ed Nisley KE4ZNU - March 2015
Layout = "Show"; // Show Build
//-------
//- Extrusion parameters must match reality!
ThreadThick = 0.20;
ThreadWidth = 0.40;
HoleWindage = 0.2;
Protrusion = 0.1; // make holes end cleanly
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
//-------
// Dimensions
RecessX = 45.0; // cap recess
RecessDia = 55.0;
RecessDepth = 10.0;
RecessSides = 16*4;
BaseThick = 5.0; // block thickness below cap
PinDia = 2.5;
PinLength = 20.0;
PinOC = 65.0;
PinInset = 7.0;
PinZ = BaseThick;
Block = [RecessX,PinOC + 2*PinInset,30.0]; // overall block size (X to cap center)
FairingRadius = Block[2] - RecessDepth - BaseThick;
//-------
module ShowPegGrid(Space = 10.0,Size = 1.0) {
RangeX = floor(95 / Space);
RangeY = floor(125 / Space);
for (x=[-RangeX:RangeX])
for (y=[-RangeY:RangeY])
translate([x*Space,y*Space,Size/2])
%cube(Size,center=true);
}
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);
}
module Holder() {
difference() {
union() { // main shape
translate([-Block[0]/2,0,Block[2]/2])
cube(Block,center=true);
cylinder(d=Block[1],h=Block[2],$fn=RecessSides);
}
for (j=[-1,1]) // mounting pin holes
translate([-(Block[0] + Protrusion),j*PinOC/2,PinZ])
rotate([0,90,0]) rotate(180/6)
PolyCyl(PinDia,PinLength + Protrusion,6);
translate([0,0,Block[2]]) // fairing arc
rotate([90,0,0])
cylinder(r=FairingRadius,h=2*Block[1],center=true);
translate([Block[0]/2,0,Block[2]/2 + RecessDepth + BaseThick]) // flat top
scale([1,2,1])
cube(Block,center=true);
translate([0,0,BaseThick])
cylinder(d1=RecessDia,d2=1.1*RecessDia,h=Block[2]);
}
}
//-------
// Build it!
//ShowPegGrid();
if (Layout == "Show") {
Holder();
}
if (Layout == "Build") {
translate([0,0,0])
rotate([0,0,0])
Holder();
}
The garage door opener just ate another rough-duty bulb, so let’s see how a $7 LED bulb fares:
Walmart 60 W LED Bulb – garage door opener
It has no external heatsink fins and the color temperature looks just like the old-school incandescent bulb it’s replacing, so they’re getting a clue about what’s acceptable to ordinary folks.
That’s equivalent to a 60 W incandescent bulb, too, at least according to the package:
Walmart 60 W LED Bulb – package data
I love the “Return the package and reciept for replacement or money back” part…
For reasons not relevant here, we had to make a booklet out of a PDF file that contained several wide tables that should print in landscape mode, but were tagged as portrait pages. As a further complication, the pdftops utility I normally use complained vociferously about nearly every page:
Syntax Warning: FoFiType1::parse a line has more than 255 characters, we don't support this
A bit of fiddling produced this recipe, with pdf2ps in place of the usual pdftops:
For reasons which are, trust me on this, not relevant here, we now have a third Kenmore 158 sewing machine: a freebie that sat under a roof leak in an unused room some years ago and wasn’t cleaned before being stored. Even though not much water got inside the covers, the bobbin winder shaft froze solid.
Two black screws hold it to the cover and provide a slight adjustment of the tire-to-handwheel distance:
Bobbin Winder – old tire
Prior to this adventure, I soaked the shaft in penetrating oil for a week or two, but to no avail.
I didn’t take any before-the-repair photos, but it looked like this afterward, with the new tire installed…
From the top right (looking over the handwheel):
Bobbin Winder – assembled – top right
Notice the small rectangular hole just below the larger section of the shaft in the protruding part of the pot metal housing. That’s supposed to be an oil hole, but it’s also a fine water inlet.
From the top left:
Bobbin Winder – assembled – top left
The two obvious screws remove the obvious parts, but beware the compression spring:
Bobbin Winder – fill sense lever
And the torsion spring:
Bobbin Winder – drive latch
Some experimentation with a strap wrench rotated the wheel on the (still firmly frozen) shaft, which suggested the joint was a press fit without a setscrew, splines, or adhesive.
Grabbing the shaft lightly in a machinist’s vise, resting it atop the bench vise, and giving it a few shots with a drift punch drove it downward through the housing:
Bobbin Winder – driving out spindle
More gentle beating produced this heartrending scene:
Bobbin Winder – corroded shaft
Water just isn’t any good at all for unlubricated steel in a pot-metal bushing…
Anyhow, the shaft & housing cleaned up well, although they look a tad grody, and everything went back together in the reverse order.
I added a drop of light oil through the lube port, chucked the shaft in the drill press, spun it for a minute at low speed to wear off a slight binding, and it’s all good again.
The bobbin winder atop the Kenmore 158 sewing machine has a rubber tire that contacts a ribbed ring on the inside surface of the handwheel; the clutch knob disengages the main shaft and you run the motor at top speed. As you’d expect, both age and wear take their toll on the rubber, to the extent that the winder on Mary’s machine stopped turning. I swapped it for the slightly less decrepit winder on the Crash Test Dummy, but that was obviously a stop-gap measure.
I mistakenly thought the metal wheel consisted of two plates that clamped a rubber disk in place, with no possibility of removal:
Bobbin Winder – old tire
The fact that the spare parts list didn’t include the rubber disk helped convince me.
Eventually, I stumbled over replacement “tires” on, of course, eBay that suggested how to dismount them:
Bobbin Winder – wheel and tires
Yup, that sucker slides right off.
Anyhow, the replacements seem to be standard industrial O-rings, rather than the original tire with a flattened rim:
Bobbin Winder – old vs new tire
The new tires measure 28.94 mm OD on the bench (I don’t trust that last digit, either) and 29.56 mm OD installed. The (hardened and cracked) old tires measure 29.94, 30.06, and 30.28 mm OD on the bench; that’s a radius anywhere from 0.2 mm to 0.4 mm larger. The winder’s mounting screws provide a very small adjustment range that helps a bit.
Knowing that I needed an O-ring, I checked the assortment of “standard size” O-rings I bought many, many years ago, which once again failed to offer up anything suitable. To the best of my knowledge, that kit has never had the right size; apparently, every application uses a different standard.
The O-ring definitely puts less rubber on the handwheel than the tire, but seems to drive the bobbin winder well enough to fill a handful of bobbins without any of the previous drama.