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

  • Layered Paper Coaster: GCMC Test

    Layered Paper Coaster: GCMC Test

    A few more attempts at layered paper construction, done with plain white Art Paper of various vintages:

    Layered paper coasters
    Layered paper coasters

    The middle one comes from a version of the original GCMC marquetry shape generator, tweaked to produce just the frame SVG, called by a Bash script to change the sash width, and imported into LightBurn for laser control:

    LightBurn - Marq-6-0.6-0.0mm
    LightBurn – Marq-6-0.6-0.0mm

    I generated the plain disk for the bottom by deleting all the inner shapes.

    The left and right coasters use LightBurn’s Offset tool to reduce the size of the interior holes on successive layers:

    LightBurn - Marq-8-0.40-20.0mm-Layers
    LightBurn – Marq-8-0.40-20.0mm-Layers

    Although the GCMC version turned out OK, you’ll note it lacks the central disk, as I was unwilling to tweak the code enough to make the disk diameter vary with the kerf width.

    Applying the LB Offset tool requires selecting only the inner shapes (it has an option to ignore the inner shapes) and applying the appropriate offset. Because the tool remembers its previous settings, it’s straightforward to step the offset from 1.0 mm to 7.0 mm on successive patterns.

    Applying glue (from a glue stick!) to the bottom of each disk, aligning them atop each other, and pressing them together becomes tedious in short order. If I had to do a lot of these, I’d be tempted to add three wings (not at 120° angles!) around the perimeter with holes for pegs, then stacking the layers in a fixture to ensure good alignment. A polygonal perimeter would simplify trimming the tabs.

    Spray adhesive might be faster, but each layer would have sticky edges and the finished coaster would become a dust collector par excellence.

    I like the overall effect, but …

    The OpenSCAD source code as a GitHub Gist:

    #!/bin/bash
    # Layering paper cutouts
    # Ed Nisley KE4ZNU – 2022-08-21
    Flags='-P 4 –pedantic' # quote to avoid leading hyphen gotcha
    SVGFlags='–svg –svg-no-movelayer –svg-opacity=1.0 –svg-toolwidth=0.2'
    # Set these to match your file layout
    ProjPath='/mnt/bulkdata/Project Files/Laser Cutter/Coasters/Source Code'
    LibPath='/opt/gcmc/library'
    ScriptPath=$ProjPath
    Script='Marquetry Layers.gcmc'
    [ -z "$1" ] && leaves="6" || leaves="$1"
    [ -z "$2" ] && aspect="0.50" || aspect="$2"
    [ -z "$3" ] && center="0.0mm" || center="$3"
    numlayers=8
    sashmin=2.0
    sashstep=2.0
    sashmax=$(echo "$sashmin+$sashstep*($numlayers-1)" | bc)
    echo min: $sashmin step: $sashstep max: $sashmax
    for sash in $(seq $sashmin $sashstep $sashmax) ; do
    fn=Marq-$leaves-$aspect-$center-S$sash.svg
    echo Output: $fn
    gcmc $Flags $SVGFlags –include "$LibPath" \
    -D "NumLeaves=$leaves" -D "LeafAspect=$aspect" -D "CenterDia=$center" \
    -D "Sash=${sash}mm" \
    "$ScriptPath"/"$Script" > "$fn"
    done
    view raw layers.sh hosted with ❤ by GitHub
    // Marquetry Layers
    // Ed Nisley KE4ZNU
    // 2022-08-21 layered paper test piece
    layerstack("Frame","Leaves","Rim","Base","Center","Tool1"); // SVG layers map to LightBurn colors
    //—–
    // Library routines
    include("tracepath.inc.gcmc");
    include("varcs.inc.gcmc");
    FALSE = 0;
    TRUE = !FALSE;
    //—–
    // Command line parameters
    // -D various useful tidbits
    // add unit to speeds and depths: 2000mm / -3.00mm / etc
    if (!isdefined("OuterDia")) {
    OuterDia = 120.0mm;
    }
    if (!isdefined("CenterDia")) {
    CenterDia = 20.0mm;
    }
    if (!isdefined("NumLeaves")) {
    NumLeaves = 8;
    }
    if (!isdefined("Sash")) {
    Sash = 4.0mm;
    }
    if (!isdefined("LeafAspect")) {
    LeafAspect = 0.50;
    }
    // Leaf values
    LeafStemAngle = 360.0deg/NumLeaves; // subtended by inner sides
    LeafStemHA = LeafStemAngle/2;
    LeafOAL = OuterDia/2 – Sash – (Sash/2)/sin(LeafStemHA);
    LeafWidth = LeafAspect*LeafOAL;
    L1 = (LeafWidth/2)/tan(LeafStemHA);
    L2 = LeafOAL – L1;
    // message("Len: ",LeafOAL," L1: ",L1," L2: ",L2);
    LeafTipHA = to_deg(atan(LeafWidth/2,L2)); // subtended by outer sides
    LeafTipAngle = 2*LeafTipHA;
    // message("Width: ",LeafWidth);
    // message("Tip HA: ",LeafTipHA);
    LeafID = CenterDia + 2*Sash;
    LeafOD = LeafID + LeafOAL;
    // message("ID: ",LeafID," OD: ",LeafOD);
    // Find leaf and rim vertices
    P0 = [(Sash/2) / sin(LeafStemHA),0.0mm];
    m = tan(LeafStemHA);
    y0 = -(Sash/2) / cos(LeafStemHA);
    if (CenterDia) { // one sash width around center spot
    a = 1 + pow(m,2);
    b = 2 * m * y0;
    c = pow(y0,2) – pow(LeafID/2,2);
    xp = (-b + sqrt(pow(b,2) – 4*a*c))/(2*a);
    xn = (-b – sqrt(pow(b,2) – 4*a*c))/(2*a);
    y = xp*tan(LeafStemHA) – (Sash/2) / cos(LeafStemHA);
    P1 = [xp,y];
    if (FALSE) {
    message("a: ",a);
    message("b: ",b);
    message("c: ",c);
    message("p: ",xp," n: ",xn," y: ",y);
    }
    }
    else { // force sharp point without center spot
    P1 = P0;
    }
    P2 = P0 + [L1,LeafWidth/2];
    P3 = P0 + [LeafOAL,0mm];
    P4 = P3 + [Sash/sin(LeafTipHA),0.0mm];
    P5r = P4.x * sin(LeafTipHA) / sin(180deg – LeafStemHA – LeafTipHA);
    P5 = rotate_xy([P5r,0.0mm],LeafStemHA);
    P6 = rotate_xy(P4,LeafStemAngle);
    t2 = pow(tan(-LeafTipHA),2);
    a = 1 + t2;
    b = -2 * t2 * P4.x;
    c = t2 * pow(P4.x,2) – pow(P3.x,2);
    xp = (-b + sqrt(pow(b,2) – 4*a*c))/(2*a);
    xn = (-b – sqrt(pow(b,2) – 4*a*c))/(2*a);
    y = (xp – P4.x)*tan(-LeafTipHA);
    // message("p: ",xp," n: ",xn," y: ",y);
    P4a = [xp,y];
    P6a = rotate_xy(P4a,LeafStemAngle – 2*atan(P4a.y,P4a.x));
    if (FALSE) {
    message("P0: ",P0);
    message("P1: ",P1);
    message("P2: ",P2);
    message("P3: ",P3);
    message("P4: ",P4);
    message("P4a: ",P4a);
    message("P5: ",P5);
    message("P6: ",P6);
    message("P6a: ",P6a);
    }
    // Construct paths
    LeafPoints = {P1,P2,P3,[P2.x,-P2.y],[P1.x,-P1.y]};
    if (P0 != P1) {
    StemArc = varc_ccw(P1 – [P1.x,-P1.y],LeafID/2);
    StemArc += [P1.x,-P1.y];
    LeafPoints += StemArc;
    }
    RimChord = length(P4a – P6a);
    RimThick = OuterDia/2 – Sash – length(P5);
    RimPoints = {P4a,P5,P6a};
    RimArc = varc_cw(P4a – P6a,P4a.x);
    RimArc += P6a;
    RimPoints += RimArc;
    //— Lay out the frame
    linecolor(0xff0000);
    layer("Frame");
    if (CenterDia) {
    goto([CenterDia/2,0mm]);
    circle_cw([0mm,0mm]);
    }
    repeat(NumLeaves;i) {
    a = (i-1)*LeafStemAngle;
    tracepath(rotate_xy(LeafPoints,a));
    }
    repeat(NumLeaves;i) {
    a = (i-1)*LeafStemAngle;
    tracepath(rotate_xy(RimPoints,a));
    }
    linecolor(0xff0000);
    goto([OuterDia/2,0]);
    circle_cw([0mm,0mm]);

  • Acrylic Coasters: Edge Finishing, Round 4

    Acrylic Coasters: Edge Finishing, Round 4

    Lacking a 4-jaw chuck for the lathe, this should suffice:

    Coaster Epoxy Rim - chuck-in-chuck setup
    Coaster Epoxy Rim – chuck-in-chuck setup

    Which is just the Sherline 4-jaw chuck chucked in the lathe’s 3-jaw chuck, with both chuck Jaw 1 positions lined up and marked on the acrylic disk fixture. The picture is a recreation set up after the fact, because I lack a good picture of the overall scene.

    Now it’s easy enough to center the fixture, stick the coaster in place with reasonable accuracy, then tweak the Sherline chuck to center the coaster:

    Coaster Epoxy Rim - turning setup
    Coaster Epoxy Rim – turning setup

    Because the bottom layer is a laser-cut disk, eyeballometrically aligning its edge to a simple pointer worked surprisingly well:

    Coaster Epoxy Rim - locating mirror edge
    Coaster Epoxy Rim – locating mirror edge

    Turning the OD down to match the bottom disk meant I could finally get decent results with zero drama:

    Coaster Epoxy Rim - turned samples
    Coaster Epoxy Rim – turned samples

    From the bottom, this one has a 3 mm mirror, the 3 mm fluorescent green frame + petals, and a 1.6 mm top sheet:

    Coaster Epoxy Rim - turned 6 petal mirror
    Coaster Epoxy Rim – turned 6 petal mirror

    This one has a 3M double-sided tape with low-surface-energy adhesive layers between the mirror and the fluorescent blue frame + petal, with epoxy between the top layer and the frame.

    Coaster Epoxy Rim - turned 4 petal
    Coaster Epoxy Rim – turned 4 petal

    If I never tell anybody, they’ll think the slightly granular look of the tape was deliberate; it looks OK to me.

    And, for completeness, the crash test dummy from the start of this adventure:

    Coaster Epoxy Rim - turned 6 petal black
    Coaster Epoxy Rim – turned 6 petal black

    I don’t know how to avoid the bubbles, as the usual torch-the-top and pull-a-vacuum techniques pop bubbles at the epoxy-air interface. These bubbles are trapped under the top acrylic sheet, even though I was rather painstaking about easing the layer down from one side to the other while chasing bubbles along.

    Maybe I can define bubbles as Part of the Art?

    Definitely fancier than chipboard, although not nearly as absorbent.

  • Acrylic Coasters: Edge Finishing, Round 3

    Acrylic Coasters: Edge Finishing, Round 3

    Although I could turn the coaster fixture’s OD, the lathe jaws are slightly longer than the fixture is thick:

    Coaster Epoxy Rim - turning fixture rim
    Coaster Epoxy Rim – turning fixture rim

    So the fixture needs a spacer:

    Coaster Epoxy Rim - cutting chuck spacer
    Coaster Epoxy Rim – cutting chuck spacer

    The ID is bigger and the OD is smaller than the fixture, so it won’t get in the way of further proceedings:

    Coaster Epoxy Rim - 3-jaw lathe setup
    Coaster Epoxy Rim – 3-jaw lathe setup

    The pad on the live center came from the cookie cut from the fixture, with a just slightly off-center 3 mm hole poked into it to hold the point away from the coaster.

    A ring of carpet tape on the fixture provides traction holding the coaster in place:

    Coaster Epoxy Rim - carpet tape
    Coaster Epoxy Rim – carpet tape

    That turned out to be more trouble than it was worth; scissoring a pair of strips to fit the OD works just fine.

    In any event, the live center applies enough pressure to keep the adhesive happy.

    The fixture disk is sacrificial, so it now has a notch around its front face where the cutter cleared the coaster.

    Although I intended to shim the fixture against the chuck jaws to center the coaster, my first attempt at manually centering the thing on the fixture was Close Enough™ that I just turned the OD to see how well the whole process worked:

    Coaster Epoxy Rim - turned 6 petal black
    Coaster Epoxy Rim – turned 6 petal black

    The edge finish is arguably not Good Enough™, but it looks much better in person. In particular, the difference between the transparent acrylic top layer and the black acrylic frame around the petals is much more prominent in the photo, perhaps due to scatter from the overhead desk light.

    This was the original crash test dummy acrylic coaster, so more care will be in order for the next set. In particular, shimming the fixture requires removing and replacing it for each adjustment, which can easily become a non-converging process.

    Next up: I like little chucks

  • Acrylic Coasters: Edge Finishing, Round 2

    Acrylic Coasters: Edge Finishing, Round 2

    Because the Sherline mill can’t cut all the way around a 4 inch OD coaster clamped to its table, I set up the 4-jaw chuck on the rotary table and centered the nicely round fixture:

    Coaster Epoxy Rim - centering fixture plate
    Coaster Epoxy Rim – centering fixture plate

    Admittedly, the centering need not be so precise, but practice makes perfect.

    A few strips of double-stick tape affixed the test coaster, with too many clamps applied to settle it in place:

    Coaster Epoxy Rim - Sherline clamp setup
    Coaster Epoxy Rim – Sherline clamp setup

    A few sissy cuts demonstrated the tape lacked sufficient stickiness to hold the coaster in place against the milling cutter’s uplift. I managed to mill most of the perimeter with those clamps in place, moving each one from just ahead of the cutter to just behind the cutter.

    That way lies both madness and organic damage.

    There are better tapes and better adhesives, all trading off a really sticky fixture against difficulty extracting an undamaged part.

    A more complex circular fixture with built-in mechanical edge clamps extending around a major part of the perimeter seems like entirely too much of a diversion for a couple of obscene-gerund coasters.

    A live center in a lathe tailstock applies pressure in exactly the right place to hold a circular object against a fixture while slicing off the entire perimeter, with the only problem being centering the object.

    Maybe shimming the fixture against one chuck jaw will suffice?

  • Acrylic Coasters: Edge Finishing, Round 1

    Acrylic Coasters: Edge Finishing, Round 1

    Assembling acrylic pieces inside an epoxy-filled frame produces nice results:

    Cut Acrylic Coaster - bottom
    Cut Acrylic Coaster – bottom

    The gotcha: epoxy oozes from between the layers to form a slobbery edge.

    I tried introducing a similar coaster to Mr Disk Sander with reasonable results:

    Coaster Epoxy Rim - disk sanded rim
    Coaster Epoxy Rim – disk sanded rim

    The coaster on the bottom has its original generous epoxy slobber around the acrylic disks.

    Assembling the layers inside a mold seems fraught with messiness, particularly if I eventually want to get it out of the mold.

    Using a finer abrasive disk would certainly help, but the whole process requires intense concentration and is utterly unforgiving of mistakes.

    I figured I could attach the coaster to a lathe fixture and turn the rim, so I made a fixture from scrap acrylic:

    Coaster Epoxy Rim - cutting fixture plate
    Coaster Epoxy Rim – cutting fixture plate

    The lathe chuck inside jaws fit inside the hole and I set up to turn the OD to a nice even diameter:

    Coaster Epoxy Rim - turning fixture rim
    Coaster Epoxy Rim – turning fixture rim

    The fixture sat flush against the middle step of the jaws with plenty of clearance from the outer step, so I could turn the OD without whacking the carbide insert.

    I planned to grab the OD and turn the ID to a (reasonably) concentric finish, but the outer jaws have an absolute diameter limit a few millimeters less than the 4 inch = 101.4 mm coaster OD.

    After some increasingly desperate attempts, I concluded that, lacking a 4-jaw lathe chuck, there was no way to mount the coaster on the fixture and have it sit it even approximately centered on the spindle axis.

    I do, however, have a 4-jaw chuck for the Sherline mill, normally used with the rotary table.

    Next up: Round 2.

  • OMTech 60 W Laser: Mirror Cleaning

    OMTech 60 W Laser: Mirror Cleaning

    While I was puttering around inside the laser cabinet, I figured it was time to check the mirrors for cleanliness. The first two mirrors looked fine, but Mirror 3 needed help:

    OMTech 60W laser mirror 3 cleaning - before
    OMTech 60W laser mirror 3 cleaning – before

    It turns out OMTech used molybdenum rather than gold-plated silicon or copper, trading off some reflectivity to reduce damage from over-enthusiastic cleaning with a vigorous circular motion.

    A first pass with an optical wipe removed most of the crud:

    OMTech 60W laser mirror 3 cleaning - during
    OMTech 60W laser mirror 3 cleaning – during

    Gentle touch-up with a little more isopropyl alcohol cleared the rest:

    OMTech 60W laser mirror 3 cleaning - after
    OMTech 60W laser mirror 3 cleaning – after

    The focus lens required similar attention, but there is no way to get meaningful pictures of a transparent lens.

    Realigning the mirrors went well (top before, middle during, lower after):

    Beam Alignment Targets- 2022-08-06
    Beam Alignment Targets- 2022-08-06

    The diagonal results at Mirror 3 show the XY axes aren’t quite square, but AFAICT it’s close enough. The rightmost tape shows good beam centering in the nozzle and the Focus target shows excellent Z alignment over about 50 mm of travel.

    Done!

  • Layered Paper Coaster

    Layered Paper Coaster

    A long-forgotten pad of Art Paper in assorted colors came to the surface:

    Layered Coaster - tweaked
    Layered Coaster – tweaked

    An angled view shows off the layering a little better:

    Layered coaster - side view
    Layered coaster – side view

    Done manually with LightBurn’s Offset tool: shrink the frame’s interior openings (which lie outside the frame) by 1 mm per step, then cut each shape into a different color. The black layer is a complete disk, stuck atop a plain chipboard disk for stiffening.

    In the cold light of day, I think I offset the green layer by 2 mm.

    It’s not a particularly useful coaster, because you want a flat surface under your drink, but it does look pretty. Nowhere close to that good, but I like it.

    The next time around, I’ll automate the process by stepping the sash width by 1 mm and saving each SVG image separately.