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

  • Outdoor Lamp Glass Retainers

    Outdoor Lamp Glass Retainers

    Tucking seasonal decorations into the lamps bracketing the garage door would be much easier if the rubber buttons retaining the glass panes were squishy cylinders, rather than fossilized pebbles:

    Outdoor Lamp Glass Retainers - old vs new
    Outdoor Lamp Glass Retainers – old vs new

    The five tidy buttons on the right are black TPU, hot off the MK4’s printbed:

    Outdoor Lamp Glass Retainers - PrusaSlicer preview
    Outdoor Lamp Glass Retainers – PrusaSlicer preview

    The flange allows for some, shall we say, dimensional variation in the installation:

    Outdoor Lamp Glass Retainers - old vs new - installed
    Outdoor Lamp Glass Retainers – old vs new – installed

    They’re just a tube atop a cylinder:

    nx = ceil(sqrt(NumButtons));
    ny = nx;
    
    union()
    for (nx = [0:nx-1], ny = [0:ny-1])
      right(nx*(FlangeOD + Gap))
        back(ny*(FlangeOD + Gap))
          render()
          union() {
            cyl(FlangeHeight,d=FlangeOD,circum=true,anchor=BOTTOM);
            tube(ButtonOA.z,od=ButtonOA[OD],id=ScrewOD,circum=true,anchor=BOTTOM);
          }
    
    

    Feel free to set up your own dimensions, in the unlikely event you have lamps in need of similar buttons.

    Each of the three lamps has sixteen buttons and, although PrusaSlicer allows you to set the number of instances, its Arrange tool doesn’t make a tidy / compact layout. Doing the layout in OpenSCAD saves a bunch of hassle, with the overall union() turning the array into a single object.

    It might not be the best decoration, but it should suffice:

    Outdoor Lamp Glass Retainers - with decoration
    Outdoor Lamp Glass Retainers – with decoration

    Now, to make critters for the driveway …

  • One-Watt LED Autopsy: No Trouble Found

    One-Watt LED Autopsy: No Trouble Found

    Over the last several weeks the taillight on Mary’s Tour Easy became dim. I verified the LED had failed by soldering the taillight driver to a different 1 W LED stuck on a separate heatsink, whereupon the LED lit up as it should.

    Testing the failed LED with a bench power supply clipped to its wires showed it passed only 15 mA, even with 6 V applied directly to the wires. Those 1 W LEDs normally drop 2 V at 400 mA, so something was definitely wrong in there.

    Which meant I had to build another taillight, as described yesterday, and reuse the original electronics and PVC tube. After mounting the new taillight on Mary’s bike, I could autopsy the failed LED.

    Because everything is glued into the heatsink, the first step is cutting it apart to free the LED:

    1W red LED Autopsy - heatsink parting
    1W red LED Autopsy – heatsink parting

    I stopped the first cut when it just kissed the two wire holes, moved over a little more than the width of the cutoff tool, and tried again. Second time was the charm and I now have a clean aluminum tube that ought to come in handy for something, sometime.

    Concerted prying under the edge of the LED PCB popped it off the heatsink:

    1W red LED Autopsy - heatsink epoxy bond
    1W red LED Autopsy – heatsink epoxy bond

    The red wire sticking out on the right shows a little damage from the cutoff tool, which also chipped the epoxy while bending the aluminum LED base. The bare spot in the middle matches the screw hole in the heatsink, with the rest remaining firmly bonded, so the epoxy was doing its job.

    Prying the LED off the lens holder:

    1W red LED Autopsy - lens holder detached
    1W red LED Autopsy – lens holder detached

    If I didn’t know better, I’d say the red silicone insulation was sun-faded, but for sure no sun gets inside the lens holder.

    An ohmmeter showed both wires had good continuity to their LED pads, which were firmly soldered to the PCB pads; the pads don’t carry any current in this setup. I then hitched up the bench supply to the wires again:

    1W red LED Autopsy - no trouble found
    1W red LED Autopsy – no trouble found

    Whereupon the LED glowed brightly and some quick testing (because it’s not on a heatsink) with the bench supply in constant-current mode showed it once again drew about 400 mA with 2 V applied and glowed brilliantly as it should.

    I had previously removed the reflowed solder from the PCB thermal pad and added thermal paste before resoldering the LED:

    1W LED - thermal grease
    1W LED – thermal grease

    So I have no idea what caused the original failure, how the LED could survive with 6 V applied to its terminals, or what would have caused it to recover. It now has a “?” scrawled on the PCB for future reference.

    The world is full of mysteries …

  • Tour Easy Running Light: Machining & Assembly

    Tour Easy Running Light: Machining & Assembly

    The 1 W red LED in the taillight on Mary’s Tour Easy failed and, because the LED is epoxied into the heatsink forming the business end of the light, I had to machine a replacement. This proceeds much as before, with some improvements & simplifications.

    A revised sketch of the key dimensions shows a clearance hole for the 3 mm screw (to eliminate tapping the heatsink) and a reminder about how to locate the wire holes:

    Tour Easy running light - housing dimensions - M3 clear - detail
    Tour Easy running light – housing dimensions – M3 clear – detail

    Bore a 19 mm ID recess 10 mm deep in the (1 inch OD × ¾ inch ID) aluminum tube and score the ID for improved epoxy griptivity:

    Tour Easy Running Light - heatsink scoring
    Tour Easy Running Light – heatsink scoring

    Knurl the ¾ inch rod to bring the OD to a slip fit in the shell:

    Tour Easy Running Light - heatsink plug knurling
    Tour Easy Running Light – heatsink plug knurling

    Take them ouside, hose down with brake cleaner to get rid of the cutting fluid, butter ’em up with epoxy, align in the lathe, and let ’em cure overnight:

    Tour Easy Running Light - heatsink epoxy fixture
    Tour Easy Running Light – heatsink epoxy fixture

    This time I managed to not cut off the rod, which dramatically simplifies boring the shell and facing the front end of the rod flush with the inside of the shell so the LED PCB sits flat in there:

    Tour Easy Running Light - heatsink front ID
    Tour Easy Running Light – heatsink front ID

    Clean up the shell OD and turn the back to 23 mm OD to fit the PVC tube from the failed taillight:

    Tour Easy Running Light - heatsink shell OD
    Tour Easy Running Light – heatsink shell OD

    Crisp up the edge for a tidy fit:

    Tour Easy Running Light - heatsink shell corner
    Tour Easy Running Light – heatsink shell corner

    Break / file all the corners, then bandsaw the rod and face the back end:

    Tour Easy Running Light - heatsink rear facing
    Tour Easy Running Light – heatsink rear facing

    Set it up on the Sherline mill, find the center, and use manual jogging to poke the holes at the proper coordinates:

    Tour Easy Running Light - heatsink Sherline setup
    Tour Easy Running Light – heatsink Sherline setup

    Take the finished heatsink outside again for more brake cleaner action.

    The 3D printed circuit plate now sports two inserts:

    Running Light Circuit Plate - two inserts - solid model
    Running Light Circuit Plate – two inserts – solid model

    Epoxy the inserts in place, prepare two 1.6 mm = 1/16 inch steel wires, and chop the head off an M3 screw:

    Tour Easy Running Light - heatsink with circuit plate
    Tour Easy Running Light – heatsink with circuit plate

    Stipulated: my center-finding hand is weak.

    Aligning the LED heatsink with those wire holes is a pain:

    • Clean up the 1 W LED PCB
    • Solder the LED in place atop some heatsink compound
    • Push the lens holder (without the lens!) over the LED
    • Insert holder + LED into the heatsink
    • Rotate to put one LED terminal between the wire holes in the heatsink
    • Rotate to align the recesses in the PCB with the wire holes in the heatsink
    • Match-mark the holes on the lens holder with a transfer punch
    • Grab the holder in the Sherline vise
    • Align & drill wire holes in the holder
    • Solder wires to the LED PCB, aimed inward atop the LED leads

    With the LED & lens holder prepared & set aside, butter the circuit plate parts with JB PlasticBonder, align the plate perpendicular to the heatsink using V-blocks / 123 blocks / whatever, and let it cure overnight.

    The lens allows plenty of room to run the wires from the PCB around the LED inside the holder to the holes:

    Tour Easy Running Light - 1W LED lens fit
    Tour Easy Running Light – 1W LED lens fit

    So do that:

    • Dab PlasticBonder on the bottom of the lens holder
    • Stick the LED to the holder (still with no lens!)
    • Thread the LED wires through the holes in the holder, the LED PCB, and into the heatsink
    • Dab PlasticBonder on the bottom of the PCB
    • Ease the holder + LED into the heatsink while pulling the wires through the holes
    • Finally install the lens in the holder
    • Clamp the whole mess lenthwise with padding atop the lens to prevent scratches

    I transferred the circuitry from the failed taillight to the new one, atop refreshed double-sided foam tape:

    Tour Easy Running Light - Arduino side
    Tour Easy Running Light – Arduino side

    With hot-melt glue securing the 2 Ω current-sense resistor to the circuit plate:

    Tour Easy Running Light - regulator side
    Tour Easy Running Light – regulator side

    Slide the PVC case over the circuit plate, secure the end cap with a 25 mm screw, and reinstall on the bike:

    Tour Easy Running Light - taillight installed
    Tour Easy Running Light – taillight installed

    It’s angled 1° up from horizontal:

    Tour Easy Running Light - taillight in use
    Tour Easy Running Light – taillight in use

    Wow, is that thing bright!

  • Worm Bin Vent Covers

    Worm Bin Vent Covers

    The current iteration of our Tumbleweed Can-O-Worms suffers from leakage down the legs:

    Worm Bin - leg leakage
    Worm Bin – leg leakage

    Perhaps surprisingly, the whole process is odorless. This is in the basement where ugly doesn’t count for much.

    The leakage comes through the air vent holes at the top of each leg socket:

    Worm Bin Vent Cover - vent
    Worm Bin Vent Cover – vent

    Unsurprisingly, the “worm tea” (it ain’t water!) dripping from the bottom of the compost tray goes directly through the vent holes and down the leg. It’s not clear to me what they expected.

    A simple 3D printed black TPU cap atop the leg socket should prevent most of the leakage:

    Worm Bin Vent Cover - installed
    Worm Bin Vent Cover – installed

    The odd pattern comes from Concentric infill around the notch, even though Concentric infill seems better suited to round things and fat extrusion threads with a 0.8 mm nozzle than straight lines. The weird stuff on the vertical side is a reflection of the basement and phone flash from the smooth TPU layer edges.

    The tray with the worms and compost sits atop the strut between the socket and the body, with the cap allowing room for the screen keeping the worms out of the sump.

    Ribs on the underside of the cap hold it above the leg socket to let the air through:

    Worm Bin Vent Covers - solid model
    Worm Bin Vent Covers – solid model

    Although five caps fit the MK4’s platform, I printed one or two at a time while tweaking improving the design:

    Worm Bin Vent Covers - PrusaSlicer preview
    Worm Bin Vent Covers – PrusaSlicer preview

    This design is for the original Can-O-Worms shown in the second picture and may not quite fit the new version. We’ll know more when we empty the bottom tray.

    The OpenSCAD source code as a GitHub Gist:

    // Worm Bin Leg Vent Cover
    // Ed Nisley – KE4ZNU
    // 2026-10-16
    include <BOSL2/std.scad>
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    HoleWindage = 0.2;
    Protrusion = 0.01;
    NumSides = 8*2*3;
    $fn=NumSides;
    LayerHeight = 0.4; // print with 0.8 mm nozzle
    LayerWidth = 0.9;
    WallThick = 1.5*LayerWidth;
    VentOD = 62.0; // at bottom of cover
    VentTopClear = 9.0; // to next layer bottom
    VentSideClear = 11.0; // to bin side
    VentStrutWidth = 3.0;
    CoverHeight = 15.0;
    CoverOD = VentOD + 2*VentSideClear – 2*WallThick;
    NumRibs = 6;
    RibHeight = VentTopClear – WallThick – 2.0;
    RibThick = 2*WallThick;
    //—–
    // Build things
    difference() {
    union() {
    cyl(WallThick,d=CoverOD,circum=true,anchor=BOTTOM) position(TOP) {
    tube(CoverHeight – WallThick,od=CoverOD,wall=WallThick,circum=true,
    anchor=BOTTOM,spin=180/NumSides);
    for (i=[0:NumRibs–1])
    rotate(i*(360/NumRibs) + 180/NumRibs)
    right(CoverOD/3 – RibThick/2)
    cube([CoverOD/3,RibThick,RibHeight],anchor=BOTTOM);
    }
    up(WallThick)
    right(CoverOD/2 – WallThick)
    cube([VentSideClear,VentStrutWidth + 2*WallThick,RibHeight],anchor=BOTTOM+RIGHT);
    right(CoverOD/2 – WallThick + Protrusion)
    cube([VentSideClear – WallThick,VentStrutWidth + 2*WallThick,CoverHeight],anchor=BOTTOM+RIGHT);
    }
    down(Protrusion)
    right(CoverOD/2 – VentSideClear)
    cube([CoverOD,VentStrutWidth,2*CoverHeight],anchor=BOTTOM+LEFT);
    }

  • PolyDryer Humidity: October

    After a month with 50 g of alumina in each box:

    2026-10-13
    Filament%RHWeight – gWt gain – gGain %
    PETG-CF Black2153.13.16.2%
    PETG White2352.62.65.2%
    PETG Black2353.23.26.4%
    TPU Black2452.82.85.6%
    PETG Orange2752.92.95.8%
    PETG-CF Gray3053.33.36.6%
    TPU Clear3152.92.95.8%
    PETG Clear3353.33.36.6%
    PETG-CF Blue3053.73.77.4%
    PETG Blue2553.03.06.0%

    A day later, most of the boxes were in the 10%RH to 15%RH range, with the filament spools slowly releasing their stored moisture. The PETG Orange meter jumps between 10% and 27%, with the latter more believeable.

    Changing the desiccant every month, without thinking too hard, may be the simplest path to dry filament storage.

  • Window Film Mullion Filler

    Window Film Mullion Filler

    The living room windows suffer from all the thermal problems you might expect in a late-1960s house, despite the slightly more recent storm panes, so I’ve been adding insulating film during the cold season. This works surprisingly well, although the tape holding the film tends to lose its grip in the angle between the (real, not pretend!) mullions and the window sill.

    This year I added triangular fillers to ease the corner:

    LR Window Film - mullion filler
    LR Window Film – mullion filler

    They’re Desk Signs from boxes.py, with the bottoms angled by 2.5° to compensate for the slightly misaligned sill and a small cutout clearing the paint accumulation in the corner:

    LR Window mullion filler - LightBurn layout
    LR Window mullion filler – LightBurn layout

    A strip of tape down each side of the mullion and across the filler anchors the film, producing a slightly baggy fit. Next year I’ll use only one strip down the middle.

  • Shopvac Model 500A Motor Wire Repair

    Shopvac Model 500A Motor Wire Repair

    The Shopvac Model 500A (1.25 HP!) inhaling dust from Tiny Bandsaw didn’t start up when I flipped the switch. It had been making horrible noises, but Shopvacs typically sound like they’re on the ragged edge of death, I wear 30 dB earmuffs when it’s running, and that wasn’t the problem anyway.

    It turned out the hot (black) wire lead to the motor burned up:

    Shopvac motor - charred wire
    Shopvac motor – charred wire

    The neutral (white) wire over on the left side looked just fine:

    Shopvac motor - good wire connector
    Shopvac motor – good wire connector

    But the hot wire connector was toasted:

    Shopvac motor - charred connector
    Shopvac motor – charred connector

    As the connector failed its resistance went up and so did the wire temperature, as shown by the plastic case:

    Shopvac motor - melted cover
    Shopvac motor – melted cover

    With barely an inch between the motor armature and the failed connector, this became a zero-Mulligan repair:

    Shopvac motor - remaining armature wire
    Shopvac motor – remaining armature wire

    I clipped the failed connector off the wire, very carefully sanded off the burned insulation, then gingerly crimped the business end of a ferrule around the wire + a doubled length of 22 AWG hookup wire:

    Shopvac motor - lengthened wire
    Shopvac motor – lengthened wire

    Doubling the wire brought it up to 19 AWG, a bit larger than the 20 AWG armature wire, and maybe improved its durability. The ferrule surely isn’t rated for this sort of abuse, so I eased some solder into its end in the belief that any amount of solder is a better conductor than a similar amount of air.

    Crimp the other end of the hookup wire into the business end of a solderless ring terminal along with the hot wire, anchor the ferrule to (and insulate it from) the armature with a wrap of silicone tape, do the same around the ring terminal, then squirt hot melt glue into the ruined connector housing to keep the wire from flopping around:

    Shopvac motor - repaired wire
    Shopvac motor – repaired wire

    If it gets hot enough to melt the hot melt glue, there are other problems about to happen.

    Reassemble in reverse order and the Shopvac once again makes its on-the-eve-of-destruction whine while inhaling chips.

    A slip of tape marked “$5” fell off during this process, reminding me it was a garage sale find from quite a few years ago: saving it from an early grave may be an overall Good Deed.