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.

Tag: Repairs

If it used to work, it can work again

  • Bathroom Light Switch: Contact Autopsy

    The dual switch controlling the bathroom lights began requiring some fiddling, which was not to be tolerated. After replacing the switch, I cracked the old one open to see what’s inside…

    The failed side of the switch controlled the lights over the sink:

    Light switch contacts - lights
    Light switch contacts – lights

    The side for the ceiling vent fan + light got much less use, still worked, and look a bit less blasted.

    Light switch contacts - ceiling fan
    Light switch contacts – ceiling fan

    Not much to choose between the two. It’s been running for nigh onto two decades, so …

  • Olfa Rotary Cutter Spacer

    At some point along the way, the bright yellow washer (they call it a “spacer”) on Mary’s 60 mm Olfa rotary cutter went missing. A casual search suggests that replacement washers come directly from Olfa after navigating their phone tree, but …

    Judging from scuffs on the rear surface, the washer serves two purposes:

    • Hold the blade close to the handle against slightly misaligned cutting forces
    • Add more compression to the wave washer under the nut

    This model is much more intricate than the stock washer:

    Olfa Rotary Cutter - backing washer
    Olfa Rotary Cutter – backing washer

    The trench across the middle of the thicker part allows a wider compression adjustment range for the wave washer and provides more thread engagement at the lightest setting for my liking. The shape comes from the chord equation based on measurements of the wave washer:

    Olfa Rotary Cutter - washer doodles
    Olfa Rotary Cutter – washer doodles

    The wave washer keys on the bolt flats: the whole affair rotates with the blade and gives the nut no inclination to unscrew. If you remove the trench, the remaining hole has the proper shape to key on the bolt and rotate with it; with the trench in place, the wave washer’s sides haul the plastic washer along with it.

    The plain ring, just two threads thick, glues bottom-to-bottom on the thicker part to soak up the air gap and provide more blade stability. It’s not entirely clear that’s a win; it’s easy to omit.

    It looks about like you’d expect:

    Olfa Rotary Cutter - washer in place
    Olfa Rotary Cutter – washer in place

    The wave washer must go on the bolt with the smooth curve downward into the trench. That orientation that wasn’t enforced by the Official Olfa spacer washer’s smooth sides.

    The nut sits upside-down to show the face that normally sits against the wave washer. I’d lay long odds that the recess around the threads originally held a conical compression spring with a penchant for joining the dust bunnies under the sewing table. You can insert the wave washer the wrong way, but it doesn’t store enough energy to go airborne unless you drop it, which did happen once with the expected result.

    The OpenSCAD source code as a GitHub gist:

    // Olfa rotary cutter backing washer
    // Ed Nisley KE4ZNU January 2016
    Layout = "Build";
    //- Extrusion parameters must match reality!
    // Print with +1 shells and 3 solid layers
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    //———————-
    // Dimensions
    WasherOD = 35.0;
    WasherThick = 1.5;
    WaveOD = 14.0; // wave washer flat dia
    WaveM = 1.8; // height of wave washer bend
    BendRad = (pow(WaveM,2) + pow(WaveOD,2)/4) / (2*WaveM); // radius of wave washer bend
    echo(str("Wave washer bend radius: ",BendRad));
    SpacerID = WaveOD + 2.0;
    SpacerThick = 2*ThreadThick;
    NumSides = 12*4;
    $fn = NumSides;
    //———————-
    // 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);
    }
    //———————-
    // Parts
    module Upper() {
    difference() {
    cylinder(d1=WasherOD,d2=(WasherOD – 2.0),h=WasherThick);
    translate([0,0,-Protrusion])
    intersection() {
    PolyCyl(8.2,2.0,8);
    cube([(6.0 + HoleWindage),10,2*WasherThick],center=true);
    }
    translate([-(WaveOD + 1.0)/2,0,BendRad])
    rotate([0,90,0]) rotate(0*180/16)
    PolyCyl(BendRad*2,(WaveOD + 1),16);
    }
    }
    module Spacer() {
    difference() {
    cylinder(d=WasherOD,h=SpacerThick);
    translate([0,0,-Protrusion])
    cylinder(d=SpacerID,h=2*SpacerThick);
    }
    }
    //———————-
    // Build it!
    if (Layout == "Show") {
    translate([0,0,SpacerThick])
    color("Cyan")
    Upper();
    color("LightCyan")
    Spacer();
    }
    if (Layout == "Build") {
    translate([-0.6*WasherOD,0,0])
    Upper();
    translate([0.6*WasherOD,0,0])
    Spacer();
    }
  • Sienna Hood Rod Pivot: Failure Analysis

    Our Larval Engineer returned the remaining chunk of the failed PLA hood rod pivot from “her” Sienna minivan:

    Sienna hood rod pivot - PLA fracture
    Sienna hood rod pivot – PLA fracture

    A closer look at the top surface (facing you in the picture above) shows the threads didn’t fuse into a solid mass across the entire object:

    Sienna Hood Pivot - PLA fracture - top
    Sienna Hood Pivot – PLA fracture – top

    The darker region in the middle comes from the infill pattern, which should have air gaps.

    The bottom surface (on the platform during printing) shows how the threads spread out when the nozzle is closer to the platform than the layer thickness:

    Sienna Hood Pivot - PLA fracture - bottom right
    Sienna Hood Pivot – PLA fracture – bottom right

    That’s more pronounced on the other side of the pivot:

    Sienna Hood Pivot - PLA fracture - bottom left 1
    Sienna Hood Pivot – PLA fracture – bottom left 1

    The infill looks like a separate wall inside the two perimeter threads. That’s pretty much what you get in the space between two close-set walls: there’s not enough room for the full infill pattern.

    A slightly different focus plane shows the mashed bottom layer, infill sitting atop the bottom layer, and fused perimeter threads:

    Sienna Hood Pivot - PLA fracture - bottom left 2
    Sienna Hood Pivot – PLA fracture – bottom left 2

    Because 3D printing doesn’t (and really can’t) produce a solid block of plastic, the object will fail much more readily than an injection-molded part. The threads in the most highly stressed section fail first, after which the remainder will just rip apart. In this case, the hood rod provides a huge lever that easily overstresses the plastic; I’m surprised the original part lasted as long as it did.

    We all knew PLA wasn’t the right material for the job, right from the start, so we’ll see how the enlarged PETG version works in the field.

  • Bike Helmet Earbud Replacement

    A bag arrived from halfway around the planet, bearing five sets of cheap earbuds. There was no way to tell from the eBay description, but they’re vented on the side:

    Cheap earbud - side vent detail
    Cheap earbud – side vent detail

    And also to the rear, down inside those deep slots below the chromed plastic cover:

    Cheap earbud - back openings
    Cheap earbud – back openings

    The raised lettering is a nice touch; the other earbud has a script L.

    The PET braid over the fragile wire should withstand a bit more abuse than usual. The strain relief isn’t anything to cheer, though, consisting of that rectangular channel with the wire loose inside. I figured I’d start minimal and fix whatever crops up; I have nine more earbuds to go.

    The motivation for all this was having the Gorilla Tape peel off the helmet, leaving a hardened mass of glue behind, then snagging the earbud wires. This is the new, somewhat better protected, wiring:

    Bell Helmet - mic-earbud wire - hardened tape adhesive
    Bell Helmet – mic-earbud wire – hardened tape adhesive

    In a triumph of hope over experience, I applied more Gorilla Tape:

    Bell Helmet - re-taped mic-earbud wiring
    Bell Helmet – re-taped mic-earbud wiring

    The helmet may need replacing after another iteration or two.

    My solid modeling hand has become stronger these days, so I should gimmick up a flat-ish wart anchoring the mic boom and all the wiring to the helmet shell.

  • Copper Pipe Corrosion Pinholes

    When we moved into this house, I noticed a hose clamp around the half-inch copper pipe carrying hard water to the toilets and kitchen sink:

    Hose clamp patch on copper pipe
    Hose clamp patch on copper pipe

    That’s obviously a whole bunch easier than removing and replacing a section of copper pipe, so I’d say it was entirely justified. The fact that it hasn’t leaked for at least the last quarter century counts for something.

    However, Mary recently discovered a small wet spot on the basement floor. Looking directly upward, we saw:

    Copper pipe corrosion pinhole - 1
    Copper pipe corrosion pinhole – 1

    That was in open air; I added the marks around the corrosion to highlight it.

    I’d applied some foam insulation on the supply end of the pipe and, just to check, peeled it back:

    Copper pipe corrosion pinhole - 2
    Copper pipe corrosion pinhole – 2

    Huh. Although that leak was slow enough to not leak out of the insulation (the slit was upward), disturbing the corrosion produced a regular drip. Again, those marks are new.

    OK, two active pinhole leaks and a small dry green spot further downstream says it’s finally time to replace that pipe. The lengths of pipe with the pinholes add up to about eight feet, which suggests the plumber installed a bad piece of pipe back in 1955.

    Yes, I applied two more hose clamps for the holiday season, but that can’t last.

    Having a good stock of tees, elbows, and unions on hand, all I need is 21 feet (not 20, alas) of shiny new copper pipe to replace the entire run containing all the pinholes; I’m not going to fiddle around replacing just a few sections.

  • Blue Gauntlet Fencing Helmet Ear Grommet

    Our Larval Engineer practiced fencing for several years, learning the fundamental truth that you should always bring a gun to a knife fight:

    Fencing - taking a hit
    Fencing – taking a hit

    It’s time to pass the gear along to someone who can use it, but we discovered one of the ear grommets inside the helmet had broken:

    Blue Gauntlet M003-BG Helmet - broken ear grommet
    Blue Gauntlet M003-BG Helmet – broken ear grommet

    The cylinder in the middle should be attached to the washer on the left, which goes inside the helmet padding. It’s a tight push fit inside the washer on the right, which goes on the outside of the padding. Ridges along the cylinder hold it in place.

    Being an injection-molded polyethylene part, no earthly adhesive or solvent will bother it, soooo… the solid model pretty much reproduces the original design:

    Fencing Helmet Ear Grommet - show
    Fencing Helmet Ear Grommet – show

    The top washer goes inside the padding against your (well, her) ear, so I chamfered the edges sorta-kinda like the original.

    There are no deliberate ridges on the central cylinder, but printing the parts in the obvious orientation with no additional clearance makes them a very snug push fit and the usual 3D printing ridges work perfectly; you could apply adhesive if you like. The outside washer has a slight chamfer to orient the post and get it moving along.

    The posts keep the whole affair from rotating, but I’m not sure they’re really necessary.

    Printing a pair doesn’t take much longer than just one:

    Fencing Helmet Ear Grommet - build
    Fencing Helmet Ear Grommet – build

    It doesn’t look like much inside the helmet:

    Blue Gauntlet M003-BG - replacement ear grommet - installed
    Blue Gauntlet M003-BG – replacement ear grommet – installed

    The OpenSCAD source code as a gist from Github:

    // Fencing Helmet Ear Grommet
    // Ed Nisley KE4ZNU December 2015
    // Layout options
    Layout = "Show"; // Base Cap Build Show
    //- Extrusion parameters must match reality!
    // Print with +1 shells and 3 solid layers
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    //———————-
    // Dimensions
    NumSides = 12*4;
    $fn = NumSides;
    //———————-
    // 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);
    }
    //——————-
    // Parts
    // Base on outside of liner
    PostOD = 15.5;
    PostLength = 8.0;
    BaseOD = 26.0;
    BaseLength = 3.4;
    module Base() {
    difference() {
    union() {
    cylinder(d=BaseOD,h=2.0);
    cylinder(d=20.0,h=BaseLength);
    for (i=[0:5])
    rotate(i*360/6)
    translate([11.5,0,0])
    rotate(180/6)
    cylinder(d1=2.5,d2=3*ThreadWidth,h=4.0,$fn=6);
    }
    translate([0,0,-Protrusion])
    // PolyCyl(PostOD,4.0,NumSides/4);
    cylinder(d=PostOD,h=PostLength,$fn=NumSides/4);
    translate([0,0,(BaseLength – 4*ThreadThick)])
    cylinder(d1=PostOD,d2=(PostOD + 2*ThreadWidth),h=(4*ThreadThick + Protrusion),$fn=NumSides/4);
    }
    }
    // Cap inside liner
    CapID = 12.0;
    CapOD = 28.0;
    CapThick = 3.0;
    module Cap() {
    difference() {
    union() {
    rotate_extrude(convexity=2)
    polygon(points=[
    [CapID/2 + CapThick/3,0.0],
    [CapOD/2 – CapThick/3,0.0],
    [CapOD/2,CapThick/2],
    [CapOD/2,CapThick],
    [CapID/2,CapThick],
    [CapID/2,CapThick – CapThick/3]
    ]);
    translate([0,0,CapThick – Protrusion])
    cylinder(d=PostOD,h=(PostLength – (CapThick – Protrusion)),$fn=NumSides/4);
    }
    translate([0,0,-Protrusion])
    PolyCyl(CapID,10.0,$fn);
    }
    }
    //———————-
    // Build it!
    if (Layout == "Base")
    Base();
    if (Layout == "Cap")
    Cap();
    BuildSpace = 30/2;
    if (Layout == "Build") {
    for (j=[-1,1])
    translate([j*BuildSpace,0,0]) {
    translate([0,-BuildSpace,0])
    Base();
    translate([0,BuildSpace,0])
    Cap();
    }
    }
    if (Layout == "Show") {
    color("LightGreen") Base();
    translate([0,0,12])
    rotate([180,0,0])
    color("LightBlue") Cap();
    }

  • Logitech M305 Mouse Switch Cleaning

    While installing Mint on the Lenovo Q150, I discovered that the right button on the (long disused) Logitech M305 wireless mouse wasn’t working. After replacing the batteries (always check the batteries), it still didn’t work, so I peeled the four slippery feet off the bottom, removed the screws, and confronted the interior:

    Logitech M305 mouse - interior
    Logitech M305 mouse – interior

    Much to my surprise, the button switches had removable covers:

    Logitech M305 mouse - switch disassembly
    Logitech M305 mouse – switch disassembly

    I put a minute drop of DeoxIT Red on a slip of paper, ran it between both pairs of contacts, removed a considerable amount of tarnish, reassembled in reverse order, and it’s all good again.

    The glue on the back of the slippery feet didn’t like being peeled off, so I expect they’ll fall off at some point.

    It’s much easier to drive a GUI with three functional buttons…

    [Update: Long-time commenter Raj notes:

    I always had problem with the middle button. I have replaced them a few times and learnt that they come with different operating pressures. The soft ones are hard to come by. I found an alternate in the PTT switches on Yaesu handies in my junk.

    That’s the blocky switch to the left of the shapely wheel cutout.]