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

  • Step2 Garden Seat: Replacement Seat

    Step2 Garden Seat: Replacement Seat

    A pair of Step2 rolling garden seats (they have a new version) served in Mary’s gardens long enough to give their seat panels precarious cracks:

    Step2 Seat - OEM seat
    Step2 Seat – OEM seat

    The underside was giving way, too:

    Step2 Seat - cracks
    Step2 Seat – cracks

    We agreed the new seat could be much simpler, although it must still hinge upward, so I conjured a pair of hinges from the vasty digital deep:

    Rolling Cart Hinges - solid model - bottom
    Rolling Cart Hinges – solid model – bottom

    The woodpile disgorged a slab of 1/4 inch = 6 mm plywood (used in a defunct project) of just about the right size and we agreed a few holes wouldn’t be a problem for its projected ahem use case:

    Step2 Seat - assembled
    Step2 Seat – assembled

    The screw holes on the hinge tops will let me run machine screws all the way through, should that be necessary. So far, a quartet of self-tapping sheet metal (!) screws are holding firm.

    Rolling Cart Hinges - solid model - top
    Rolling Cart Hinges – solid model – top

    A closer look at the hinges in real life:

    Step2 Seat - top view
    Step2 Seat – top view

    The solid model now caps the holes; I can drill them out should the need arise.

    From the bottom:

    Step2 Seat - bottom view
    Step2 Seat – bottom view

    Three coats of white exterior paint make it blindingly bright in the sun, although we expect a week or two in the garden will knock the shine right off:

    Step2 Seat - painted
    Step2 Seat – painted

    After the first coat, I conjured a drying rack from a bamboo skewer, a cardboard flap, and some hot-melt glue:

    Step2 Seat - drying fixture
    Step2 Seat – drying fixture

    Three small scars on the seat bottom were deemed acceptable.

    The OpenSCAD source code as a GitHub Gist:

    // Hinge brackets for rolling garden stool
    // Ed Nisley – KE4ZNU – 2019-06
    Layout = "Build"; // [Block,Build,Show]
    Support = true;
    /* [Hidden] */
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    Protrusion = 0.1; // make holes end cleanly
    ID = 0;
    OD = 1;
    LENGTH = 2;
    //———————-
    // Dimensions
    SeatThick = 6.0; // seat panel above cart body
    HingePin = [11.5,12.0,7.0]; // ID = tip OD = base
    HingeOffset = 8.0; // hinge axis above cart body (larger than radius!)
    HingeBolster = [5.0,24.0,SeatThick]; // backing block below hinge
    Block = [25.0,HingeOffset + 30.0,23.0]; // Z = above cart body
    Screw = [3.8,11.0,2.5]; // self-tapping #8 OD=head LENGTH=head thickness
    ScrewOC = 15.0; // spacing > greater than head OD
    ScrewOffset = Block.y/2 – (ScrewOC/2 + Screw[OD]/2 + HingeOffset); // space for head behind hinge
    BlockRadius = 7.0; // corner rounding
    //———————-
    // 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);
    }
    // Basic block shape
    // X axis collinear with hinge axes, hinge base at X=0
    module HingeBlock() {
    PinSides = 3*4;
    PinSupport = [HingePin[LENGTH] – 2*ThreadWidth,0.6*HingeOffset,HingePin[OD]]; // pre-rotated
    union() {
    translate([Protrusion,Block.y/2 – HingeOffset,HingeOffset])
    rotate([0,-90,0])
    rotate(180/PinSides)
    cylinder(d=HingePin[OD],h=HingePin[LENGTH] + Protrusion,$fn=PinSides);
    difference() {
    hull() {
    translate([Block.x – BlockRadius,-(Block.y/2 – BlockRadius),Block.z – BlockRadius])
    rotate(180/PinSides)
    sphere(r=BlockRadius/cos(180/PinSides),$fn=PinSides);
    translate([0,-(Block.y/2 – BlockRadius),Block.z – BlockRadius])
    rotate([0,90,0]) rotate(180/PinSides)
    cylinder(r=BlockRadius/cos(180/PinSides),h=Block.x/2,$fn=PinSides);
    translate([Block.x – BlockRadius,(Block.y/2 – BlockRadius),Block.z – BlockRadius])
    sphere(r=BlockRadius/cos(180/PinSides),$fn=PinSides);
    translate([0,(Block.y/2 – BlockRadius),Block.z – BlockRadius])
    rotate([0,90,0]) rotate(180/PinSides)
    cylinder(r=BlockRadius/cos(180/PinSides),h=Block.x/2,$fn=PinSides);
    translate([0,-Block.y/2,0])
    cube([Block.x,Block.y – HingeOffset,Block.z/2],center=false);
    translate([0,Block.y/2 – HingeOffset,HingeOffset])
    rotate([0,90,0]) rotate(180/PinSides)
    cylinder(r=HingeOffset/cos(180/PinSides),h=Block.x,$fn=PinSides);
    }
    translate([Block.x/2 + HingeBolster.x,0,(SeatThick – Protrusion)/2])
    cube([Block.x,2*Block.y,SeatThick + Protrusion],center=true);
    translate([0,-HingeBolster.y,(SeatThick – Protrusion)/2])
    cube([3*Block.x,Block.y,SeatThick + Protrusion],center=true);
    for (j=[-1,1])
    translate([Block.x/2,j*ScrewOC/2 + ScrewOffset,-4*ThreadThick])
    rotate(180/8)
    PolyCyl(Screw[ID],Block.z,8);
    }
    }
    if (Support) { // totally ad-hoc
    color("Yellow") render(convexity=4)
    difference() {
    translate([-(PinSupport.x/2 + 2*ThreadWidth),Block.y/2 – PinSupport.y/2,HingeOffset])
    cube(PinSupport,center=true);
    translate([Protrusion,Block.y/2 – HingeOffset,HingeOffset])
    rotate([0,-90,0])
    rotate(180/PinSides)
    cylinder(d=HingePin[OD] + 2*ThreadThick,h=2*HingePin[LENGTH],$fn=PinSides);
    for (i=[-1:1])
    translate([i*4*ThreadWidth – HingePin[LENGTH]/2,
    Block.y/2 – (PinSupport.y + 1*ThreadThick),
    HingeOffset])
    cube([2*ThreadWidth,2*PinSupport.y,2*PinSupport.z],center=true);
    }
    }
    }
    module Blocks(Hand = "Left") {
    if (Hand == "Left")
    HingeBlock();
    else
    mirror([1,0,0])
    HingeBlock();
    }
    //- Build it
    if (Layout == "Block")
    HingeBlock();
    if (Layout == "Show") {
    translate([1.5*HingePin[LENGTH],0,0])
    Blocks("Left");
    translate([-1.5*HingePin[LENGTH],0,0])
    Blocks("Right");
    }
    if (Layout == "Build") {
    translate([0,-Block.z/2,Block.y/2])
    rotate([-90,0,0]) {
    translate([1.5*HingePin[LENGTH],0,0])
    Blocks("Left");
    translate([-1.5*HingePin[LENGTH],0,0])
    Blocks("Right");
    }
    }

    This original doodle gives the key dimensions, apart from the rounded rear edge required so the seat can pivot vertically upward:

    Cart Hinge - dimension doodle
    Cart Hinge – dimension doodle

    The second seat looks just like this one, so life is good …

  • Power Lift Chair Upholstery Protection

    For reasons not relevant here, we have a power lift chair which has been shedding upholstery tufts since the day we got it. After realizing this wasn’t going to stop on its own, I spent a while poking around underneath and discovered the steel struts supporting the leg rest rub along the upholstery during their entire travel:

    Lift chair - strut vs upholstery
    Lift chair – strut vs upholstery

    Apparently, the padding behind the upholstery pushes it a bit further out than the original design could accommodate, letting the raw edges on the steel struts shave off the fuzz.

    I put relatively smooth stainless steel tape on all the protrusions and bent it around the rough edges:

    Lift chair - strut smoothing
    Lift chair – strut smoothing

    Those steel folds are smoother than they appear.

    It’s not obvious this will solve the problem, but the struts seems to be scraping off much less fuzz than before, so it’s a step in the right direction.

    Why is it all of today’s consumer products require 10% more engineering to work in the real world?

  • Weatherproof Outlet Cover Re-Chaining

    The yard camera now resides outdoors and plugs into one of three outlets on the patio, all of which have weatherproof covers attached by a bead chain to the trim plate:

    Patio Outlet - new chain installed
    Patio Outlet – new chain installed

    That’s the after-repair condition, as two of the three chains were broken when we bought the house.

    Stipulated: the covers needed scrubbing, but sometimes ya gotta stay focused on the Main Goal.

    Two feet of 3.4 mm brass bead chain (because spares: ya gotta have stuff) arrived from eBay, I dismounted all three covers, and discovered the bell-shaped brass caps on the old chains were perfectly serviceable after six decades:

    Patio Outlet - chain retainers
    Patio Outlet – chain retainers

    The outlets are wired to circuit breaker 28, of course.

    Having enough chain to go around, each cover now sports a slightly longer leash than before:

    Patio Outlet - chain assembly
    Patio Outlet – chain assembly

    Reinstall in reverse order, the camera rebooted as it should, and it’s all good out there:

    Pressure-washing Patio Railing
    Pressure-washing Patio Railing

    That was easy …

  • Whirlpool Refrigerator Drawer Support Re-Re-Re-Gluing

    Spring cleaning provided the opportunity for Yet Another Episode in my long-standing battle with the Whirlpool refrigerator entropy generator:

    Whirlpool Refrigerator - drawer support gluing
    Whirlpool Refrigerator – drawer support gluing

    That little thing supports half the weight of the two drawers across the bottom of the refrigerator; how such a thin plastic member was supposed to be adequate to the task continues to escape me.

    If we had to pay real money for all the repairs I’ve made to that piece of crap, we’d have replaced it long ago. The only thing that hasn’t failed so far is the compressor, so driving it until it drops continues to make sense; replacing a working anything seems like a bad idea.

  • Monthly Science: Weight

    Homeostasis is a thing:

    Weight Chart 2019-06 - Ed
    Weight Chart 2019-06 – Ed

    On the other paw, the eyeballometric trend line since mid-April slopes at -1 lb/month and arrives at just over 150 lb in December, so progress continues apace.

  • American Standard Kitchen Faucet: Valve Shaft Mystery

    The latest in a continuing series of annoyances from our American Standard kitchen faucet: it became increasingly hard to turn it on with the handle all the way to the left in the “hot” position. Bear in mind this valve is less than a year old and I replaced its predecessor two years before that, after maybe a decade of service from the OEM valve.

    Pulling it apart revealed the problem, which requires a close inspection.

    The view from the “cold” side:

    American Standard faucet cartridge - cold side
    American Standard faucet cartridge – cold side

    And from the “hot” side:

    American Standard faucet cartridge - hot side
    American Standard faucet cartridge – hot side

    See it?

    The valve handle stem pivots on the 4 mm shaft passing through the black “engineering plastic” shape inside the red hot-limit ring. This top view shows the overall layout:

    American Standard faucet - hot limit ring
    American Standard faucet – hot limit ring

    The shaft has worked its way leftward, toward the “hot” side, until it bumped into the limit ring. The right end of the shaft hasn’t come completely out of the inside of its pivot, but it’s apparently gone far enough to stop pivoting freely.

    This may also explain how the previous hot-limit ring worked loose: the misplaced shaft applies torque to the limit ring as we move the lever to the “cold” side. I don’t know how the ring worked its way upward from its positioning notches. Overall, it seem plausible.

    Installing a new valve isn’t going to get us a better design, so I must figure out how to keep the shaft in the middle of its travel. Perhaps replacing it with a slightly longer shaft will work around the problem, because it simply can’t slide in either direction.

    Loosening the three screws holding the cartridge down (and applying pressure against the seals) reduces the force required to move the faucet, even with the shaft in the wrong position. This suggests the valve body distorts slightly, so I loosened all three and (roughly) equalized their torque; the valve isn’t leaking and we’ll see what happens next.

  • Ooma Telo 2: Speaker FAIL

    The tiny voice inside our Ooma Telo 2 box died, although the VOIP phone service continued to work fine. A bit of searching showed the speaker seems to be the weak link.

    Well, I can fix that.

    Start by prying the recessed top panel off the case:

    Ooma Telo 2 - upper case latches
    Ooma Telo 2 – upper case latches

    Remove the circuit board to expose the tiny speaker, taking care not to rip the tiny wires out of the tiny connector:

    Ooma Telo 2 - OEM speaker to PCB
    Ooma Telo 2 – OEM speaker to PCB

    You can’t measure a dead speaker, but it seems to be an 8 Ω unit.

    The speaker sits in a rubber surround, with a foam rubber cushion against the PCB, tucked into a walled garden stiffening the case:

    Ooma Telo 2 - speaker port
    Ooma Telo 2 – speaker port

    I don’t happen to have a tiny 8 Ω speaker, but I do have a bunch of small speakers (Update: 28 mm OD), so I bulldozed those walls with a flush cutting pliers and a bit of cussing to make room:

    Ooma Telo 2 - modified speaker port
    Ooma Telo 2 – modified speaker port

    Nibble an adapter ring to match the rim of the new speaker, thereby routing the sound out those little holes, and hot-melt glue it in place:

    Ooma Telo 2 - speaker adapter
    Ooma Telo 2 – speaker adapter

    Hot-melt glue the new speaker in place atop the adapter, taking care to fill all the edges / cracks / crevices below it with an impenetrable wall of glop:

    Ooma Telo 2 - replacement speaker installed
    Ooma Telo 2 – replacement speaker installed

    The sealing part turns out to be critical with these little speakers, because a leak from front to back will pretty much cancel all the sound from the cone.

    Cut the wires off the old speaker, affix to the new one, replace the PCB, snap the case lid in place, and it sounds better than new.

    Millions of transistors in those ICs, but Ooma can’t spec a good speaker? Maybe they should have used a bigger speaker to begin with; ya never know.