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: Improvements

Making the world a better place, one piece at a time

  • Sherline Laser Aligner Realignment

    Sherline Laser Aligner Realignment

    With the Sherline CNC mill once again able to move under its own power, an hour or so of tweakage got the laser aligner settled in its new home:

    Sherline laser aligner - overview
    Sherline laser aligner – overview

    It’s (still) an upcycled laser line projector, minus the cylindrical lens stretching the dot into a line, running from a pair of AA alkaline cells:

    Sherline laser aligner - rear view
    Sherline laser aligner – rear view

    The three small screws provide simpleminded angle adjustment, with the disadvantage of simultaneously moving the lens in the XY plane.

    The upper bubble level shows it’s not at all vertical:

    Sherline laser aligner - front view
    Sherline laser aligner – front view

    That’s because the beam must fall down the middle of the Sherline’s spindle bore:

    Sherline laser aligner - beam at spindle top
    Sherline laser aligner – beam at spindle top

    Getting the alignment right requires a mirror on the tooling plate, which I will not attempt to photograph again, reflecting the beam upward through the spindle, where it will light up the bottom of the no-longer-a-line projector’s lens mount. When that happens, the projector is boresighted on the spindle, regardless of whether the tooling plate is perpendicular to the local gravitational field.

    With the Z axis / spindle near the top of its travel, screwing the lens (mounted in a toolholder) onto the spindle produces a defocused beam on the tooling plate:

    Sherline laser aligner - defocused spot - on scale
    Sherline laser aligner – defocused spot – on scale

    If the spot doesn’t look similarly round-ish, then the beam isn’t completely filling the entrance pupil of the lens and you must twiddle the projector’s angle / position until it does.

    With that done, running the Z axis to put the lens about 30 mm above the plate produces a suitably teeny spot:

    Sherline laser aligner - focused spot on scale
    Sherline laser aligner – focused spot on scale

    The Sherline’s previous home atop that same gray countertop had been firmly affixed to the basement wall, with the gantry and laser projector screwed to the floor joists: everything immovable. The countertop now sits atop a workbench not firmly affixed to anything: a good solid bump will likely knock the Sherline out of alignment with the beam.

    How often that happens and how awful recovery will be remains to be seen. For now, It Just Works™ again.

    Feeding Sherline aligner into the search box will reveal much of the backstory.

    I extracted an XZ positioner from the Box o’ Optics Lab Stuff before coming to my senses: this is not nearly such a critical application.

  • Sherline vs. LinuxCNC 2.9.8

    Sherline vs. LinuxCNC 2.9.8

    Notes on finally getting the Sherline CNC mill operating in its new home, with a suitable Axis startup image:

    Sherline setup 2026-06
    Sherline setup 2026-06

    The gray countertop from its former home sits on foam strips soaking up a slight warp with enough isolation to keep things quiet.

    The gantry required the usual fiddling to make the cable hoist the Z axis directly upward, with the orange flag on the counterweight barely visible below the monitor.

    I recently touched the box of precision XYZ positioners and there might be something useful, albeit grossly overqualified, in there to simplify dropping the laser pointer beam directly through the spindle bore.

    A clean installation of LinuxCNC 2.9.8 on an ancient Dell Optiplex 9020 proceeded smoothly. Installing x11vnc let the rest of the proceedings happen from upstairs in the Comfy Chair. For unknown reasons, vinagre works better than Reminna as a VNC client, after recalling F11 enters / exits fullscreen mode.

    The mesaflash utility accompanying LinuxCNC 2.9.8 did not recognize the Mesa 6i25 card. Fetching & compiling the most recent version (3.5.17) cleared that hump and flashed the bitmap:

    sudo mesaflash --verbose --device 5i25 --write 5i25/configs/hostmot2/5i25_prob_rfx2.bit
    

    The 6i25 wants to be known as a 5i25, with its jumpers in their default positions:

    Mesa 6i25 - jumper locations
    Mesa 6i25 – jumper locations

    For unknown reasons, the button originally known as btn-trigger became btn-joystick for a while and has now reverted to btn-trigger. It’s labeled 1 in the four-button cluster:

    Logitech Dual-Action Gamepad - relabeled
    Logitech Dual-Action Gamepad – relabeled

    Which required changing the pin name in the Kicad library component:

    Sherline HAL schematic - Logitech button 1 name
    Sherline HAL schematic – Logitech button 1 name

    Which required converting the old Kicad library format into the new Kicad library format, a completely automatic process without, AFAICT, any unpleasant side effects.

    The new name fed into the schematic as expected, after minor fumbling while re-adding the modified component and setting its annotation number:

    Sherline HAL schematic - Logitech AZ button logic
    Sherline HAL schematic – Logitech AZ button logic

    The X axis home microswitch has (apparently) become more bouncy while it was idle, so I increased the number of samples before HAL sees a change in that GPIO input:

    Sherline HAL schematic - home switch debounce
    Sherline HAL schematic – home switch debounce

    The dbounce block runs in the servo thread at 1 m per tick, so those 20 samples take all of 20 ms while the X axis moves 0.15 mm. At some point I should apply a scope to that switch, but for now It Just Works™.

    Considerably to my surprise, compiling the modified Kicad schematic into a HAL file proceeded without incident, despite various Python updates in the last five years.

    Kicad produces an “intermediate XML file” containing the netlist data intended for a conversion / export program, which is basically what my Kicad-to-HAL lashup does. I told Kicad to use Bash’s true command as a converter:

    Sherline HAL schematic - netlist export
    Sherline HAL schematic – netlist export

    So I can run the Kicad-to-HAL converter manually:

    python ../Kicad\ Conversion/Kicad-to-HAL.py Sherline\ HAL\ -\ Logitech\ Gamepad\ jogging.xml Sherline.hal
    

    You could tell Kicad to run it and it would probably Just Work™, but I’m used to peering at the results and dinking with my program.

    Which produced a new Sherline.hal file that Just Worked™ with the existing Sherline.ini file containing the configuration constants.

    The Sherline has cut only air so far, but, as the man said, “E pur si muove.”

  • Workbench Scrap Can

    Workbench Scrap Can

    You don’t have one of these, but your bench needs something like it:

    Workbench scrap can
    Workbench scrap can

    Tiny Bandsaw perches just above it and now I have a place to drop the scraps you see collecting in its tray.

    The can hangs by its rim from a completely kludged two-layered MDF hook stuck to the metal table frame with good 3M foam tape:

    Workbench scrap can hanger
    Workbench scrap can hanger

    It’s not in the way of Tiny Bandsaw, because I stand at the left end of the bench, and it’s not in the way of the Sherline / LinuxCNC keyboard, because I stand to its right. So far, so good.

    Should it fall off, I’ll think of something better.

  • Dremel Collet Holder

    Dremel Collet Holder

    A set of Dremel-knockoff collets & chucks will come in handy for an upcoming project:

    Dremel collet holder - in use
    Dremel collet holder – in use

    All the parts arrived jammed into the clear box where I had trouble figuring out the collet sizes.

    A few minutes with LightBurn and a scrap of 6 mm white acrylic produced a collet holder / organizer:

    Dremel collet holder - detail
    Dremel collet holder – detail

    Seen in the cold light of day, the upper 1.8 and 2.0 mm collets look swapped, which pretty much demonstrates the need for the holder.

    The nice engraved letters come from scribbling a chisel-tip black marker before peeling the protective paper off the acrylic. The black lacquer crayon I intended to use must be in a different box than the markers, but the results suffice for the intended purpose.

  • Photo Backdrop: Crossbar Improvement

    Photo Backdrop: Crossbar Improvement

    The instructions for the Photo Backdrop frame (upon which we hang Mary’s quilts for photos) suggest the crossbar fits on like this:

    Photo Backdrop - OEM crossbar installation
    Photo Backdrop – OEM crossbar installation

    The slot in the bottom is wider than the M10 stud, so the crossbar tends to flop around while assembling it overhead. I immediately replaced the wingnut with a chunky knob for better griptitude, but was never happy with how poorly the whole thing fit together.

    This is dramatically better:

    Photo Backdrop - fitting installed
    Photo Backdrop – fitting installed

    The crossbar is upside-down from the OEM instructions, but the bottom of the gray plug holds the tube firmly to the tripod while the nut seats firmly on the plug’s flat top:

    Photo Backdrop - fitting top view
    Photo Backdrop – fitting top view

    A snippet of 3M 300LSE adhesive sheet holds the plug in place, so that’s one less thing to fiddle with on each end.

    The solid model holds no surprises:

    Photo Backdrop Fittings - solid model
    Photo Backdrop Fittings – solid model

    Of course, it builds with the flat end downward.

    The OpenSCAD source code as a GitHub Gist:

    // Photo backdrop fitting
    // Ed Nisley – KE4ZNU
    // 2026-07-01
    include <BOSL2/std.scad>
    Layout = "Show"; // [Build,Show]
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    HoleWindage = 0.2;
    Protrusion = 0.01;
    NumSides = 3*2*4;
    Clearance = 0.3;
    $fn=NumSides;
    Tube = [23.0 – HoleWindage,1*INCH,100.0]; // arbitrary length
    Aperture = [24.0,15.0,100.0]; // oblong nut hole, arbitrary Z
    Washer = [10.5,20.0,1.5]; // M10
    //—–
    // Define things
    module Fitting() {
    difference() {
    union() {
    intersection() {
    xcyl(Tube[LENGTH],d=Tube[ID]);
    cuboid(Aperture,rounding=Aperture.y/2,edges="Z");
    }
    cuboid([Aperture.x,Aperture.y,Tube[OD]/2],rounding=Aperture.y/2,edges="Z",anchor=BOTTOM);
    }
    cyl(Aperture.z,d=Washer[ID]);
    }
    }
    //—–
    // Build things
    if (Layout == "Show") {
    Fitting();
    }
    if (Layout == "Build") {
    up(Tube[OD]/2)
    xrot(180)
    Fitting();
    }

  • Rivnut Installation Tool Stroke Adjustment

    Rivnut Installation Tool Stroke Adjustment

    The minimal instruction manual for the rivnut setting tool I’ve been using doesn’t explain how far to compress the rivnuts . The somewhat better manual for a similar tool includes a table:

    Rivnut Tool Stroke Settings
    Rivnut Tool Stroke Settings

    Under the plausible, but herein undefended, assumption that all rivnuts of a given size from any source are identical, the first three terms of the formula for each size become the number penciled into second column. Subtracting the range of material thickness from that number produces the stroke length range penciled over on the right.

    Neither manual explains how to set the tool to a specific stroke length, although eyeballing the distance on the scale from first contact until the going gets tough seems to cover smaller rivnuts:

    Stop applying more power on the handles when the decrease in the distance on the gauge approaches the calculated working stroke.

    For larger rivnuts, you just hit it again, harder:

    turn the knob clockwise to bring the riveter closer to the rivet nut, and close the handles until the rivet nut is secure in the hole. Repeat as necessary until the rivet nut is firmly in place.

    This post is my attempt to figure out how to adjust the tool to a specific stroke length, mostly because I’m that type of guy.

    Start with a diagram from the manual naming the parts:

    Rivnut Tool - parts diagram
    Rivnut Tool – parts diagram

    The unlabeled black cylinder between the “Installation Knob” and the “Scale Identification” is a nut determining the zero setting of the scale with the handles closed:

    Rivnut Tool - zero nut
    Rivnut Tool – zero nut

    Presumably that nut should be snug-to-tight with the scale at zero, because loosening it pushes the knob away from the body and puts the scale indicator below zero. It was finger-loose on my tool, so I snugged it firmly. A thin shim would align an indicator starting above zero with a snug nut; there may be an internal adjustment, but I didn’t go there.

    The diagram does not show that the “Sliding Sleeve” is spring-loaded away from the tool body:

    Rivnut Tool - mandrel installed - detail
    Rivnut Tool – mandrel installed – detail

    The “Outer Sleeve” normally covers the Sliding Sleeve and hides the spring:

    Rivnut Tool - mandrel installed - no nosepiece
    Rivnut Tool – mandrel installed – no nosepiece

    Which makes it awkward / difficult / painful to slide the sleeve toward the body while installing the “Mandrel Stem”, because you’re supposed to reach through those two openings, pinch the sleeve, and push it against the spring:

    Rivnut Tool - mandrel alignment
    Rivnut Tool – mandrel alignment

    The Mandrel must screw completely into the Sleeve to engage all its threads, then back out a fraction of a turn to align its hex flats with those on the nut inside the Sleeve. Releasing the Sleeve covers both hexes and locks the Mandrel in that position:

    Rivnut Tool - mandrel installed - nosepiece detail
    Rivnut Tool – mandrel installed – nosepiece detail

    A solid shaft connects the nut inside the Inner Sleeve (and, thus, the Sleeve and Mandrel) to the Knob. Turning the Knob turns the Mandrel, which is how you unscrew the Mandrel from the rivnut after crunching it in the workpiece.

    The “Nosepiece” screws into the Outer Sleeve until it seats:

    Rivnut Tool - mandrel installed - sleeve minimum
    Rivnut Tool – mandrel installed – sleeve minimum

    Each Mandrel and Nosepiece corresponds to a specific screw thread, so the Mandrel length & shape depend on the thread:

    Rivnut Tool - M3 M12 mandrels
    Rivnut Tool – M3 M12 mandrels

    You might expect this rivnut to be compressed by 10 mm when you close the handles:

    Rivnut Tool - sleeve minimum - handles extended
    Rivnut Tool – sleeve minimum – handles extended

    You would be wrong, as was I.

    Since this is the rivnut’s first appearance, note that the rivnut is screwed onto the Mandrel to show a thread or two of the Mandrel. The Mandrel must engage all the rivnut threads to prevent stripping the guts out of the poor thing. The plain end of the rivnut (on the left, away from the Nosepiece) has internal threads, as hinted by the diagrams in the chart, with the ribbed end (on the right) being a cylinder collapsing around the workpiece under pressure, which is the whole purpose of the tool.

    It turns out the handles will close freely, without applying any force to the M4 rivnut, for about 8 mm of travel:

    Rivnut Tool - sleeve minimum
    Rivnut Tool – sleeve minimum

    Closing the handles further would compress the rivnut by the 2 mm shown on the Scale.

    What was not obvious (to me, anyway): the handles turn cams to push an internal follower toward the Knob. That follower moves 10 mm as the handles go from open to closed, as indicated on the Scale, but won’t move the Mandrel until the follower moves past all the slack caused by compressing the spring. Remember the spring?

    Unscrewing the Outer Sleeve to move it outward from the body lets the spring push the Mandrel (and, thus, the Inner Sleeve) away from the body. Do this with the handles extended, so the Scale remains at 10 mm:

    Rivnut Tool - handles extended
    Rivnut Tool – handles extended

    Because screwing the Nosepiece into the Outer Sleeve compressed the spring and the Mandrel is on the shaft connected to the Knob, unscrewing the Sleeve also moves the Knob toward the body. Inside the body, the cam follower sees less slack distance, because the spring is less compressed.

    The Outer Sleeve (on this tool, anyway) has a 1.25 mm thread, so every revolution outward reduces the spring compression by 1.25 mm. Two turns releases the spring by 2.5 mm and closing the handles until the cam follower meets the shaft now shows 4.5 mm of compression:

    Rivnut Tool - crush measurement
    Rivnut Tool – crush measurement

    The handles have plenty of slop making this an inexact process, so:

    • Open the handles → scale at 10
    • Turn the Outer Sleeve to reduce the error
    • Close the handles gently until they stop
    • The scale shows the actual stroke distance, should you completely close the handles
    • Iterate until the correct distance appears

    Spin the knurled “Locking Nut” on the Outer Sleeve to contact the tool body, thereby locking the Sleeve in place.

    After all that preparation, poking the rivnut into the hole drilled in the material and completely closing the handles should crunch the rivnut Reasonably Close™ to its proper finished length. Assuming you’re crunching more than one rivnut, tweak as needed.

    At least I think that’s how it works …

  • Hose Nozzle Flow Restrictors

    Hose Nozzle Flow Restrictors

    Mary wanted less pressure in the spray while watering her plants and I suggested replacing the nozzle’s washer with a flow restrictor:

    Hose Nozzle Flow Restrictors - assembled
    Hose Nozzle Flow Restrictors – assembled

    The 3D-printed TPU base is squishy enough to act as a hose washer:

    Hose Nozzle Flow Restrictor Base - solid model
    Hose Nozzle Flow Restrictor Base – solid model

    A 1.5 mm thick acrylic orifice plate snapped into the opening takes advantage of the laser cutter’s precision:

    Hose Nozzle Flow Restrictors - LightBurn layout
    Hose Nozzle Flow Restrictors – LightBurn layout

    For lack of anything smarter, the holes have areas that are powers-of-two smaller than the nozzle’s 14.2 mm = 158 mm² internal passage: the hole labeled 8 is 158/256 mm² = 0.62 mm² → 0.9 mm diameter.

    Rather than figuring each hole’s diameter, just divide the previous diameter by √2 or rescale it by 100%/√2, which LightBurn can evaluate directly in its Numeric Edits fields. The as-cut holes are larger than their nominal size by about 0.1 mm, but any errors that might cause are definitely in the nature of fine tuning while watering the plants.

    The nozzle’s Shower pattern (on the left in the picture) has a 6.8 L/minute = 110 ml/s flow through an ordinary garden hose washer. The four smallest aperture plates produced these flows:

    Hose Nozzle Flow Restrictors - flow vs dia
    Hose Nozzle Flow Restrictors – flow vs dia

    The flow should scale with the square of the aperture diameter, which I could bully those points into suggesting, but the measurement accuracy produced by filling a gallon jug while tapping my phone’s stopwatch doesn’t justify anything fancier.

    The two smallest apertures reduce the Shower pattern to a very gentle spray requiring far too long to put enough water on the plants. Mary now uses an old plastic sprinkler head with enough holes to produce a dense spray with very little force, with the flow set by fifty feet of PEX pipe running across the width of the house from the town water inlet to the hose bib.

    It was a fun exercise and I learned a little more about printing TPU and fitting acrylic parts therein:

    Hose Nozzle Flow Restrictors - prototypes
    Hose Nozzle Flow Restrictors – prototypes