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: Machine Shop

Mechanical widgetry

  • Side Mirror Turn Signal

    I hoped this bit of roadside debris would yield a shiny new amber LED and driver:

    Car mirror - shattered housing
    Car mirror – shattered housing

    But, alas, it uses an ordinary WY5W incandescent bulb:

    Car mirror - turn signal
    Car mirror – turn signal

    That whole assembly seems to be the replaceable unit, as the lens is firmly snapped-and-glued to the housing. The white shell used to hold the wires, but those vanished when the collision ripped the mirror off the car.

    After I pried off the shattered lens and extracted the bulb, I found a broken filament.

    Ah, well, now we won’t be riding through plastic shards along the shoulder.

  • Siglent SDS2304X Oscilloscope: Homebrew Front Cover

    Both my Tek 2215A and HP 54602 oscilloscopes came with snap-on front covers to protect all those delicate knobs and connectors. Not so the Siglent SDS2304X, which is basically a flat shoebox with a handle: the case has no features for a cover to snap onto, Siglent doesn’t offer a padded carrying case, and it’s too thick big for any of the laptop bags around here.

    I’ve been lugging it to Squidwrench meetings and can easily visualize a gash across the LCD panel or a knob rammed against a door frame.

    So I trimmed a pair of foam angles, punched holes to fit around the knobs along the right edge, cut up a cardboard tray from the heap, and duct-taped the whole mess together:

    Siglent SDS2304X Oscilloscope - crude front cover - interior
    Siglent SDS2304X Oscilloscope – crude front cover – interior

    The cover is equally ugly from the outside:

    Siglent SDS2304X Oscilloscope - crude front cover - installed
    Siglent SDS2304X Oscilloscope – crude front cover – installed

    A Velcro bellyband around the whole affair / through the handle holds it together.

    I considered 3D printing a set of corners and screwing them to a flat plastic plate, but came to my senses just in time.

  • Tour Easy Rack: Front Mount Screw

    Long ago, I conjured a front rack mount from an aluminum bar across the seat struts on our Tour Easy recumbents, with a spherical washer soaking up the angular misalignment. The rack on Mary’s bike developed a serious wobble due to a missing screw, which was easy enough to replace:

    Rack mount screw - rear
    Rack mount screw – rear

    From the side:

    Rack mount screw - side
    Rack mount screw – side

    It’s a 2 inch screw sawed down to 1.5 inch, ground to shape, then run through a die to clean up the threads.

    The nylon lock nut over on the left should keep the screw from working its way out of the tapped aluminum bar. On the other paw, a dab of Loctite survived nearly a decade of heavy loads and vibration.

  • Bypass Lopper

    Some surreptitious brush clearing called for a tool larger than our wonderful Fiskars PowerGear pruner, so I unearthed a long-disused bypass lopper in the garage (it may have Come With The House). Alas, the pivot bolt lost its jam nut long ago:

    Bypass loppers - OEM 10 mm bolt
    Bypass loppers – OEM 10 mm bolt

    That’s an M10x1.5 bolt, for which I lack a corresponding nut.

    But 3/8-16 is approximately M10x1.5, for small values of thread engagement, and I do have an assortment of inch-sized stainless steel fasteners:

    Bypass loppers - 0.375 inch bolt
    Bypass loppers – 0.375 inch bolt

    The nylon lock nut jams the bolt against the left blade, with the split washer applying pressure to the tapered blade. Slobbering oil in the sliding joints restored it to perfect working order.

    The weird round dingus on the far side of the pivot, up against the handles, is a bumper cushioning the fully closed position. It’s a nice touch and might work better if its rubber pad hadn’t aged out over the decades spent in the garage waiting for this very day.

    It’s my kind of yard work: “What do you need killed next?”

  • Bike Brake Pad Wear

    The rear brake on my bike wasn’t stopping nearly as well as it should, even after cleaning the rim and pads with brake cleaner, so I pulled the shoes and replaced the pads:

    Bike brake pad wear
    Bike brake pad wear

    It’s down a bit beyond the --WEAR--LINE-- indicator, of course.

    New brake shoes on clean rims work exactly like they should!

  • Subaru Forester Relamping

    Prompted by RCP’s battery misadventure, I replaced a handful of the Forester’s incandescent bulbs:

    Subaru Forester 2015 - replaced bulbs
    Subaru Forester 2015 – replaced bulbs

    Despite what look like “squeeze here” markings, you must push the license plate bulb holders toward the center of the car:

    Subaru Forester 2015 - license plate bulb holders
    Subaru Forester 2015 – license plate bulb holders

    They were both stuck firmly to the trim plate, so I braced a screwdriver against the outboard edge of the trim panel, after which it becomes obvious how pressing inward compresses the (plastic) spring clip so you can pull the outward side of the holder away from the hatch.

    Casual searching turned up a bunch of exceedingly helpful advice for anyone DIY-ing through a Forester.

    The bulbs with conical ends, known as “festoon” lamps, (unsurprisingly) come in  several lengths. The Forester bulbs are about 25 mm long, (unsurprisingly) much shorter than the 31 mm LEDs that seem to be the smallest available replacements, but (surprisingly) the socket tabs have barely enough compliance for the extra half dozen millimeters:

    Subaru Forester 2015 - dome with 31 mm festoon LED bulb
    Subaru Forester 2015 – dome with 31 mm festoon LED bulb

    The LEDs are much much much brighter than the incandescents, although I’d prefer warm white to cool white. The cargo compartment lamp in the back is still way too dim; I don’t understand how Subaru decided on a plastic cover tinted dark smoke gray.

    All in all, a worthwhile upgrade!

    I wonder how long they’ll last? I have one spare of each type …

  • Tour Easy Front Derailleur Cable Clamp

    In addition to sawing through the side of the cable ferrule, the front derailleur cable began breaking at the edge of the derailleur arm:

    Tour Easy Front Derailleur Cable - frayed
    Tour Easy Front Derailleur Cable – frayed

    It wouldn’t have survived another ride!

    Dan pointed out CNC machined aluminum cable clamps are a thing, but those are sized for larger frame tubes than the 1.0 inch steel used on our Tour Easy ‘bents and, although I’ve shimmed everything else on the frame, I wanted to tweak the cable angle to match the arm on the derailleur.

    A bit of OpenSCAD wrangling produces a likely candidate:

    Front Derailleur Cable Clamp - Slic3r
    Front Derailleur Cable Clamp – Slic3r

    That’s a bulked-up revision of the prototype:

    Tour Easy Front Derailleur Cable Clamp - installed
    Tour Easy Front Derailleur Cable Clamp – installed

    Done up in orange PETG, it demonstrated the idea worked, but two perimeter threads wrapped around 15% infill isn’t quite up to the task. Note the split along the screw on the far half and various irregularities around the ferrule.

    The cable angle isn’t quite right, either, as the proper compound angle would, alas, aim the cable into the pedal crank. The bulky bushings get in the way of putting the ferrule where it should be with the screws aligned in a tidy manner, so I must get used to the jaunty angle.

    The bulkier version, done with 50% infill and four perimeter threads, has the same tilt angle, but the ferrule sits further from the screws:

    Tour Easy Front Derailleur Cable Clamp V2 - rear quarter view
    Tour Easy Front Derailleur Cable Clamp V2 – rear quarter view

    The view from the left side shows the cable angles slightly to the rear, but the smaller angle should make it happier:

    Tour Easy Front Derailleur Cable Clamp V2 - side view
    Tour Easy Front Derailleur Cable Clamp V2 – side view

    Probably should have used black PETG. Next time, for sure!

    The OpenSCAD source code as a GitHub Gist:

    // Tour Easy Derailleur Cable Clamp
    // Ed Nisley KE4ZNU – June 2017
    /* [Build Options] */
    Layout = "Build"; // [Build, Show]
    /* [Extrusion] */
    ThreadThick = 0.25; // [0.20, 0.25]
    ThreadWidth = 0.40; // [0.40]
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    /* [Hidden] */
    Protrusion = 0.01; // [0.01, 0.1]
    HoleWindage = 0.2;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    /* [Cable Clamp] */
    FrameOD = 25.7; // Tour Easy has hard inch tubing + paint
    Ferrule = [1.5,5.1,12.0]; // cable ferrule
    EntryPoint = [0,13,60]; // cable entry to derailleur, +Y to rear of bike
    CableTilt = -20; // tilt from parallel to frame tube
    CableTheta = 0; // rotation around clamp from +X axis
    /* [Screws and Inserts] */
    ClampScrew = [3.0,5.5,35.0]; // M3 button / socket head cap screw
    ClampWasher = [3.7,7.0,0.7]; // M3 washer
    ClampNut = [3.0,6.0,4.0]; // M3 nylock nut
    /*
    ClampScrew = [4.0,7.0,25.0]; // M4 button head cap screw
    ClampWasher = [4.5,9.0,0.8]; // M4 washer
    ClampNut = [4.0,8.0,5.0]; // M4 nylock nut
    */
    NutShift = -0; // slide bushing toward nut for clearance
    //- Set clamp ring dimensions
    WallThick = 10.0;
    BushingSides = 8;
    Bushing = [ClampScrew[ID],
    // ClampWasher[OD]/cos(180/8) + 4*ThreadWidth,
    Ferrule[LENGTH]/cos(180/BushingSides),
    ClampScrew[LENGTH] – 2*ClampWasher[LENGTH] – ClampNut[LENGTH]];
    Ring = [FrameOD + HoleWindage,FrameOD + 2*WallThick,Ferrule[LENGTH]];
    ClampScrewOC = IntegerMultiple(FrameOD + ClampWasher[OD],1);
    echo(str(" screw OC: ",ClampScrewOC));
    ClampKerf = 0.75; // kerf between separated halves
    NumSides = 8*4;
    //- Adjust hole diameter to make the size come out right
    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);
    }
    // Construct things
    module ClampRing() {
    difference() {
    union() {
    cylinder(d=Ring[OD],h=Ring[LENGTH],$fn=NumSides); // basic ring
    for (j=[-1,1]) // screw bushings
    translate([Bushing[LENGTH]/2 + NutShift,j*ClampScrewOC/2,Ring[LENGTH]/2])
    rotate([0,-90,0]) rotate(180/BushingSides)
    cylinder(d=Bushing[OD],h=Bushing[LENGTH],$fn=BushingSides);
    intersection() {
    rotate([CableTilt,0,CableTheta]) // reinforce cable ferrule
    translate([(Ring[ID] + Ring[OD])/4,0,Ferrule[LENGTH]/2])
    rotate(180/8)
    cylinder(d=3*Ferrule[OD] + 0*ThreadWidth,2*Ferrule[LENGTH],center=true,$fn=8);
    cylinder(d=2*Ring[OD],h=Ring[LENGTH],$fn=NumSides); // basic ring
    }
    }
    translate([0,0,-Protrusion]) // frame tube
    cylinder(d=Ring[ID],h=Ring[LENGTH] + 2*Protrusion,$fn=NumSides);
    rotate([CableTilt,0,CableTheta]) // cable ferrule
    translate([(Ring[ID] + Ring[OD])/4,0,-0.25*Ferrule[LENGTH]]) {
    rotate(180/8)
    PolyCyl(Ferrule[OD],Ferrule[LENGTH],8);
    rotate(-22.5)
    PolyCyl(Ferrule[ID],2*Ferrule[LENGTH],4);
    }
    for (j=[-1,1]) // screw holes
    translate([Ring[OD]/2,j*ClampScrewOC/2,Ring[LENGTH]/2])
    rotate([0,-90,0]) rotate(180/6)
    PolyCyl(Bushing[ID],Ring[OD],6);
    for (i=[-1,1], j=[-1,1]) // screw & nut seats
    translate([i*(Bushing[LENGTH]/2) + NutShift,j*ClampScrewOC/2,Ring[LENGTH]/2])
    rotate([0,i*90,0]) rotate(180/BushingSides)
    cylinder(d=Bushing[OD],h=Bushing[LENGTH],$fn=BushingSides);
    translate([0,0,Ring[LENGTH]/2]) // slice it apart
    cube([ClampKerf,2*Ring[OD],2*Ring[LENGTH]],center=true);
    }
    }
    //- Build things
    if (Layout == "Show") {
    translate(EntryPoint)
    cube(1,center=true);
    ClampRing();
    }
    if (Layout == "Build") {
    ClampRing();
    }