The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Category: Home Ec

Things around the home & hearth

  • Whirlpool Refrigerator Drawer Strut Re-Re-Repair

    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
    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
    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…

  • Sienna Hood Rod Pivot: PETG Edition

    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
    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
    Toyota Sienna Hood Rod Pivot – up-armored – solid model

    Which printed just like you’d expect:

    Toyota Sienna hood rod pivot - large - PETG hairs
    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
    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);
    	}
    
  • Detergent Cap Holder

    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
    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
    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
    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();
    }
    
  • LED Bulb in High-Vibration Environment

    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
    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
    Walmart 60 W LED Bulb – package data

    I love the “Return the package and reciept for replacement or money back” part…

  • Bookleting a PDF with Landscape Pages

    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:

    pdfcrop --margins "36 0 10 0" FileName.pdf 
    pdftk FileName-crop.pdf rotate 41-46east output FileName-crop-rotate.pdf
    pdf2ps -dLanguageLevel=3 -sPAPERSIZE=letter -dFIXEDMEDIA FileName-crop-rotate.pdf FileName-crop-rotate.ps
    ps2book.pl -f 1 FileName-crop-rotate.ps
    ps2pdf FileName-crop-rotate_book.ps
    

    The gymnastics in pdf2ps forces letter-size pages, no matter what the internal size specifies.

    That was not particularly obvious, but hooray for pdftk…

  • Kenmore 158: Bobbin Winder Repair

    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
    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
    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
    Bobbin Winder – assembled – top left

    The two obvious screws remove the obvious parts, but beware the compression spring:

    Bobbin Winder - fill sense lever
    Bobbin Winder – fill sense lever

    And the torsion spring:

    Bobbin Winder - drive latch
    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
    Bobbin Winder – driving out spindle

    More gentle beating produced this heartrending scene:

    Bobbin Winder - corroded shaft
    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.

  • Kenmore 158: Bobbin Winder Tires

    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
    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
    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
    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.