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

General-purpose computers doing something specific

  • Under-shelf Kitchen Light Bracket

    Under-shelf Kitchen Light Bracket

    Quite a while ago I’d added another LED strip to the under-cabinet light array, because the little cutting boards & suchlike on a wire shelf blocked the light, but fastened it in place with ugly wire ties.

    Finally I found a Round Tuit on the desk for brackets mounting the strip directly to the shelf:

    Kitchen Light Bracket - shelf blocks - solid model
    Kitchen Light Bracket – shelf blocks – solid model

    Ram a pair of brass inserts in the holes, screw the strip in place, snap the brackets between the wires, and it’s much better:

    Kitchen Light Bracket - installed
    Kitchen Light Bracket – installed

    Stipulated: those wire ends look awful. Fortunately, they’re normally hidden by the cutting boards and suchlike on the shelf.

    Although it looks precarious, the rounded sides (seem to) have enough grip on the wires to hold the LED strip in place. We’ll see how well that works in practice, but the idea was to avoid anything sticking up above the wires to collide with the stuff on the shelf.

    The blocks emerge from a chunk of code glommed onto the original OpenSCAD program:

    ShelfWireDia = 3.2;
    ShelfWireOC = 1*inch;
    StrutWireDia = 6.3;
    
    ShelfBlock = [ShelfWireOC,LEDEndBlock.y,(0.8*ShelfWireDia + StrutWireDia/2)/cos(180/8)];
    echo(ShelfBlock=ShelfBlock);
    
    LEDHoleOffset = [ShelfBlock.x/2 - (6.0 + ShelfWireDia/2),6.0];  // from Y+ and X±
    LEDHoleDia = 3.0;
    
    ID = 0;
    OD = 1;
    
    M3Insert = [3.0,4.0,4.2];   // short M3 knurled insert
    
    <<< snippage >>>
    
    module ShelfBlocks(Side=1) {
    
      difference() {
        translate([0,ShelfBlock.y/2,ShelfBlock.z/2])
          cube(ShelfBlock,center=true);
       translate([Side*LEDHoleOffset.x,ShelfBlock.y - LEDHoleOffset.y,-Protrusion])
          rotate(180/8)
            PolyCyl(M3Insert[OD],M3Insert[LENGTH] + 2*ThreadThick,8);
        translate([-2*ShelfBlock.x,-StrutWireDia/4,0])
          rotate([0,90,0]) rotate(180/8)
            PolyCyl(StrutWireDia,4*ShelfBlock.x,8);
        for (i=[-1,1])
          translate([i*ShelfWireOC/2,-ShelfBlock.y,(StrutWireDia/2 + ShelfWireDia/2)/cos(180/8)])
            rotate([-90,0,0]) // rotate(180/8)
              PolyCyl(ShelfWireDia,3*ShelfBlock.y,8);
      }
    }
    
    <<< snippage >>>
    
    if (Layout == "ShelfBlocks")
      for (i=[-1,1])
        translate([i*(ShelfBlock.x/2 + 3.0),0,0])
          ShelfBlocks(i);
    
    

    Should’a done that years ago …

  • Layered Paper: Einsteins

    Layered Paper: Einsteins

    Go to the source and bring back a suitable number of tiled einsteins:

    Einstein tiling
    Einstein tiling

    Import the bitmap into LightBurn, fiddle with the tracing until it lays down two lines along each border, apply a 1 mm inset to all the tiles, then scale & crop & delete to fit a 170 mm square:

    Einsteins - LB paper - top layer
    Einsteins – LB paper – top layer

    Cut one of those sheets, tape it to a sheet of white paper, fire up a calculator, generate a random number, write the first digit in the upper-left tile, and iterate to fill in all the tiles.

    Duplicate that layout and delete all the tiles marked with a zero to get the next layer.

    Iterate for all ten layers:

    Einsteins - LB paper cuts
    Einsteins – LB paper cuts

    Set up the fixture, do the Print-and-Cut alignment, then cut all the layers with different colors:

    Layered Paper cutting fixture - in use
    Layered Paper cutting fixture – in use

    Assemble the layers with some stick adhesive:

    Layered Paper - Einsteins
    Layered Paper – Einsteins

    Frame it and admire:

    Layered Paper - Einsteins
    Layered Paper – Einsteins

    It’s way busier than the quilt blocks, but I like it.

  • Layered Paper: Chimney Swallows Block

    Layered Paper: Chimney Swallows Block

    The Chimney Swallows block from page 128 of Beyer’s book:

    Chimney Swallows - Beyer 128
    Chimney Swallows – Beyer 128

    The tool (blue & orange) and top cut (red) layers:

    Chimney Swallows - LB layout
    Chimney Swallows – LB layout

    The long radial blue tool lines simplified selecting them when mirroring / duplicating the cut polygons around their symmetries. The orange tool circles aligned various midpoints / vertices / features during construction.

    The inward curve along the outer edge started as a triangle with a node at about the middle of the curve. Deleting that node left the remaining two sides overlapped, but dragging one of them to match the curve worked OK. There’s probably a better way.

    That curve defines the outer edges of the shapes along it, so I drew polygons from the corner intersections and dragged the outer edge to match the curve at high zoom.

    The shape remains selected after dragging the side, which meant I could immediately apply a 1 mm inset to create the cut lines.

    To my surprise, the swallow bodies are straight-sided polygons!

    After taking advantage of all the symmetries, knock out the shapes defining each layer:

    Chimney Swallows - LB paper cuts
    Chimney Swallows – LB paper cuts

    The swallows look like F-117 Nighthawks to me:

    Layered Paper - Chimney Swallows - Beyer 128
    Layered Paper – Chimney Swallows – Beyer 128

    Maybe I have the colors wrong:

    Layered Paper - Chimney Swallows - Beyer 128
    Layered Paper – Chimney Swallows – Beyer 128

    Fly away!

  • Layered Paper: Pyrotechnics Block

    Layered Paper: Pyrotechnics Block

    Starting from the Pyrotechnics quilt block on page 132 of Beyer’s book:

    Pyrotechnics - Beyer 132
    Pyrotechnics – Beyer 132

    It looks more like flowers than fireworks to me, but there’s no accounting for taste.

    Deploy enough 2 mm circles to catch the flower’s radial symmetry:

    Pyrotechnics - LB layout
    Pyrotechnics – LB layout

    During the process of building the layout, a big circle positioned the cups at the base of the flowers, another delineated the joint between the cups and the petals, and more little circles caught the intersection of those circles with the petals. All that was for visualization and positioning, as you only draw one flower shape, then duplicate it around the pattern.

    Although the cups and petals are surely circular arcs, it’s easier to draw a closed line triangle around the intersections, then pull the midpoint of a line into an arc (Bezier curve!) matching the pattern Closely Enough™ at high zoom. Because the arcs end at the intersection points based on circular arrays of points, they’ll all match up when they’re duplicated around the pattern; in fact, you need only one side of one petal, mirror it around the midline, and away you go.

    Then the magic happens:

    Pyrotechnics - LB tool insets
    Pyrotechnics – LB tool insets

    Which is easier to see without the original shapes:

    Pyrotechnics - LB insets
    Pyrotechnics – LB insets

    Pick one of the closed shapes, apply the Offset tool to shrink it by 1 mm, duplicate as needed, and you get the outlines of the regions to cut with 2 mm between them. Plunk those shapes on a cutting layer, add the outer frame with locating holes for the fixture, and it’s ready to cut the top layer from black paper:

    Pyrotechnics - LB cuts
    Pyrotechnics – LB cuts

    Knock out the cuts for each sheet of paper in the stack:

    Pyrotechnics - LB paper cuts
    Pyrotechnics – LB paper cuts

    Then Fire The Laser™:

    Layered Paper - Pyrotechnics - Beyer 132
    Layered Paper – Pyrotechnics – Beyer 132

    That was a nearly random selection of colors, but it’s hard to go wrong.

    IMO, a frame makes it look even better:

    Layered Paper - Pyrotechnics - Beyer 132
    Layered Paper – Pyrotechnics – Beyer 132

    This could be Art.

  • Layered Paper: Mariner’s Compass Block

    Layered Paper: Mariner’s Compass Block

    The Mariner’s Compass pattern on page 133 of Jinny Beyer’s The Quilter’s Album of Blocks and Borders:

    Mariners Compass - Beyer 133
    Mariners Compass – Beyer 133

    Becomes a laser-cut layered paper design:

    Layered Paper - Mariners Compass - Beyer 133
    Layered Paper – Mariners Compass – Beyer 133

    A face-on view with different colors:

    Layered Paper - Mariners Compass - Beyer 133
    Layered Paper – Mariners Compass – Beyer 133

    This seemed like an appropriate use for the stack (well, several stacks) of colored paper I’ve accumulated over the years.

    The illustration in the book is apparently a photograph of a quilt block Beyer put together, so I had to reverse-engineer the Platonic Ideal Block from the image:

    Mariners Compass - minimal shapes - LB layout
    Mariners Compass – minimal shapes – LB layout

    Fortunately, after a bit of fiddling around, I could take advantage of the radial symmetry to duplicate most of the fundamental shapes, so producing the layout really wasn’t all that difficult:

    Mariners Compass - LB layout
    Mariners Compass – LB layout

    The blue tooling lines (upper left) run along the centers of what would be seams in a fabric block, with 2 mm circles defining the endpoints for ease in snapping the lines.

    This being the first block I attempted, I did it all wrong. LightBurn can form the convex hull over a group of shapes, so I just selected pairs of circles, created the hull, and iterated for the minimal shapes required to generate the whole design. That produces the basic layout, but what you really want is the collection of shapes between those hulls that define the actual cutouts, which appears in the lower left image.

    Don’t do it that way, as explained tomorrow with a different block.

    With all the shapes in hand, you duplicate them for all the paper layers you need, removing the shapes corresponding to the color of each sheet. Sheets lower in the stack have fewer cutouts, with the pattern in the lower right being second from the bottom.

    The four holes in the corners fit over rivnuts in a fixture aligning the sheets in a tidy stack:

    Layered Paper - alignment fixture
    Layered Paper – alignment fixture

    Yes, that’s a blooper sheet.

    All in all, it’s easier than I expected to get nice results.

  • Gelatin Capsule Filler Plate

    Gelatin Capsule Filler Plate

    Being a guy of a certain age with a diagnosis of Low Bone Density, I must increase my calcium intake. Rather than add a few hundred calories a day of calcium-rich food that my waistline does not need, I’ll see what adding 600 mg of calcium citrate can do.

    Being a guy of a certain type, I prefer to fill my own capsules, which of course involves Quality Shop Time:

    Gelatin 000 Capsule Fill Plate - cutting
    Gelatin 000 Capsule Fill Plate – cutting

    Quite some years ago, for reasons not relevant here, I acquired several of what were called “manual capsule filling machines” from the usual online sources. During the ensuing years, such devices have fallen under the purview of the DEA and vanished from the import market, leaving (AFAICT) one USA-ian supplier.

    The key difference between “machines” for different capsule sizes is the plate holding the capsule bodies:

    Gelatin 000 Capsule Fill Plate - installed
    Gelatin 000 Capsule Fill Plate – installed

    A complete machine includes three other capsule-size-related parts:

    • A plate holding the caps
    • A plate with conical holes used to shake caps & bodies into their respective plates
    • A guide plate helping mate caps with bodies

    In normal use, you put the “shake plate” on the body or cap plate, dump a pile into it, and shake until most of the caps / bodies fall into the holes. Then you manually insert the rest, invert any that fell in backwards, and generally mess around until they’re all properly oriented in their sockets. After filling the capsules, you put the cap + guide plates atop the bodies, press down firmly, and (ideally) produce 100 filled and sealed capsules.

    It turns out Size 000 capsules are sufficiently chonky that I have no trouble capping the bodies by hand without those other parts, so making just the body plate seemed Good Enough™. The story might be different for Size 1 capsules.

    The external dimensions and screw holes match the original plate, so this one fits the same base:

    Gelatin 000 capsule plate - LB layout
    Gelatin 000 capsule plate – LB layout

    Make one plate and four spacing clips from 6 (-ish) mm acrylic.

    If you can think of anything to do with 100 3/8 inch cylinders of 1/4 inch acrylic, clue me in.

    Size 000 bodies are close enough to 3/8 inch that I cleaned up the holes with a step drill for a nicer fit. Perhaps making the plate from 3 mm acrylic would produce better results.

    Four springs around the screws in the corners support the plate to allow pressing the caps in place. I adjusted the screws to put the top of the plate at exactly the height of the bodies above the blue base place, producing a smooth surface for scraping suspicious white powder into the bodies:

    Gelatin 000 Capsule Fill Plate - filled
    Gelatin 000 Capsule Fill Plate – filled

    Iterate filling and tamping until the capsule contents are firm-but-not-overstuffed, then press the plate downward and secure it with the spacer clips:

    Gelatin 000 Capsule Fill Plate - capped
    Gelatin 000 Capsule Fill Plate – capped

    The clips hold the plate at the proper distance to let the caps slip over the bodies and lock in place. This is tedious, but much faster than doing the entire process on individual capsules one-by-one.

    With the caps locked in place, flip the whole thing above a bowl, remove the clips, press the plate against the base, and 100 finished capsules shower into the bowl.

    You could build a complete filler without having the blue base plate & springs, but I’ll leave that project to your imagination.

    The LightBurn 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.

    No, I am not making one for you. :grin:

  • Laser Cutter: Print-and-Cut Alignment Accuracy

    Laser Cutter: Print-and-Cut Alignment Accuracy

    Up to this point I’ve been making mirror alignment targets entirely on the laser cutter to ensure accurate alignment:

    OMTech 60W laser - beam alignment - focus detail - 2022-03-22
    OMTech 60W laser – beam alignment – focus detail – 2022-03-22

    While that works fine, using Dot Mode takes basically forever to chew its way through any nontrivial number of targets.

    Now that I have more familiarity with LightBurn’s Print-and-Cut feature, I tried printing the graticules, aligning the sheet, then laser-cutting just the perimeters:

    Laser Beam Alignment Targets - cut tabs - smoothed
    Laser Beam Alignment Targets – cut tabs – smoothed

    The smaller targets fit neatly into the hole perpendicular to the beam:

    OMTech CO2 Mirror 2 mount - Y Z screws
    OMTech CO2 Mirror 2 mount – Y Z screws

    The larger ones sit flush on the mirrors at 45° to the beam, so stretching the horizontal scale by 1.414 = √2 makes each tick mark correspond to 1 mm of perpendicular beam offset.

    All of which worked surprisingly well, with some caveats.

    The first gotcha: ordinary consumer-grade inkjet printers do not have CNC accuracy. The corner targets are on 150 mm horizontal centers and 240 mm vertical centers in the LightBurn layout, but my Epson ET-3830 printer put them on 150×241.3 mm centers. This isn’t unexpected, particularly for laser printers, but it means you must use LightBurn’s scaled version of the P-n-Cut alignment.

    I used the upper-right and lower-left targets for the P-n-Cut alignment step, confirming the positioning with a laser pulse putting a tiny hole in the paper:

    Print-and-Cut - target accuracy
    Print-and-Cut – target accuracy

    The lines are 0.5 mm wide and the inner circle is 2 mm in diameter, so my alignment at the upper right is as good as it’s gonna get and the lower left is off by maybe 0.3 mm. While it may be possible to be more accurate, I think half a millimeter is a reasonable error budget for targeting accuracy.

    The laser-perforated circles should overlay the inner printed circles after LightBurn applies the P-n-C corrections. That they obviously do not indicates the effect of the small target errors. In any event, the maximum error seems to be 1 mm, which gives you an idea of just how precise P-n-C might be.

    The perimeter laser cuts are off by about the same amount & direction as the dotted circle in the adjacent target:

    Print-and-Cut - perimeter matching
    Print-and-Cut – perimeter matching

    Overall, errors around 1 mm seem possible with careful attention to detail, but expecting anything better than a few millimeters is probably unreasonable, particularly for layouts larger than a Letter size page.

    Works for me, though!

    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.
    Loading
    Sorry, something went wrong. Reload?
    Sorry, we cannot display this file.
    Sorry, this file is invalid so it cannot be displayed.