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

  • CNC-3018XL: Foam Feet

    CNC-3018XL: Foam Feet

    The 3018XL plotter now lives on a different bench than it grew up on and the stepper motors resonate the plywood benchtop wonderfully well. After finding the machine weighs enough to flatten small foam blocks under the Official Feet, I cut out four 60×80 mm foot pad brackets:

    3018XL - foam foot pad bracket
    3018XL – foam foot pad bracket

    They’re attached to the 2040 frame extrusions with M4 screws into tee nuts; the third hole is there just in case it became necessary. I’m not sure whether MDF will bend under that offset load, but having all four brackets perfectly fit into two pieces of MDF left over from previous projects was a compelling justification.

    Some utility knife work produced the foam pads from a big sheet of polyethylene packing material:

    3018XL - foam foot pad - installed
    3018XL – foam foot pad – installed

    A piece of double-sided duct tape with amazingly gooey adhesive joins foam and bracket.

    If the resonance was annoying to my deflicted hearing, it must have been pretty bad. Now, even Mary thinks it sounds OK.

    Now, to discover whether the machine’s weight squashes those big foam blocks.

  • Snowflake Coaster: One Year Later

    Snowflake Coaster: One Year Later

    After more-or-less constant use under a cup in the bathroom, a Snowflake Coaster has reached the end of its life:

    Snowflake coaster - 1 yr use
    Snowflake coaster – 1 yr use

    The acrylic flake is fine, but the wood has mildewed:

    Snowflake coaster - 1 yr use - detail
    Snowflake coaster – 1 yr use – detail

    It’s second from the left in the bottom row:

    Snowflake Coaster - assortment
    Snowflake Coaster – assortment

    All except the pair in the left column had a coat or two of rattlecan clear, which suggests wood-ish coasters need something much more durable, along the lines of clearcoat epoxy. No surprise there!

  • Dutchess Rail Trail: Brush Trimming & Pruner Repair

    Dutchess Rail Trail: Brush Trimming & Pruner Repair

    The bushes & trees along the Dutchess Rail Trail were reaching out to touch us again, so I took some slow rides with many stops.

    Maple Oak trees along Page Park Drive:

    DCRT Brush Trimming - oak - 2025-07
    DCRT Brush Trimming – oak – 2025-07

    Blackthorn encroaching through the fence at Overocker:

    DCRT Brush Trimming - blackthorn - 2025-07
    DCRT Brush Trimming – blackthorn – 2025-07

    A tree somebody tossed down the trail bank near Morgan Lake:

    DCRT Brush Trimming - discarded tree - 2025-07
    DCRT Brush Trimming – discarded tree – 2025-07

    The slide lock on my trusty rehabilitated Fiskars bypass pruner worked loose and began sliding into the LOCK position when held overhead, then fell apart during disassembly:

    Fiskars pruner - lock rebuild
    Fiskars pruner – lock rebuild

    The lock now consists of:

    • An M4 × 12 mm nut from a Chicago Screw that exactly matched the 5 mm OD cylinder passing through the pruner body
    • A laser-cut fluorescent acrylic disk for thumb grippiness
    • A washer just because
    • An M4 hex-head screw
    • A dab of Loctite bonding screw to nut

    Clean the blades with alcohol and it’s ready for the rest of the season.

    I should have put a wave washer in the stack for some springiness, but it works surprisingly well for what it is.

    Now: discover how long acrylic lasts out there in the wild.

    Update: Yeah, the lock needed a wave washer for more friction, which became apparent after the first overhead branch.

  • CNC-3018XL Setup: Table Riser Blocks

    CNC-3018XL Setup: Table Riser Blocks

    After fixing the X axis drive, the CNC-3018XL table moved properly again, so I measured its overall alignment:

    3018CNC - table height measurement
    3018CNC – table height measurement

    The +Y side (on the left in the photo, keeping in mind I’ve rotated the axes) turned out to be 0.7 mm too low, so I made a set of riser blocks to level the tabletop:

    Table Riser - solid model
    Table Riser – solid model

    The 10 mm height would ram the tip of a Pilot pen about 10 mm below the tabletop surface, were it not for the spring-loaded pen holder:

    Pilot V5RT holder - installed
    Pilot V5RT holder – installed

    The 0.7 mm difference in height levels the tabletop:

    CNC3018XL - table riser positions
    CNC3018XL – table riser positions

    The OpenSCAD code produces an SVG outline I intended to use for a foam pad, but then I found a quartet of springs that worked even better:

    CNC3018XL - table spring mount
    CNC3018XL – table spring mount

    So it’s now aligned within ±0.3-ish mm across the surface, with the unflatness of a slab cut from a 1955-era Formica kitchen countertop accounting for most of the difference in a swale from Quadrant III across the origin to Quadrant I.

    Which a check plot using an old file shows will be Flat Enough for my simple needs:

    CNC3018XL - test plot
    CNC3018XL – test plot

    Having the camera alignment remain exactly spot on came as a pleasant surprise:

    Camera Alignment check
    Camera Alignment check

    The faded cross to the left came from the table’s previous position; there’s no positive index between the countertop slab and the underlying T-slots.

    Part of the motivation for these blocks was to verify PrusaSlicer automagically handles filament / color changes between two objects, as long as OpenSCAD hasn’t unioned them as part of a common transformation. Not having to cut out the socket around the text simplifies the code from what I’d been doing with previous objects.

    The OpenSCAD source code as a GitHub Gist:

    // CNC 3018 table riser blocks
    // Ed Nisley – KE4ZNU
    // 2025-06-29
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Outlines]
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    BlockOA = [40.0,30.0,10.0]; // riser block size
    SlotBlock = [8.0,BlockOA.y,3.0]; // alignment in slot
    BoltOD = 6.0 + HoleWindage; // central bolt
    LogoFont = "Fira Sans Condensed:style=SemiBold";
    LogoSize = 7.5;
    LogoColor = "Red";
    LogoThick = 0.4;
    //———-
    // Define Shapes
    module Riser(thick=1,matl="Block") {
    LogoText = format_fixed(thick,1);
    if (matl == "Text" || matl == "All")
    right(BlockOA.x/4) zrot(90)
    color(LogoColor)
    up(thick + SlotBlock.z + ((matl == "All") ? 0.01 : 0))
    text3d(LogoText,LogoThick + ((matl == "All") ? 0.01 : 0),LogoSize,LogoFont,
    anchor=TOP,atype="ycenter");
    if (matl == "Block" || matl == "All")
    difference() {
    cuboid(SlotBlock,$fn=8*3,anchor=BOTTOM,rounding=2.0,except=[BOTTOM,TOP]) position(TOP)
    cuboid(BlockOA,$fn=8*3,anchor=BOTTOM,rounding=2.0,except=[BOTTOM,TOP]);
    down(Protrusion)
    zrot(180/6)
    cyl(2*BlockOA.z,d=BoltOD,$fn=6,anchor=BOTTOM,circum=true);
    }
    }
    //———-
    // Build things
    if (Layout == "Show")
    down(SlotBlock.z)
    Riser(BlockOA.z,matl="All");
    if (Layout == "Outlines") {
    projection(cut=false)
    Riser(BlockOA.z,matl="Block");
    }
    if (Layout == "Build") {
    up(BlockOA.z + SlotBlock.z) xrot(180)
    Riser(BlockOA.z,matl="Block");
    up(BlockOA.z + SlotBlock.z) xrot(180)
    Riser(BlockOA.z,matl="Text");
    }

  • PolyDryer Humidity: Meter vs. Indicator Cards vs. Adsorption

    PolyDryer Humidity: Meter vs. Indicator Cards vs. Adsorption

    A week after installing 25 g of fresh silica gel, without any outside influence other than using some of the filaments to build things, I recorded the humidity meter reading, the indicator card colors, and the weight gain.

    Click on any picture for more dots and to get rid of the captions and their stylin’ photo-blur.

    White PETG, gain 0.6 g:

    Black PETG, gain 0.8 g:

    Orange PETG, gain 1.0 g:

    Blue PETG, gain 0.4 g:

    Blue PETG-CF, gain 1.3 g:

    Black PETG-CF, gain 2.1 g:

    Gray PETG-CF, gain 2.1 g:

    The (newer) indicator cards with the smaller dots / larger black borders seem less acute than the (older) large-dot cards. The two 28 %RH cards look about right, but the 20 and 21 %RH cards seem more different than the similar humidity would suggest.

    Under 20 %RH, all the spots look pretty much the same, but AFAICT any humidity below 20 %RH is Good Enough for 3D printing.

    The Blue PETG-CF went directly from its sealed bag into the PolyDryer box, unlike the Black and Gray PETG-CF spools that sat in the 50% RH basement long enough to soak up the ambience. The Blue has outgassed enough water to suggest spools do not arrive “bone dry” from the factory, although the Black and Gray prove the Basement Shop is wetter than the factory.

    All of the silica gel together weighed 184.2 on the same scale I originally measured the 25 g quantities that should have totalled 175 g, but the individual measurements total 183.3 g. I don’t trust the scale to be better than ±0.1 g on any measurement, so half a percent is likely as good as it gets.

    The silica gel weighed 187 g on the kitchen scale, sweated down to 179 g after 7 minutes in the microwave being defrosted like 1.5 pounds of fish, and, depending on which numbers you believe, released 8 to 10 g of water in the process.

    Microwaving something containing so little water means the silica gel absorbs very little of the energy: the dish, glass turntable, and metal walls got absurdly hot. I think using the induction cooktop and cast iron pan makes more sense, even if it takes longer.

    With fresh silica gel in place, perhaps waiting two weeks will produce interesting numbers.

  • Plastic Spring Clamp Jaw Rod Replacement

    Plastic Spring Clamp Jaw Rod Replacement

    A recent quilt photo shoot degenerated into me chasing several bright orange clamp jaws across the deck as they popped off their clamps hanging from the photo backdrop scaffold. Most clamps have jaws snapping onto actual rods, but these clamps have molded-in-place “rods” much smaller than the 2 mm expected by the jaws and much more irregular than seems reasonable.

    Trace and scan the nose of a clamp:

    Large spring clamp nose outline
    Large spring clamp nose outline

    Curiously, the molded rod is not centered in the nose:

    Large spring clamp nose - pin locatIon
    Large spring clamp nose – pin locatIon

    Use LightBurn to coerce a scan of the first sketch into a suitable path, laser-cut some MDF, and glue up a drill fixture:

    Spring clamp jaw pins - fixture gluing
    Spring clamp jaw pins – fixture gluing

    Align the drill to the center of the off-center hole marked on the bottom layer:

    Spring clamp jaw pins - drill alignment
    Spring clamp jaw pins – drill alignment

    The drilling setup looks casual, but hand-holding the clamps against the rear wall and into the form-fitting nose recess sufficed:

    Spring clamp jaw pins - fixture overview
    Spring clamp jaw pins – fixture overview

    I snipped the plastic “rods” out before drilling the holes, then rammed 2 mm steel rods in place:

    Spring clamp jaw pins - steel
    Spring clamp jaw pins – steel

    They’re really 5/64 inch = 1.98 mm rods from the oil-hardening drill rod stash, but entirely sufficient for the purpose.

    With one clamp in hand, though, there was obviously no reason for the rods to be off-center. So I centered the drill in the nose, punctured the rest of the clamps, and pressed 2 mm carbon fiber rods in place:

    Spring clamp jaw pins - steel vs carbon fiber
    Spring clamp jaw pins – steel vs carbon fiber

    The rods were cut to 20 mm by rolling them across a pad with firm pressure from a utility knife. That was mostly to get some experience cutting carbon fiber, which is obviously overqualified for the job.

    Snap the orange jaws in place and I shall never suffer the embarrassment of chasing them again …

  • CNC-3018XL: Table Drive Nut Overstress

    CNC-3018XL: Table Drive Nut Overstress

    A confluence of unrelated events led me to unboxing and setting up the CNC-3018XL most recently used to plot Homage Tek Circuit Computer decks, but the table slid along its rods entirely too easily. A peek at the leadscrew revealed an assortment of parts last seen when I extended the frame:

    3018CNC - table drive - as found
    3018CNC – table drive – as found

    The featureless cylinder is the leadscrew follower nut, which evidently popped out of its proper place in the table drive block:

    3018CNC - table drive parts
    3018CNC – table drive parts

    The crude chamfer suggests that end went into the block first, so that’s what I did:

    3018CNC - table drive - follower nut installed
    3018CNC – table drive – follower nut installed

    It seems snug enough in there, at least for a machine used solely for plotting and maybe drag knife cuttery, so I’ll assume the box received some rough handling during our move.

    It’s now back in place and seems to work well enough:

    3018CNC - table drive - installed
    3018CNC – table drive – installed

    I briefly considered adding some setscrews to hold it in place, but came to my senses. If it pops out again, maybe it’ll be time to rebuild that block with proper retention.

    The software side of the thing surely needs TLC, too.