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: Laser Cutter

  • World War II Dog Tag Layout

    World War II Dog Tag Layout

    Quite some time ago, I hammered out G-Code to engrave ersatz dog tags for a Cabin Fever demo:

    Cabin Fever Dog Tag
    Cabin Fever Dog Tag

    A dozen years later, making a World War II dog tag is a whole lot easier:

    John Q Public - WWII dog tag
    John Q Public – WWII dog tag

    Well, “easier” if you allow laser engraving in white-on-black Trolase using a font intended to mimic a typewriter.

    Close enough, methinks.

    Which comes from a simple layout:

    John Q Public - WWII dog tag - LB layout
    John Q Public – WWII dog tag – LB layout

    The outline traces a scanned image of my father’s tag, fitting a few hand-laid splines around the curves:

    John Q Public - WWII dog tag - spline curves
    John Q Public – WWII dog tag – spline curves

    I generated a random serial number based on my father’s draftee status (he was in his early 30s during his South Sea Island tour) and state of residence; my apologies to anyone carrying it for real. His blood type was A and (I think) the religion code marks him as “Brethren”, a common group in my ancestry.

    Given the outline, various plastics, and a laser, other effects become possible:

    WWII dog tag outline test
    WWII dog tag outline test

    It might come in handy for something, someday.

    The LightBurn SVG layout as GitHub Gist:

  • Lift Chair Foot Risers

    Lift Chair Foot Risers

    The fuzzy felt feet on the lift chairs raised them enough to slide both floor lamp bases underneath with the backs in the upright state, but reclining the chair with the light more than halfway back along the side of the chair crunched the lamp base.

    Rather than print taller fuzzy feet, which takes a long time, I knocked out two quartets of laser-cut risers:

    Lift Chair Foot Riser - installed
    Lift Chair Foot Riser – installed

    They’re six layers of 3 mm MDF or plywood:

    Lift Chair Foot Riser - assembled
    Lift Chair Foot Riser – assembled

    The LightBurn layout makes one riser:

    Lift Chair Feet Extenders - LB layout
    Lift Chair Feet Extenders – LB layout

    The upper two discs become two rings and two pads, with the lower two disks forming the middle layers. The ring ID clears the chair foot and the pad OD fits into the existing printed fuzzy felt foot. The two cuts making that happen leave the thinnest imaginable ring of MDF in place.

    The tiny circles cut holes for 11 mm snippets of 1.1 mm hard steel wire aligning the layers:

    Lift Chair Foot Riser - locating pins
    Lift Chair Foot Riser – locating pins

    Assembly sequence:

    • Tap two pins into a ring
    • Butter the ring with yellow wood glue
    • Slide the other ring over the pins
    • Butter
    • Slide a disk over the pins
    • Drive a pin into a pad
    • Butter
    • Slide the other pad over the pin
    • Butter
    • Slide a disk over the pin atop the pads
    • Butter one of the disks
    • Slide the disks together over all three pins
    • Tap all pins below their surface

    Make two and clamp them together to ensure everything sticks firmly.

    Repeat to make four risers

    Install, recline, and enjoy not hearing a mysterious crunch from the lamp base.

    The alert reader will note the 6 mm stack of two pads leaves a slight gap above the printed foot. Turns out the recess is 5 mm deep and I decided to just live with a 1 mm gap down there.

  • Laser Engraved Fabric

    Laser Engraved Fabric

    This is more along the lines of searing the fuzz, rather than actual engraving:

    Laser Engraved Fabric - cotton knit
    Laser Engraved Fabric – cotton knit

    The top row is 15% power at 400 mm/s, the bottom is 25% power, and the fabric was a cotton t-shirt from the Box o’ Shop Wipes.

    Applying the higher power to the inside of sweatpants fabric, whatever that might be:

    Laser Engraved Fabric - sweatpants
    Laser Engraved Fabric – sweatpants

    Both of those were easier to see in the slanting sunlight of a later winter afternoon.

    The best results come from the lowest feasible power applied at the fastest practical speed, with obvious size and complexity limitations.

    I think this will most useful on a removable tag labeling a piece (perhaps cut from a larger pattern), rather than branding the piece itself.

  • Laser-Engraved Bentley Snowflakes

    Laser-Engraved Bentley Snowflakes

    Algorithmic snowflakes make for interesting coasters and decorations:

    Snowflake Hangers - frosted
    Snowflake Hangers – frosted

    But they lack the complexity of real snowflakes:

    Wilson Bentley Photomicrograph of Dendrite Star Snowflake No. 842 - SIA-SIA2013-09114 - rescaled
    Wilson Bentley Photomicrograph of Dendrite Star Snowflake No. 842 – SIA-SIA2013-09114 – rescaled

    That’s from the Smithsonian collection of the Wilson Bentley snowflake photos from back in the 1890s, all of which are CC0 = Public Domain images.

    So pick a nice image, say #842, clean it up a bit, and isolate the flake from the background:

    Snowflake No. 842 - SIA-SIA2013-09114 - isolated
    Snowflake No. 842 – SIA-SIA2013-09114 – isolated

    Pick a threshold level to prettify the result:

    Snowflake No. 842 - SIA-SIA2013-09114 - Threshold
    Snowflake No. 842 – SIA-SIA2013-09114 – Threshold

    Then engrave it into the back of an acrylic mirror scrap, so the darkest parts become most transparent:

    Bentley 842 - engraved mirror - white background
    Bentley 842 – engraved mirror – white background

    Which looks better when seen against an illuminated background:

    Bentley 842 - engraved mirror - color background A
    Bentley 842 – engraved mirror – color background A

    Well, I think it does:

    Bentley 842 - engraved mirror - color background B
    Bentley 842 – engraved mirror – color background B

    Maybe four different snowflakes atop those squares?

    Gotta get this ready for the next snow season …

  • Shoulder PT Pulley: Last 10% Manufacturing

    Shoulder PT Pulley: Last 10% Manufacturing

    Mary’s PT requires a Shoulder Pulley, so I got one that seemed better constructed than the cheapest Amazon crap. In particular, this view suggested the pulley ran on a bearing:

    Slim Panda Shoulder Pulley - detail view
    Slim Panda Shoulder Pulley – detail view

    Which turned out to be the case, but, also as expected, the whole thing required a bit of finishing before being put in service.

    It’s intended to hang from a strap trapped between an interior door and its frame. The strap was intended to attach to the block (a.k.a. “Thickened base”) through a breathtakingly awkward pair of low-end carabiners:

    Slim Panda Shoulder Pulley - carabiners
    Slim Panda Shoulder Pulley – carabiners

    Which I immediately replaced with a simple, silent, sufficiently strong black nylon cable tie:

    Shoulder PT Pulley - block hardware
    Shoulder PT Pulley – block hardware

    Rather than let the metal block clunk against the door, it now sports a pair of cork-surfaced bumper plates:

    Shoulder PT Pulley - side plates installed
    Shoulder PT Pulley – side plates installed

    A doodle of the block dimensions:

    Shoulder Pulley - dimension doodle
    Shoulder Pulley – dimension doodle

    Which turned into a simple LightBurn layout:

    Shoulder PT Pulley Side Plates - LB layout
    Shoulder PT Pulley Side Plates – LB layout

    The blue construction lines represent the actual block & pulley, with the red cut lines offset 2 mm to the outside to ensure the metal stays within the bumpers. It’s possible to pick the block up and whack the pulley against the door, so don’t do that.

    Cut out two pieces of 3 mm MDF, two pieces from a cork coaster (covered with blue tape and cut with the paper backing up), peel-n-stick the cork to the MDF, put double-sided foam tape on the block, peel-n-stick the bumpers, then hang on the attic door.

    Now it works the way it should!

    The LightBurn SVG layout as a GitHub Gist:

    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.
  • Tailor’s Clapper: CNC Pocketing

    Tailor’s Clapper: CNC Pocketing

    Separating the interior contour of the finger grip from its overall shape let me reduce the woodworking to a simple pocketing operation:

    Ironing Weight Finger Grip
    Ironing Weight Finger Grip

    Start by aligning the finished block to put the joint between the pieces parallel to the X axis, then touch off at the center:

    Ironing Weight - alignment
    Ironing Weight – alignment

    A pair of clamps screwed to the tooling plate act as fixtures to align the block when it’s flipped over to mill the other pocket.

    Just to see how it worked, I set up a GCMC program to produce a trochoidal milling pattern using the sample program:

    Tailors Clapper - Pocket Milling Path
    Tailors Clapper – Pocket Milling Path

    Now, most folks would say the Sherline lacks enough speed and stiffness for trochoidal milling:

    Ironing weight - trochoidal milling
    Ironing weight – trochoidal milling

    Aaaand I would agree with them: chugging along at 24 in/min = 600 mm/min doesn’t put the 10 k RPM spindle speed to good use. Fortunately, oak doesn’t require much in the way of machine stiffness and the trochoid path does ensure good chip clearance, so there’s that.

    If I had to do a lot of trochoid milling, I’d tweak the GCMC sample code to short-cut the return path across the circle diameter, rather than air-cut the last half of every circumference.

    The code starts by emptying a circular pocket so the trochoid path begins in clear air, rather than trenching into solid wood.

    Eventually it finishes the pocket:

    Ironing weight - grip pocket
    Ironing weight – grip pocket

    After the trochoid finishes, one climb-milling pass around the perimeter clears the little ripple between each trochoid orbit.

    Flip it over, clamp it down, touch off the middle, and do it all again.

    The next step is filling those pockets with a pair of comfy grips.

    The GCMC source code as a GitHub Gist:

    // Ironing weight pocketing
    // Ed Nisley KE4ZNU – 2023-01
    //—–
    // Library routines
    include("/opt/gcmc/example/cc_hole.inc.gcmc");
    include("varcs.inc.gcmc");
    include("tracepath_comp.inc.gcmc");
    include("trochoidal.inc.gcmc");
    /*
    include("tracepath.inc.gcmc");
    include("engrave.inc.gcmc");
    */
    //—–
    // Useful constants
    SafeZ = 10.0mm; // above all obstructions
    TravelZ = 2.0mm; // within engraving / milling area
    BlockHome = [0.0mm,0.0mm,TravelZ]; // Origin on surface at center of pocket
    FALSE = 0;
    TRUE = !FALSE;
    //—–
    // Overall values
    Socket = [160.0mm,25.0mm,7.0mm]; // raw grip recess into block
    RoundEnds = TRUE; // TRUE for smooth rounded endcaps
    SocketRadius = RoundEnds ? Socket.y/2 : 10.0mm;
    comment("SocketRadius: ",SocketRadius);
    CutterDia = 6.32mm – 0.15; // actual cutter diameter – windage
    MillStep = 0.25 * CutterDia; // stepover in XY plane
    comment("CutterDia: ",CutterDia," MillStep: ",MillStep);
    MillClean = MillStep/2;
    PlungeSpeed = 150.0mm; // cutter Z plunge into work
    MillSpeed = 600.0mm; // XY speed
    if (CutterDia > SocketRadius) {
    error("Cutter too large for corner radius");
    }
    CornerOC = head(Socket,2) – 2*[SocketRadius,SocketRadius];
    comment("CornerOC: ",CornerOC);
    Corners = RoundEnds ? // rear left CCW around slot
    {-CornerOC/2, CornerOC/2} :
    {[-CornerOC.x,CornerOC.y]/2, [-CornerOC.x,-CornerOC.y]/2, [CornerOC.x,-CornerOC.y]/2, CornerOC/2};
    comment("Corners: ", Corners);
    if (RoundEnds) {
    SlotPerimeter = {[0.0mm,Socket.y/2,-Socket.z]}; // entry point at center rear
    SlotPerimeter += {Corners[0] + [0.0mm,SocketRadius]};
    SlotPerimeter += varc_ccw([-SocketRadius,-SocketRadius],SocketRadius) + SlotPerimeter[-1];
    SlotPerimeter += varc_ccw([+SocketRadius,-SocketRadius],SocketRadius) + (Corners[0] + [-SocketRadius,0.0mm]);
    SlotPerimeter += {Corners[1] + [0.0mm,-SocketRadius]}; // across front
    SlotPerimeter += varc_ccw([+SocketRadius,+SocketRadius],SocketRadius) + SlotPerimeter[-1];
    SlotPerimeter += varc_ccw([-SocketRadius,+SocketRadius],SocketRadius) + (Corners[1] + [+SocketRadius,0.0mm]);
    }
    else {
    SlotPerimeter = {[0.0mm,Socket.y/2,-Socket.z]}; // entry point at center rear
    SlotPerimeter += {Corners[0] + [0.0mm,SocketRadius]};
    SlotPerimeter += varc_ccw([-SocketRadius,-SocketRadius],SocketRadius) + SlotPerimeter[-1];
    SlotPerimeter += {Corners[1] + [-SocketRadius,0.0mm]};
    SlotPerimeter += varc_ccw([+SocketRadius,-SocketRadius],SocketRadius) + SlotPerimeter[-1];
    SlotPerimeter += {Corners[2] + [0.0mm,-SocketRadius]}; // across front
    SlotPerimeter += varc_ccw([SocketRadius,SocketRadius],SocketRadius) + SlotPerimeter[-1];
    SlotPerimeter += {Corners[3] + [SocketRadius,0.0mm]};
    SlotPerimeter += varc_ccw([-SocketRadius,SocketRadius],SocketRadius) + SlotPerimeter[-1];
    }
    //— Begin cutting
    goto([-,-,TravelZ]);
    goto(BlockHome);
    if (!RoundEnds) { // clear corners outward of main pocket
    foreach(Corners; xy) {
    comment("Plunge corner at: ",xy);
    feedrate(PlungeSpeed);
    goto(xy);
    move([-,-,-Socket.z]);
    comment(" pocket");
    feedrate(MillSpeed);
    cc_hole(xy,(SocketRadius – MillClean),CutterDia/2,MillStep,-Socket.z);
    goto([-,-,TravelZ]);
    comment(" done!");
    }
    }
    comment("Open slot");
    TrochRadius = (Socket.y – CutterDia)/2 – MillClean;
    TrochPath = {[-(Socket.x/2 – TrochRadius – CutterDia/2 – MillStep),TrochRadius],
    [ (Socket.x/2 – TrochRadius – CutterDia/2 – MillStep),TrochRadius]};
    comment(" clear landing zone");
    xy = [TrochPath[0].x,0.0mm];
    feedrate(PlungeSpeed);
    goto(xy);
    move([-,-,-Socket.z]);
    feedrate(MillSpeed);
    cc_hole(xy,Socket.y/2 – MillClean,CutterDia/2,MillStep,-Socket.z);
    goto([-,-,TravelZ]);
    comment(" trochoid pocket milling");
    feedrate(MillSpeed);
    trochoid_move(TrochPath[0],TrochPath[1],
    -Socket.z, TrochRadius, MillStep);
    goto([-,-,TravelZ]);
    comment("Clean slot perimeter");
    feedrate(MillSpeed);
    goto([-,-,-Socket.z]);
    tracepath_comp(SlotPerimeter,CutterDia/2,TPC_CLOSED + TPC_LEFT + TPC_ARCIN + TPC_ARCOUT);
    goto([-,-,TravelZ]);
    goto(BlockHome);
    #!/bin/bash
    # Ironing weight finger grip pocketing
    # Ed Nisley KE4ZNU – 2023-01
    Flags='-P 4 –pedantic' # quote to avoid leading hyphen gotcha
    # Set these to match your file layout
    LibPath='/opt/gcmc/library'
    Prolog='prolog.gcmc'
    Epilog='epilog.gcmc'
    #—–
    gcmc $Flags \
    –include "$LibPath" –prologue "$Prolog" –epilogue "$Epilog" \
    "Ironing weight grip pocket.gcmc" > "Grip pocket.ngc"
    view raw pocket.sh hosted with ❤ by GitHub
  • Tailor’s Clapper: Laser-Cut Woodwork

    Tailor’s Clapper: Laser-Cut Woodwork

    Creating the rounded-rectangle shape of a tailor’s clapper in LightBurn, then cutting it out, doesn’t pose much of a challenge:

    Ironing weight - cutting oak plank
    Ironing weight – cutting oak plank

    That was a prototype cut from an oak plank with some fairly obvious splits. It turned out OK, but ¾ inch oak is obviously right at the limit of my 60 W laser’s abilities:

    Ironing weight - laser cut edges
    Ironing weight – laser cut edges

    The “production” clappers came from a nicer plank that was just barely long enough:

    Ironing weight - laser cuts - top
    Ironing weight – laser cuts – top

    The cut, at 2 mm/s and 70% power, just barely penetrates the plank:

    Ironing weight - laser cuts - bottom
    Ironing weight – laser cuts – bottom

    Unlike the top picture, I put the plank on the knife-edge supports, resulting in the small charred lines perpendicular to the cut.

    The edges came out thoroughly charred:

    Ironing weight - laser cuts - edges
    Ironing weight – laser cuts – edges

    Spread yellow wood glue smoothly on one piece, stick another to it, then align and clamp:

    Ironing weight - clamping
    Ironing weight – clamping

    I offset the cut 1 mm outside the nominal shape to allow Mr Belt Sander to remove the char while reducing the block to size. Obviously, there is no real tolerance, other than that it must fit Mary’s hand, and they all came out nice and straight.

    Some of the char seems embedded deep in the wood grain and leaves a dark mark despite removing the extra millimeter:

    Ironing weight - seam ironing B
    Ironing weight – seam ironing B

    Contrary to what I feared, the characteristic wood-stove odor dissipated after a day or two: they’re entirely inoffensive. Which was fortunate, as the slightest odor would cause them to fail incoming inspection.

    The longer weight on the far left came from a plank with a conspicuous knot on one end. The stress from supporting that branch while the tree grew apparently made the wood much denser, as the same 2 mm/s 70% cut setting barely made it halfway through the plank. I finished the job by cutting the outline with Tiny Bandsaw™, which didn’t proceed any faster than the laser and left a much less uniform path for Mr Belt Sander.

    I’d definitely consider making any future tailor’s clappers by laminating three half-inch oak planks that would be much easier to cut, but my woodpile doesn’t have anything like that.

    The wood remains unfinished, as part of its job is to absorb moisture from steam-ironed fabric (which is not happening in the photo). Applying stains / sealers / finishes would definitely improve the wood’s appearance, but wreck its performance. Around here, function always outweighs form.