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

  • Removing Sentry FireSafe Door Trim

    Removing Sentry FireSafe Door Trim

    After turning the key and dialing the correct combination, the unlocking handle on the basement safe refused to move. Applying the dictum “If brute force isn’t working, you’re not using enough of it”, we eventually persuaded the handle downward and the door swung open. Before applying the dictum “If it doesn’t move and should, use WD-40 [*]”, I had to remove the trim cover from the interior side of the door to gain access to the lockwork.

    Start by pressing the two latches inside the small circular holes in the hinge side of the trim cover:

    Sentry FireSafe Door - first latches
    Sentry FireSafe Door – first latches

    Pull the trim over the slightly chamfered bolts, taking advantage of the fact the bottom pulls out more easily than the top, then pry it upward off the latch in the middle of the top:

    Sentry FireSafe Door - top latch
    Sentry FireSafe Door – top latch

    The latches along the other side yield when you bend the trim sufficiently far from the door while applying the Designated Prydriver near the faint mold markings visible around the edge:

    Sentry FireSafe Door - last latches
    Sentry FireSafe Door – last latches

    With the trim removed, you can see fancier safes in this line have two additional bolts engaging the top and bottom of the door frame. The rectangular block on the bottom of the hinge side might be for the batteries required by the spendy electronic lock version.

    The problem turned out to be a lack of lubrication in the door-closed interlock that prevents you from relocking the bolts and wrecking the mechanism when you try to close the door with the bolts extended:

    Sentry FireSafe Door - bolt interlock
    Sentry FireSafe Door – bolt interlock

    A dab of silicone lube on all those sliding interfaces restored the interlock’s good humor.

    The bolts had always rubbed just a bit on the trim cover, so I ovalized the offending side of the holes with an Xacto knife.

    Slamming the trim firmly back on the door reset the latches, cycling the lockwork resynchronized the interlock, and the safe once again works just like it should.

    [*] WD-40 is not the appropriate lube for the lockwork inside a safe, but the dictum aims you in the right direction.

  • Floor Lamp Rebasing

    Floor Lamp Rebasing

    The torchiere floor lamp in the sewing room suffered a catastrophic failure:

    Floor lamp - failed plastic base shell
    Floor lamp – failed plastic base shell

    Contrary to what you might think from seeing the shattered plastic base, we didn’t use the lamp as a club or battering ram. Apparently the designer expected the thin plastic surrounding the hole to withstand all the torque produced by the long pole against the cheap concrete / mortar / grout / whatever lump in the base. As we can recall, this lamp came to us from either a yard sale or a roadside debris harvest, so I suppose the hardware outlasted any reasonable expectation.

    The Basement Laboratory Warehouse disgorged the pole and base from a similar lamp, albeit sporting black paint and a smaller rod connecting its pole to its somewhat larger weight. Not being too fussy about decor, I embiggened the hole in the black base to fit the white lamp’s threaded rod:

    Floor lamp - enlarging replacement base
    Floor lamp – enlarging replacement base

    The dust on the base shows why you shouldn’t stand motionless in the Basement Laboratory for very long.

    The alert reader will have noted the cord passing through a strain relief grommet in the white base. Rather than dismantle the entire lamp, I just cut the cord, ran it through the new base weight, reinstalled the washer + nut, then crimped on a pair of solderless connectors:

    Floor lamp - cord splice
    Floor lamp – cord splice

    The new base doesn’t offer much in the way of attachment points, so I added a cable tie to keep the strain off the connectors:

    Floor lamp - cord strain relief
    Floor lamp – cord strain relief

    A strip of genuine 3M duct tape with double-thick adhesive now traps the cord inside that small channel and, given that the lamps spends most of its time standing quietly in a corner, the cord should be fine for long enough.

  • MTD Snowthrower Throttle Knob: Found!

    MTD Snowthrower Throttle Knob: Found!

    After the snow cleared and we ventured out again, the missing snowthrower throttle knob was sitting on the far reaches of the driveway:

    MTD Snowthrower Throttle Knob - crude repair
    MTD Snowthrower Throttle Knob – crude repair

    It’s a well-meaning, albeit totally ineffectual, expedient repair.

    I put a channel around the slot for the throttle shaft to mimic the original design:

    MTD Snowthrower Throttle Knob - fracture
    MTD Snowthrower Throttle Knob – fracture

    The fracture started at the end and worked its way back, loosening the knob’s grip on the shaft as it went:

    MTD Snowthrower Throttle Knob - pieces
    MTD Snowthrower Throttle Knob – pieces

    Should my replacement survive the next 13 years, it’ll likely outlive the rest of the snowthrower:

    Snowthrower throttle knob - installed
    Snowthrower throttle knob – installed

    If the original MTD choke knob didn’t have that fancy metal insert, I’d replace it just for pretty …

  • American Standard Elite Kitchen Faucet: O-Rings Again

    American Standard Elite Kitchen Faucet: O-Rings Again

    My alleged improvement to the upper bearing ring in our American Standard Elite kitchen faucet didn’t survive nearly as well as I hoped and began leaking through the o-ring seals after the usual year. The 0.4 mm polypropylene shim ring apparently stuck to the nylon bearing ring, wore down to a 0.1 mm thick ribbon against the base, then let the o-ring wear out as usual.

    The black gunk around the top of the upper seal area has the consistency of hard plastic paint, although it’s most likely rubber particles from the o-ring burnished against the bronze base by the sliding PP shim ring:

    American Standard Elite faucet - base
    American Standard Elite faucet – base

    Remember Nisley’s First Rule of Plumbing: Never look inside your water supply pipes.

    As before, the o-rings wear on their inner diameters, indicating that they turn with the spout around the base.

    For lack of anything smarter, I removed as much of the debris as feasible, installed new seals, reassembled the faucet in reverse order, and ordered another set of parts.

    If I hadn’t done such a great job of reinforcing the underside of the sink deck around the mounting rings, to the extent I’m not sure another faucet base else would fit, I’d be far less reluctant to start over.

  • MTD Snowthrower: Replacement Throttle Knob

    MTD Snowthrower: Replacement Throttle Knob

    The throttle knob on our MTD snowthrower (a.k.a. snowblower) cracked apart around its metal shaft when I pulled it upward. A temporary fix involving duct tape and cable ties sufficed to start the engine, although the usual intense vibration shook the knob loose somewhere along the driveway during the next hour.

    Update: Found it!

    Although I have no photographic evidence, I did make a few quick measurements:

    Throttle Knob Dimension Doodles
    Throttle Knob Dimension Doodles

    It fits an MTD model E6A4E, but I suspect nearly all their engines have identical throttle shafts:

    Snowthrower Throttle Knob - stem end - solid model
    Snowthrower Throttle Knob – stem end – solid model

    The only practical way to build the thing has it standing on the shaft end, surrounded by a brim to improve adhesion, so I added (actually, subtracted) a pair of holes for music-wire reinforcements:

    Snowthrower throttle knob - reinforcing wires
    Snowthrower throttle knob – reinforcing wires

    It definitely has a stylin’ look, next to the original choke control knob:

    Snowthrower throttle knob - installed
    Snowthrower throttle knob – installed

    I omitted the finger grip grooves for obvious reasons.

    The slot-and-hole came out slightly smaller than the metal shaft and, rather than wait for epoxy to cure, I deployed a 230 W soldering gun (not a piddly temperature-controlled iron suitable for electronics) on the shaft and melted it into the knob.

    More snow may arrive this week and I printed another knob just in case …

    The OpenSCAD source code as a GitHub Gist:

    // MTD Snowthrower Throttle Knob
    // Ed Nisley KE4ZNU 2020-12-18
    /* [Options] */
    Layout = "Show"; // [Build, Show]
    // Extrusion parameters
    /* [Hidden] */
    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
    Throttle = [17.0,1.85,6.5]; // blade insertion, thickness, width
    PaddleSize = [25,30,9];
    PaddleRound = 4.0;
    PaddleThick = 8.5;
    StemDia = 13.0;
    StemLength = 20.0;
    PinDia = 1.6;
    PinLength = PaddleSize.x + StemLength/2;
    echo(str("Pin: ",PinLength," x ",PinDia," mm"));
    //———————-
    // 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);
    }
    //———————-
    // Pieces
    module Paddle() {
    difference() {
    hull() {
    translate([PaddleSize.x/2,0,0]) {
    for (i=[-1,1], j=[-1,1])
    translate([i*(PaddleSize.x – PaddleRound)/2,j*(PaddleSize.y – PaddleRound)/2,0])
    sphere(d=PaddleRound,$fn=12);
    rotate([0,90,0]) rotate(180/12)
    cylinder(d=PaddleThick,h=PaddleSize.x,,center=true,$fn=12);
    }
    translate([-StemLength,0,0])
    rotate([0,90,0]) rotate(180/12)
    cylinder(d=StemDia,h=Throttle.x,center=false,$fn=12);
    }
    translate([-StemLength,0,0])
    cube([2*Throttle.x,Throttle.y,Throttle.z],center=true);
    translate([-(StemLength + Protrusion),0,0])
    rotate([0,90,0]) rotate(0*180/6)
    PolyCyl(2*Throttle.y,Throttle.x,6);
    for (j=[-1,1])
    translate([-StemLength/2,j*PaddleSize.y/6,0])
    rotate([0,90,0]) rotate(180/4)
    PolyCyl(PinDia,PinLength,4);
    }
    }
    //———————-
    // Build it
    if (Layout == "Show")
    Paddle();
    if (Layout == "Build") {
    translate([0,0,StemLength])
    rotate([0,-90,0])
    Paddle();
    }

  • Turkey Baster FAIL

    Turkey Baster FAIL

    We bought a generic Walmart-grade baster perhaps two years ago to replace a much older one with a failed rubber bulb. We use it intermittently throughout the year and had a turkey in the oven when we discovered this:

    Cracked Baster - overview
    Cracked Baster – overview

    A closer look at the business end:

    Cracked Baster - tip detail
    Cracked Baster – tip detail

    Yes, those cracks go all the way through, there’s a loose spear running the length of the thing, and it definitely doesn’t work as a baster.

    Contrary to what you might think from the general fogging and stress cracking, I haven’t used it for gasoline or brake fluid, nor do we put it away without washing it.

    The rubber bulb still works fine, though, so there’s that.

    We’ll up our spend for an OXO baster and see what happens.

  • Drive Wheelchair Brake Knob

    Drive Wheelchair Brake Knob

    The bent-steel brake levers on our Drive Blue Streak wheelchair present themselves edge-on to the rider:

    Drive Wheelchair Brake
    Drive Wheelchair Brake

    There are good mechanical reasons for shaping and orienting the steel like that, but the handle concentrates the considerable force required to push the brake tab into the rubberoid tire on your (well, my) palms. After a couple of weeks, I decided I didn’t need two more sore spots and conjured a palm-filling knob from the vasty digital deep:

    Wheelchair Brake Knob - installed
    Wheelchair Brake Knob – installed

    Bonus part: the little octagon near the wheel prevents the leg rest (seen in the first picture) from smashing into the end of the brake tab and chipping the lovely blue powder coat. The brown fuzzy felt foot seemed like a good idea at the time, but isn’t strictly necessary.

    A cylindrical handle on Thingiverse apparently fits on the bare steel underneath the rubberish “cushion”, but cutting a perfectly good, albeit uncomfortable, cushion off seemed like a step in the wrong direction. My knob thus descends from a doodle of the OEM dimensions:

    Drive Wheelchair Brake Handle - dimensions
    Drive Wheelchair Brake Handle – dimensions

    The knob builds in two halves adjoining the bonus octagon, which stands on edge to eliminate support inside its slot:

    Wheelchair Brake Mods - solid model - build layout
    Wheelchair Brake Mods – solid model – build layout

    You (probably) need two of all those shapes, a job your slicer is ready to perform. At three hours for each knob, I just printed the same G-Code twice.

    You can customize the knob width to fit your palm, with the other two dimensions fitting themselves around the cushion. Mary and I settled on a knob size that fits both our hands reasonably well, so it’s probably not critical.

    I tried building the knob halves without support for the first prototype, but the sloped upper surface produced awful bridging:

    Wheelchair Brake Knob - unsupported interior
    Wheelchair Brake Knob – unsupported interior

    It’s easy enough to design a customized support structure:

    Wheelchair Brake Mods - cross section
    Wheelchair Brake Mods – cross section

    I oriented the knob to put the split on the narrow sides of the brake handle in order to not have a seam facing my palm:

    Wheelchair Brake Knob - rear half installed
    Wheelchair Brake Knob – rear half installed

    The quartet of M3×20 mm socket-head cap screws thread into brass inserts epoxied into the rear half. I recessed their heads deeply into the front half and avoided thinking too hard about plugs matching the surface curvature:

    Wheelchair Brake Knob - front view
    Wheelchair Brake Knob – front view

    The low-vertex-count polygonal shape is a stylin’ thing and produces a nice feel during a firm shove, at least to my paws. Although I’d rather not need a wheelchair at all, setting the brakes now seems authoritative instead of annoying.

    The OpenSCAD source code as a GitHub gist:

    // Pride wheelchair brake lever mods
    // Ed Nisley KE4ZNU 2020-11
    /* [Layout options] */
    Layout = "Build"; // [Build, Show, Fit, TabCap, Handle, Knob, Support]
    // Hold up the knob's inside
    Support = true;
    /* [Extrusion parameters] */
    /* [Hidden] */
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    function IntegerLessMultiple(Size,Unit) = Unit * floor(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    //———————-
    // 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 dimensions] */
    WallThick = 4.0; // min wall thickness
    Screw = [3.0,5.5,20.0]; // thread, head, length under head
    Insert = [3.0,4.1,8.0]; // thread, knurl, length
    //———————-
    // Brake tab cap
    BrakeTab = [15,21,3.1]; // length to wheel, width, thickness
    BrakeTabSagitta = 8.0; // height of curved endcap
    CapOAL = [BrakeTab.y + 2*WallThick,BrakeTab.y + 2*WallThick,BrakeTab.z + 2*WallThick];
    module TabCap() {
    difference() {
    rotate(180/8)
    cylinder(d=CapOAL.y,h=CapOAL.z,center=true,$fn=8);
    translate([BrakeTab.x/2,0,0])
    cube(BrakeTab,center=true);
    rotate(180/8)
    cylinder(d=BrakeTab.y/cos(180/8),h=BrakeTab.z,center=true,$fn=8);
    }
    }
    //———————-
    // Brake lever handle
    // Soft covering with rounded sides that we square off for simplicity
    HandleRibs = [15,34,14]; // ignoring slight taper from end
    HandleCore = [50.0,24.0,12.0]; // straight section of lever to top of ribs
    HandleTipWidth = 30.0; // ignoring actual sector height
    module Handle() {
    union() {
    hull() {
    rotate(180/8)
    cylinder(d=HandleTipWidth/cos(180/8),h=HandleCore.z,center=true,$fn=8);
    translate([-HandleCore.x/2,0,0])
    cube(HandleCore,center=true);
    }
    translate([-(3*HandleCore.x/2 – Protrusion),0,0]) // extend base for ball trimming
    cube(HandleCore,center=true);
    translate([-HandleRibs.x/2,0,0])
    cube(HandleRibs,center=true);
    }
    }
    //———————-
    // Support structure for handle cavity inside knob
    // Totally ad-hoc tweakage
    // Remember it's lying on its side to match the handle
    NumRibs = 2 + 1; // must be odd
    RibSpace = floor(HandleCore.z/(NumRibs + 1));
    module KnobSupport() {
    color("Yellow") { // support overlaps in the middle
    render(convexity=3)
    intersection() {
    for (k=[-1,1])
    translate([0,k*ThreadThick,0]) // shrink inward to break adhesion
    Handle();
    translate([(HandleCore.x – HandleRibs.x)/2 – HandleCore.x – Protrusion,0,0])
    cube([HandleCore.x – HandleRibs.x,HandleRibs.y,HandleCore.z],center=true);
    union()
    for (k=[-floor(NumRibs/2):floor(NumRibs/2)])
    translate([0,0,k* RibSpace])
    cube([2*HandleCore.x,HandleRibs.y,2*ThreadWidth],center=true);
    }
    translate([(HandleCore.x – HandleRibs.x)/2 – HandleCore.x,0,0])
    cube([HandleCore.x – HandleRibs.x,4*ThreadWidth,NumRibs*RibSpace],center=true);
    }
    }
    //———————-
    // Brake handle knob
    // Largely built with magic numbers
    // Includes support because it's not really optional
    KnobOD = 55.0;
    KnobOffset = HandleRibs.x/1;
    KnobSides = 2*4*3;
    module Knob() {
    difference() {
    hull() {
    resize([0,HandleRibs.y + 4*WallThick,HandleCore.x + HandleTipWidth/2 + WallThick])
    sphere(d=KnobOD,$fn=KnobSides);
    }
    translate([0,0,KnobOffset])
    rotate([0,-90,0])
    Handle();
    for (i=[-1,1],k=[-1,1])
    translate([i*KnobOD/4,0,k*KnobOD/4]) {
    rotate([90,0,0])
    PolyCyl(Insert[OD],1.5*Insert[LENGTH],6);
    translate([0,-Screw[LENGTH]/2,0])
    rotate([-90,0,0])
    PolyCyl(Screw[ID],KnobOD,6);
    translate([0,Screw[LENGTH] – Insert[LENGTH],0])
    rotate([-90,0,0])
    PolyCyl(Screw[OD],KnobOD,6);
    }
    }
    if (Support)
    translate([0,0,KnobOffset])
    rotate([0,-90,0])
    KnobSupport();
    }
    //———————-
    // Lash it together
    if (Layout == "TabCap") {
    TabCap();
    }
    if (Layout == "Handle") {
    Handle();
    }
    if (Layout == "Support") {
    KnobSupport();
    }
    if (Layout == "Knob") {
    Knob();
    }
    if (Layout == "Show") {
    translate([60,0,0])
    TabCap();
    Knob();
    }
    if (Layout == "Fit") {
    translate([60,0,0])
    difference() {
    TabCap();
    translate([0,0,CapOAL.z/2])
    cube(CapOAL,center=true);
    }
    difference() {
    Knob();
    translate([KnobOD + KnobOD/4,0*KnobOD,0])
    cube(2*KnobOD,center=true);
    translate([-KnobOD,-KnobOD,0])
    cube(2*KnobOD,center=true);
    }
    }
    if (Layout == "Build") {
    translate([KnobOD/2,0,(CapOAL.y*cos(180/8))/2])
    rotate([0,-90,90])
    TabCap();
    for (j=[-1,1])
    translate([0,-j*0.75*HandleCore.x,0])
    difference() {
    rotate([j*90,0,0])
    Knob();
    translate([0,0,-KnobOD])
    cube(2*KnobOD,center=true);
    }
    }

    A doodle with dimensions of other parts:

    Drive Wheelchair - brake footrest tab dimensions
    Drive Wheelchair – brake footrest tab dimensions

    The angled tab on the middle left is for the leg rest release latch, but I decided not to silk-purse-ize the thing.