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

  • Laser Beam Alignment Check

    Laser Beam Alignment Check

    Each target has two scorches made at the left and right ends of the gantry X axis, positioned along the Y axis as noted:

    Beam Alignment - overall 2025-07-31
    Beam Alignment – overall 2025-07-31

    The target has maybe a millimeter of positioning error in the mirror entry aperture, so the beam remains pretty much where it should be.

    The beam is hotter toward the rear, as expected, and the front target needed two or three pulses to get a good scorch in the right front corner.

  • Hose Fitting Grip Redux

    Hose Fitting Grip Redux

    Replacing the sun-rotted hose for Mary’s garden called for a new grip, because of course all hose fittings are different:

    Garden Hose Fitting Grip - installed
    Garden Hose Fitting Grip – installed

    The ridges on the fitting looked close enough to half-cylinders and the fitting wasn’t tapered enough to worry about:

    Hose Fitting Grip - simple - solid model
    Hose Fitting Grip – simple – solid model

    The OD came from the original grip, because it neatly fits Mary’s hand, and the nubbles are round-end cylinders.

    Got it done the day after the old hose split, glued it on the hose with E6000+, installed it the next morning, whereupon the weather delivered three inches of rain. It’ll get screwed onto the faucet in a few days …

    The OpenSCAD source code as a GitHub Gist:

    // Hose fitting grip – simple plastic extrusion
    // Ed Nisley – KE4ZNU
    // 2025-07-30
    include <BOSL2/std.scad>
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 3*2*4;
    $fn=NumSides;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    NumRibs = 8;
    RibOD = 3.0;
    GripOA = [32.5,66.0,16.0];
    KnobBallOD = 6.0;
    union() {
    difference() {
    tube(GripOA[LENGTH],id=GripOA[ID],od=GripOA[OD],orounding=2.0,anchor=BOTTOM);
    for (a = [0:NumRibs-1])
    rotate(a*360/NumRibs)
    right(GripOA[ID]/2) down(Protrusion)
    cyl(GripOA[LENGTH] + 2*Protrusion,d=RibOD,anchor=BOTTOM);
    }
    for (a = [0:NumSides-1])
    rotate(a*360/NumSides)
    right(GripOA[OD]/2)
    up(GripOA[LENGTH]/2)
    cyl(GripOA[LENGTH]/2,d=KnobBallOD,rounding=KnobBallOD/2);
    }
  • PolyDryer Humidity: 30 Days Later

    PolyDryer Humidity: 30 Days Later

    A month after the last desiccant change, the silica gel looks like this:

    Polydryer - 30 day beads
    Polydryer – 30 day beads

    The top cup contains fresh-from-stock dry (regenerated) silica gel beads and the others, left-to-right and top-to-bottom, come from PolyDryer boxes:

    Material%RHWeight – gIncrease – gWater gain – %
    PETG White1426.81.87.2
    PETG Black2026.81.87.2
    PETG Orange1326.81.87.2
    PETG Blue1526.91.97.6
    PETG-CF Blue1927.42.49.6
    PETG-CF Black2827.32.39.2
    PETG-CF Gray2727.12.18.4
    TPU Clear1326.81.87.2
    Sum of weights215.98.0
    Measured weight216.38.1

    I expected some correlation between the indicated humidity and the weight of adsorbed water vapor, but that’s not the case.

    The bottom row suggests there’s also little-to-no correlation between bead color and humidity, at least at this low end of the scale.

    The indicator cards tucked into the boxes roughly correlate with the meter reading, but they’re much easier to interpret in person.

    The old chart of adsorption vs. relative humidity suggests the results are plausible, with the 27-ish %RH being higher than you’d expect from 9-ish % adsorption:

    Desiccant adsorption vs humidity
    Desiccant adsorption vs humidity

    So they’re all set up with 25 g of fresh silica gel, although the boxes no long have the same humidity meters they started with. This likely makes little difference, as I have no way to calibrate them.

  • Polymaker PolyDryer Desiccant: Trust, But Verify

    Polymaker PolyDryer Desiccant: Trust, But Verify

    The startup ritual for a PolyDryer box’s humidity meter includes:

    • Opening a small sealed bag containing …
    • The DO NOT EAT desiccant, to be cut open and …
    • Poured into the meter box

    Which looks like this:

    Polydryer - 14 pctRH - meter - white PETG
    Polydryer – 14 pctRH – meter – white PETG

    However, the desiccant packets for the most recent pair of boxes (intended to simplify changing the desiccant in the collection feeding the MMU3 atop the Prusa MK4 3D printer) produced this:

    Polydryer - as-received desiccant
    Polydryer – as-received desiccant

    The silica gel in the left cup looks OK-ish, maybe a little dark, but the fresh-from-the-bag beads in the right cup are crying out for regeneration after having adsorbed about all the water vapor they can.

    If you were using that silica gel in its original DO NOT EAT bag, where you can’t see what it’s telling you, you might wonder why it wasn’t doing such a great job of drying the box + filament. The same could happen with a bag of non-indicating gel, along the lines of what I was using a decade ago.

    So I dumped both in the Needs Rgeneration bottle and filled both meters with 25 g of fresh silica gel.

  • Bicycle Mobile Rebuild

    Bicycle Mobile Rebuild

    A long-lost repair finally made it to the top of the list:

    Bicycle Mobile - bottom view
    Bicycle Mobile – bottom view

    The original string had long since rotted out, but everything else was in a plastic bag just waiting for this occasion.

    The colorful cylinders are stacks of laser-cut 6 mm disks with a 2 mm hole, held to the wire & string with a tiny dot of high-viscosity cyanoacrylate glue at each end:

    Bicycle Mobile - detail
    Bicycle Mobile – detail

    The disks came from acrylic leftovers:

    Bicycle Mobile - laser-cut acrylic
    Bicycle Mobile – laser-cut acrylic

    The motion you can’t see makes the shiny bikes much more visible out there:

    Bicycle Mobile - side view
    Bicycle Mobile – side view

    The string came from dismantled badge reels providing spiral springs for the auto-retracting spools in the PolyDryer boxes.

    The weight ball had a 2 mm hole filled by a wood plug which I cleaned out piecemeal with a 1.5 mm drill bit in a pin vise; a short length of wood skewer holds the new string in place.

    Because the upper arms support more weight, their disk stacks need fewer disks for the same leverage. The original mobile had (at most) four 6 mm chromed plastic balls at each level, so I started with eight 3 mm disks, adjusted the stack length as needed, glued them in place, then removed the surplus disks by crushing them with a Vise-Grip.

    I should rip off the design (“© otagiri 1979”) to build another with recumbent bikes.

  • Sewing Notions Drawer Pull Rethreading

    Sewing Notions Drawer Pull Rethreading

    A small sewing notions cabinet, once my mother’s, now holds some of Mary’s supplies and, a few days ago, had one of its drawer pulls fall off. While preemptively tightening all the screws, I found one no longer held onto its pull:

    Notions drawer pull - parts
    Notions drawer pull – parts

    They don’t make drawer pulls like that any more!

    As I see things, it can be forgiven for losing its grip after nearly a century.

    Thread the screw in as far as it will go and lay the pull flat on the bench vise anvil:

    Notions drawer pull - hammering setup
    Notions drawer pull – hammering setup

    A few gentle whacks with a pin punch on top and bottom, plus a tap on each side, compressed the pull’s remaining threads around & into the screw:

    Notions drawer pull - reshaped
    Notions drawer pull – reshaped

    Put it back in its drawer, snug the screw, and it’s all good.

    That should suffice for at least the remainder of its first century …

  • Layered Paper: LightBurn Random Block Layout

    Layered Paper: LightBurn Random Block Layout

    The Inkscape file contains the overall 16×16 layout of random squares, with the color of each square indicating which of 16 (Inkscape) layers it belongs to:

    Random Blocks - 16x16 159mm - Inkscape layout
    Random Blocks – 16×16 159mm – Inkscape layout

    The next step involves creating a corresponding set of LightBurn layouts to burn those holes out of colored paper sheets to produce layered paper art:

    Random Blocks - framed
    Random Blocks – framed

    I know it’s art, because that’s what I was thinking when I made it.

    Setting up the LightBurn layouts requires enough manual effort to make the whole thing impractical except as a testcase to see how it all worked out. An overview of the LightBurn workspace:

    Random Blocks - 16x16 - LightBurn layout overview
    Random Blocks – 16×16 – LightBurn layout overview

    The little bitty grid in the upper left quadrant represents the 700×500 platform of my laser and each of the blue squares is 159 mm on a side. I tend to not delete the intermediate steps, because they serve as some sort of documentation the next time I wonder how I did that thing.

    So, we begin.

    Import the Inkscape SVG file:

    Random Blocks - 16x16 - LightBurn SVG import
    Random Blocks – 16×16 – LightBurn SVG import

    The blue outer square and the blue text identifying it are on LightBurn’s T2 tool layer, with the black squares on the C00 layer. All of that happens automagically, because I used colors from the LightBurn palette in Inkscape.

    The lonely square in the upper right is the template from which the other 256 squares were cloned, but it has no further purpose in life.

    The 16×16 grid consists of sixteen overlaid groups, which need sorting out for ease of access, so drag each one off into a more useful arrangement:

    Random Blocks - 16x16 - LightBurn sheet separation
    Random Blocks – 16×16 – LightBurn sheet separation

    Note that each of the 256 possible positions has a square in only one of those groups.

    Each of the 16 groups corresponds to a sheet of paper, with the squares indicating holes exposing the sheet below it. The color of each square, as seen from the top of the stack, comes from the first sheet in the stack without a hole. Perforce, every sheet above the one without a hole must have a hole, which means you must merge all those sheets.

    Line up (duplicates of) those 16 groups in the vertical line forming the left column in this arrangement:

    Random Blocks - 16x16 - LightBurn array duplication
    Random Blocks – 16×16 – LightBurn array duplication

    The top group is the layer I named H000 in Inkscape, with the others in order down to H337 on the bottom. You can see why labeling them is pretty much required.

    I should have equalized the vertical spaces between the groups in the left column, but it doesn’t really matter.

    The rest of the triangle comes from duplicating each group using LightBurn’s Grid Array tool with a convenient space between each copy. Make 15 copies of the top group for a total of 16 H000 and no copies of the bottom H337.

    Now the magic happens:

    • Select and duplicate the entire triangle
    • Drag the duplicate off to the side
    • Hit the LightBurn Align Horizontal Centers tool to stack each column into one tidy layout
    • Hit Delete Duplicates to get rid of all the overlaid outer squares
    • If you’re fussy, Duplicate the line of blocks and move it up
    • Group each block individually to keep all the little squares together with the outline

    Thusly:

    Random Blocks - 16x16 - LightBurn combined layers
    Random Blocks – 16×16 – LightBurn combined layers

    Combine each of those blocks with the sheet cutting template, tweak the binary sheet identification holes, and group the result:

    Random Blocks - 16x16 - LightBurn cutting layouts
    Random Blocks – 16×16 – LightBurn cutting layouts

    The leftmost block has All The Holes, the next one is missing a few, and so on across the line:

    Random Blocks - 16x16 - LightBurn cutting layouts - detail
    Random Blocks – 16×16 – LightBurn cutting layouts – detail

    So the leftmost block corresponds to the black mask atop all the layers. Because it doesn’t have alignment holes in the corners or a binary sheet number, you get to align it by eyeball after gluing up the rest of the stack.

    The rightmost block has no cutout squares at all and goes on the bottom of the stack. It also lacks a sheet number, but it’s easy to identify.

    Set the LightBurn speed / power values for the layers to cut your stock of colored art paper.

    Position the Letter Page Holder template to put the center of the sheet cutout at the center of the platform:

    Random Blocks - 16x16 - LightBurn fixture template
    Random Blocks – 16×16 – LightBurn fixture template

    Drop the fixture on the platform, use magnets to hold it down, then do a Print and Cut alignment on the corner targets so the template matches the fixture.

    Then:

    • Click to select one of the blocks
    • Hit Ctrl-D to duplicate it
    • Hit P to slam it to the middle of the template
    • Hit Alt-S to Fire The Laser
    • Hit Del to delete the block
    • Iterate until done

    I used a stack of paper in rainbow order roughly corresponding to the Inkscape layer colors, but you could stack them backwards or even use random colors and nobody would ever know:

    Random Blocks - framed detail
    Random Blocks – framed detail

    I kinda like it, but wow that took a lot of prep work …