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.

Author: Ed

  • 7 mm Tactile Switch Pinout

    7 mm Tactile Switch Pinout

    As is usually the case, the assortment of tiny switches arrived with no pinout documentation. The 6 mm square SMD switches were easy, but the 7 mm through-hole switches posed a puzzle.

    With the switch standing to make the return spring visible as shown, the pinout looks like this:

    7mm Tactile Switch pinout
    7mm Tactile Switch pinout

    TIL, somewhat to my surprise, both the latching and momentary 7 mm switches have DPDT contacts!

    Now I know how to wire the next thing …

  • Delta Shower Head Holder Extension

    Delta Shower Head Holder Extension

    The original shower head being too far overhead for Mary’s reach, I installed a Delta ProClean Shower Head which would also be too high. It has a hose, which means I can adjust the height:

    Delta shower head holder extension - installed
    Delta shower head holder extension – installed

    The InterWebs offer several 3D-printable versions of such a thing, but Delta offers many different shower heads, some of which are visually (to my eyes, anyway) indistinguishable from the 75740SN you see here. The model I tried did not fit the holder I have, so I conjured one from the vasty digital deep:

    Delta shower head holder extension - solid model
    Delta shower head holder extension – solid model

    It builds standing on that tidy cutoff:

    Delta shower head holder extension - PrusaSlicer warning
    Delta shower head holder extension – PrusaSlicer warning

    Despite PrusaSlicer’s kvetching about the “collapsing overhang” inside the socket, it came out fine.

    The shower head is still slightly too high for her, but now I can print another one with a longer offset and a slightly smaller plug to fit deeper in the OEM socket.

    Worst case, there’s a wall-mounted holder to put the shower head at shoulder height.

    The OpenSCAD source code as a GitHub Gist:

    // Delta shower head holder extension
    // Ed Nisley – KE4ZNU
    // 2025-05-02
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Plug,Socket,Connector]
    MountAngle = 30; // between OEM and new holder
    MountOffset = 20.0;
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 3*3*4;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    Insert = [21.0,24.5,35.0]; // hose connector taper
    PlugSize = Insert + [-0.3,-0.3,0]; // … for better fit in OEM holder
    Slot = [Insert[OD],14.6,3*Insert[LENGTH]]; // slot on OEM holder, arbitrary length
    WallThick = 8.0; // holder wall thickness
    Radius = 3.0; // shapely rounding
    $fn=NumSides;
    //———-
    // Define Shapes
    module Plug() {
    cyl(l=Insert[LENGTH],d1=PlugSize[ID],d2=PlugSize[OD],anchor=BOTTOM);
    }
    module Socket() {
    difference() {
    tube(l=Insert[LENGTH],id1=Insert[ID],id2=Insert[OD],wall=WallThick,anchor=BOTTOM);
    cuboid(Slot + [0,1.0,0],anchor=LEFT+CENTER);
    right(Insert[OD]/2)
    cube([Insert[OD],Insert[OD] + 2*WallThick,3*Insert[LENGTH]],anchor=LEFT+CENTER);
    }
    }
    module Connector() {
    difference() {
    left(MountOffset)
    cuboid([MountOffset + Insert[LENGTH]*sin(MountAngle),Slot.y,Insert[LENGTH]*cos(MountAngle)],
    anchor=LEFT+BOTTOM);
    yrot(MountAngle) right(Insert[ID]/2 + WallThick)
    cyl(l=Insert[LENGTH],d1=Insert[ID] + 2*WallThick,d2=Insert[OD] + 2*WallThick,anchor=BOTTOM);
    }
    }
    module Adapter() {
    union() {
    left(MountOffset)
    Plug();
    yrot(MountAngle) right((Insert[ID] + 2*WallThick)/2)
    Socket();
    Connector();
    }
    }
    //———-
    // Build things
    if (Layout == "Plug")
    Plug();
    if (Layout == "Socket")
    Socket();
    if (Layout == "Connector")
    Connector();
    if (Layout == "Show")
    Adapter();
    if (Layout == "Build")
    up(Insert[ID]/2 + 1*WallThick + Insert[OD]/2)
    yrot(90-MountAngle)
    Adapter();
  • HQ Sixteen: Improved Control Cap Wiring

    HQ Sixteen: Improved Control Cap Wiring

    The new control caps on the HQ Sixteen’s handlebars have three switches apiece:

    HQ Sixteen - grip cap installed - left
    HQ Sixteen – grip cap installed – left

    A six-conductor ribbon cable brings those switch terminal through the handlebars, across the smaller PCBs where the original switches plugged in, and atop the main PCB behind / under the LCD panel where they get wired together:

    HQ Sixteen - Control Button switch cable
    HQ Sixteen – Control Button switch cable

    The gray ribbon cable carries power for the LEDs and returns the original switch signals formerly plugged into one of the four-pin headers on the right PCB. The same PCB is used on the other side and the switches over there plug into the other header.

    The central PCB is also used for the rear handlebars, which do not have the smaller PCBs, and those switch cables plug directly into four-pin headers mounted instead of the headers for the gray ribbon cables:

    HQ Sixteen - Control Button central PCB
    HQ Sixteen – Control Button central PCB

    Some probing and doodling produced a diagram of the switch connections:

    HQ Sixteen - Control Button Wiring
    HQ Sixteen – Control Button Wiring

    Working with the handlebars either inverted or flipped left-for-right on the workbench makes this far more confusing than it really should be.

    In any event, the bottom diagram shows the connections between the two four-pad header positions on the central PCB and the two six-pin headers for the new switches. I used a 2×6 pin header block to plug in the new switches, connected the pins with soldered Wire-Wrap wire, and used three-wire ribbon cable to the PCB pads.

    The general idea was to duplicate the Start-Stop and Needle Up/Down switches on both sides, while maintaining the same relative positions of the Fast / Slow switches. In effect, the two new switches on each side are wired in parallel to the original switch pads on the PCB.

    Surprisingly, I got the three-wire ribbon cables from the four-pad headers right on the second try, which involved flipping it over. The top and bottom pads on those headers are connected together, so the three-wire cable can go on either way to reverse the positions of the other two wires.

    And then the new switches Just Worked™ … whew!

  • HQ Sixteen: Improved Control Cap Final Assembly

    HQ Sixteen: Improved Control Cap Final Assembly

    My version of the Handi-Quilter HQ Sixteen grip control caps requires some assembly:

    Control Button Caps - solid model - build view
    Control Button Caps – solid model – build view

    Getting the OEM caps off the handlebars required carefully applying torque through a strap wrench, but they eventually came free:

    HQ Sixteen - OEM grip cap - screw holes
    HQ Sixteen – OEM grip cap – screw holes

    I don’t know what the unused screw hole between the two gnarly holes was for; perhaps they discovered one hole was inadequate.

    The alert reader will note the two screw holes are not the same distance from the end of the tube, which required rebuilding the plug model to match:

    Control Button Caps - solid model - plug holes
    Control Button Caps – solid model – plug holes

    Which is why I didn’t glue the plug into the cap before I got the OEM caps off.

    Redrill the tube holes to 3 mm, file the burrs from both the OEM and my drilling, smooth the edges, and the plug fit perfectly. Then I seated the M3 square nuts behind those hole and, after installing the new plugs in the handlebars, glued the caps in place with a simple fixture to ensure the front faced forward:

    - HQ Sixteen - grip cap faceplate gluingHQ Sixteen - grip cap gluing
    – HQ Sixteen – grip cap faceplate gluingHQ Sixteen – grip cap gluing

    The clamp gently compresses the foam enough to hold the flats against the bench block while the JB Plastic Bonder cures.

    After verifying all the buttons worked, I glued the faceplates to the cap bodies:

    HQ Sixteen - grip cap faceplate gluing
    HQ Sixteen – grip cap faceplate gluing

    The tape held the faceplate in place while I snugged the clamps.

    Modulo my weak graphic design skills, the caps look pretty good:

    HQ Sixteen - grip cap installed - right
    HQ Sixteen – grip cap installed – right

    And, after a bit of wiring yet to be described, the buttons do exactly what their legends suggest:

    HQ Sixteen - grip cap installed - left
    HQ Sixteen – grip cap installed – left

    The white sheet with feeble graphics can be peeled off, so I have another chance to tart it up.

    The overall idea was to replace the failing Start/Stop switch while duplicating that switch on both caps. While I was at it, I also duplicated the Needle Up/Down button, because who wants asymmetric caps?

    Mary is assembling another quilt and the new switches will get plenty of action …

  • Metal Spring Clamp: TPU Jaw Pads

    Metal Spring Clamp: TPU Jaw Pads

    Setting up the Makergear M2 to print TPU (eSun 95A) involved a cold pull to get the remaining PETG out of the nozzle, some manual flushing, then printing test cubes to figure out a reasonable speed / temperature combination:

    Makergear M2 - first TPU test cube
    Makergear M2 – first TPU test cube

    A 10 mm solid cube came out overstuffed and the first 20 mm cube lacked enough infill to hold its top up, but the third cube looked surprisingly good at 230 °C and 30 mm/s with 15% 3D Honeycomb infill:

    Makergear M2 - TPU test cubes
    Makergear M2 – TPU test cubes

    With that settled, I conjured pairs of soft (-ish) jaw pads for the far-too-many metal spring clamps having worn out their vinyl pads:

    Spring clamp jaws - installed
    Spring clamp jaws – installed

    Those were the first attempt and worked well enough to suggest nicely rounded endcaps instead of flat cylinders:

    Spring Clamp Jaws - show view
    Spring Clamp Jaws – show view

    Unlike the first version, they now build standing on their rectangular clamp jaw opening:

    Spring Clamp Jaws - slicer preview
    Spring Clamp Jaws – show view

    Those two groups have different lengths (1 inch and 1-⅛ inch) with PrusaSlicer combining the OpenSCAD program’s output.

    The as-built pads are essentially un-photographable:

    Spring clamp jaws - group build
    Spring clamp jaws – group build

    TPU is tough enough to make the single-layer brim un-tearable, but they’re easy enough to separate & trim with scissors. Even the 5 mm brim has a tenuous grip on glass + Suave hair “spray” applied from a dropper bottle, so I should try a BuildTak sheet that’s been on the to-do pile for far too many years.

    Similarly, TPU is flexy enough to make a precise fit unnecessary: push firmly to force the pads onto the jaws and you’re done.

    The OpenSCAD source code as a GitHub Gist:

    // Spring clamp replacement jaw pad
    // Ed Nisley – KE4ZNU
    // 2025-04-26
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Clamp]
    Ends = "Round"; // [Flat,Round]
    Sets = 1;
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 2*3*4;
    WallThick = 2.0;
    CushionOD = 10.0;
    CushionStem = 10.0;
    JawAngle = 60/2; // just for Show
    JawWidth = 1.000*INCH; // clamps are hard-inch sizes: 1.0 and 1.125
    Jaw = [1.5,50,JawWidth]; // roughly one jaw
    Gap = 2.0;
    $fn = 2*3*4;
    //———-
    // Define objects
    //—–
    // Clamp jaw
    module Clamp() {
    up(WallThick)
    cuboid(Jaw,anchor=BOTTOM+BACK);
    }
    module Pad() {
    difference() {
    union() {
    cyl(d=CushionOD,h=Jaw.z + 2*WallThick,anchor=BOTTOM,
    rounding = (Ends == "Flat") ? 0 : CushionOD/2);
    cuboid([Jaw.x + 2*WallThick,CushionStem,Jaw.z + 2*WallThick],
    rounding=WallThick/2,anchor=BOTTOM+BACK);
    }
    Clamp();
    }
    }
    //———-
    // Build things
    if (Layout == "Clamp") {
    Clamp();
    }
    if (Layout == "Show") {
    for (i = [-1,1])
    right(i*(CushionOD + Gap)/2)
    zrot(i*JawAngle) {
    Pad();
    color("Silver",0.5)
    Clamp();
    }
    }
    if (Layout == "Build") {
    for (n = [0:(Sets – 1)])
    for (i = [-1,1])
    right(i*((CushionOD + Gap)/2 + n*(CushionOD + Gap)))
    up(CushionStem) back(Jaw.z/2) xrot(90)
    Pad();
    }
  • Champion Hose Nozzle: TPU Washer

    Champion Hose Nozzle: TPU Washer

    There being nothing like a good new problem to take one’s mInd off one’s old problems, I set the Makergear M2 to printing TPU and made a washer for the Champion Hose Nozzle:

    Champion hose nozzle - TPU vs rubber washers
    Champion hose nozzle – TPU vs rubber washers

    It turns out PrusaSlicer can produce models for simple shapes using the Shape Gallery. Subtracting a 7.5 mm cylinder (as a “negative shape”) from a 12.7 mm = ½ inch cylinder does the trick, with the washer all of 2.5 mm thick.

    The ID of the thread inside the nozzle is slightly smaller than 12.7 mm, but TPU is bendy enough to let me push it through sideways and reorient it against the front of the nozzle.

    The conical part of the nozzle seals against the washer, leaving only a very slight ooze of water, and opens far enough to produce a jet. The TPU is solid enough to not vibrate in the flow and the nozzle no longer howls at low flow rates.

    None of the other nozzles in the box have a washer up in there, so they all depend on a much better machined fit than I achieved.

    At least the Champion nozzle is once again usable, should it ever emerge from the bottom of the box.

  • Power Outage

    Power Outage

    This housing development was the second in Poughkeepsie to have underground utilities and, to put it mildly, a lot has rotted out over the last 70 years.

    Over the weekend, one phase of the AC power flickered and eventually failed completely, with the other phase supplying a steady 120 VAC. Central Hudson (Gas & Electric) crews located long-lost buried boxes in places not matching their maps:

    Power Outage - flooded box
    Power Outage – flooded box

    Then they pumped / bailed enough water to repair / lengthen the wires:

    Power Outage - corroded wiring
    Power Outage – corroded wiring

    I’ve never before seen anybody work on live wires underwater.

    They installed above-ground boxes to simplify The Next Time.

    Some improvisation was required:

    Power Outage - improvised cocoa stirring
    Power Outage – improvised cocoa stirring

    Gotta say, cold Fireball Cocoa tastes different than hot Fireball Cocoa.