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

  • Window Film Mullion Filler

    Window Film Mullion Filler

    The living room windows suffer from all the thermal problems you might expect in a late-1960s house, despite the slightly more recent storm panes, so I’ve been adding insulating film during the cold season. This works surprisingly well, although the tape holding the film tends to lose its grip in the angle between the (real, not pretend!) mullions and the window sill.

    This year I added triangular fillers to ease the corner:

    LR Window Film - mullion filler
    LR Window Film – mullion filler

    They’re Desk Signs from boxes.py, with the bottoms angled by 2.5° to compensate for the slightly misaligned sill and a small cutout clearing the paint accumulation in the corner:

    LR Window mullion filler - LightBurn layout
    LR Window mullion filler – LightBurn layout

    A strip of tape down each side of the mullion and across the filler anchors the film, producing a slightly baggy fit. Next year I’ll use only one strip down the middle.

  • Layered Paper: Whimsical Perching Bird

    Layered Paper: Whimsical Perching Bird

    Start by scanning a page from the (©2013 paper!) Whimsical Designs Coloring Book and opening it in GIMP:

    Whimsical Perching Bird - outline
    Whimsical Perching Bird – outline

    Mary says the book is intended for appliqué quilting, which seems close enough to layered paper for my simple purposes.

    Select the black lines and grow the selection to about 1.5 mm wide:

    Whimsical Perching Bird - mask selection
    Whimsical Perching Bird – mask selection

    After some editing, convert the selection to a path, then save the path as SVG to create the Black Mask layer.

    Clear the selection and bucket-fill the outlines with cheerful colors:

    Whimsical Perching Bird - colored
    Whimsical Perching Bird – colored

    If you’re fussy, you might devote a sheet of black paper to the eye, but I just dabbed a dot of black marker.

    Load into LightBurn and knock out paths on successive layers:

    Whimsical Perching Bird - LightBurn layout
    Whimsical Perching Bird – LightBurn layout

    Stack sheets of colored paper in the appropriate order, Fire The Laser, paste the layers together, and frame:

    Whimsical Perching Bird - framed
    Whimsical Perching Bird – framed

    After working through the Cornell Painted Warblers, it really was that easy!

    Stipulated: I cannot draw even simple Art, but I enjoy my time in the engine room.

  • Furnace Water Fill Valve Refurbishment

    Furnace Water Fill Valve Refurbishment

    The water fill valve (a.k.a. water shutoff valve) for the gas furnace is inconveniently located behind the furnace and water heater:

    Furnace fill valve location
    Furnace fill valve location

    After a few days of dripping Kroil penetrating oil on the valve body threads, the Greater Adjustable Wrench eased it just enough to convince me it would come apart, whereupon a search through the Big Box o’ Tubing disgorged a length of flexy silicone tube snugly fitting the valve drain port.

    With the water turned off downstream of the house filter and the pipes depressurized, the tube directed most of the water into a bucket perched atop the furnace, with a scrap towel catching most of the remainder while unscrewing the valve. I clamped a rubber disk over the body while replacing the washer:

    Furnace fill valve - ancient washer
    Furnace fill valve – ancient washer

    Maybe that washer isn’t 60-some years old, but it’s definitely well beyond its Best Used By date. For the record, the fill valve uses the same 3/8L washer as the zone drain valves.

    While I had it apart, I replaced the gasket, which was of course different from the drain valves:

    Furnace fill valve - gasket
    Furnace fill valve – gasket

    That was 25.4 mm OD, 22.7 ID, for a measured 1.3 mm width. The recess machined into the valve body limits the OD and the ID could go down to 22.0 mm. The gasket sheet is 0.8 mm thick, which seems to work well enough.

    Reassemble in reverse order, wipe up various spills, turn the fill valve on to repressurize the furnace, close the valve, and the water pressure now remains at 12 psi as it should.

    To the best of my knowledge & belief, every hot water baseboard furnace in all of our houses has operated with the water fill valve open: the pressure reducing valve sees normal water pressure upstream and regulates the boiler pressure, with a reverse flow check valve preventing backflow into the house plumbing as needed.

    The Bell & Gossett instructions for the pressure reducing valve say, clearly and specifically, without asterisks or evasions, that you fill the furnace / boiler to the 12 psi regulated pressure, then close the fill valve. The furnace runs as a closed system, with the expansion tank keeping the pressure more-or-less constant at 12 psi.

    It’s possible the pressure reducing valve is gradually failing, but it doesn’t matter with the water fill valve closed.

  • Layered Paper: Cutting and Assembling the Cornell Painted Warblers

    Layered Paper: Cutting and Assembling the Cornell Painted Warblers

    With all the layers laid out, duplicating and plunking one in the middle of the LightBurn workspace looks like this:

    Page 4 - Layer 1 - Lightburn centered layout
    Page 4 – Layer 1 – Lightburn centered layout

    In Absolute Coordinates mode the laser will cut it at the center of the platform, so put a sheet right there:

    Print vs cut - 100.3pct plain paper - setup
    Print vs cut – 100.3pct plain paper – setup

    The Position Laser tool puts the laser head at a selected location in the design, with the picture showing it at the center of the upper right target. The trick is to slide the paper on the platform to put that target directly under the red-dot pointer:

    Print vs cut - 100.3pct plain paper - UR align
    Print vs cut – 100.3pct plain paper – UR align

    I occasionally fire a test pulse to verify the CO₂ laser hits the red dot:

    Red dot vs printed target vs laser spot alignment
    Red dot vs printed target vs laser spot alignment

    Do the same for the target in the lower left corner, rotating the paper around the upper right target, and iterating until both targets match.

    Because the printer does not produce accurately sized output, this can happen:

    Print vs cut - 100.3pct plain paper - LR
    Print vs cut – 100.3pct plain paper – LR

    You’ll get a hint of the problem when it’s impossible to put the targets under the the laser head at the lower targets, although it may look close enough to work.

    That offset was on plain paper with the output scaled by 100.3% vertically. Applying the same scaling (to the Happy Bird picture, but with the same page template) and printing on Art Cover paper produces this result:

    Print vs cut - 100.3pct Art Cover - LR
    Print vs cut – 100.3pct Art Cover – LR

    Eventually, I can find a suitable scale factor to make the printed image come out right and the cuts align properly:

    Page 5 - Test piece - as cut
    Page 5 – Test piece – as cut

    Those tenuous paper strands show why I couldn’t use the Letter page fixture and had to cut the sheets directly on the honeycomb: the weight of the uncut sections distorted the remaining sheet beyond belief. The squat silver cylinders in the pictures are neodymium magnets holding the paper flat on the honeycomb.

    All the other layers have trivial positioning, because the cuts need not line up with anything on the sheet:

    Layered paper alignment
    Layered paper alignment

    Just frame the first layout, center the sheet around it, set the MDF stops to kiss the edges of the paper, and all the other sheets will come out just fine.

    One side effect of all this cutting is the happiest scrap bin ever:

    Happy Laser Scrap Bin
    Happy Laser Scrap Bin

    With all the layers cut out, assemble them face-down in the gluing fixture, align the black mask on the front by hand, put the stack into a suitable frame, and it’s ready to show off:

    Cornell Warblers - page 4
    Cornell Warblers – page 4

    That wasn’t exactly easy, but next time I can make different mistakes.

  • Layered Paper: Aligning and Layering the Cornell Painted Warblers

    Layered Paper: Aligning and Layering the Cornell Painted Warblers

    Processing the original PDF of a Cornell Painted Warbler produces a PNG image:

    Page 4 - butterfly unmasked
    Page 4 – butterfly unmasked

    And an SVG file with shapes matching the regions to be cut out:

    Page 4 - black mask
    Page 4 – black mask

    Both of those derive from the same PDF page, cropped to emphasize the bird, then scaled to match the 172×220 mm rectangle in the middle of the LightBurn template corresponding to the alignment fixture:

    Printed sheet template - 8×10 - 172x220
    Printed sheet template – 8×10 – 172×220

    A key point: the blue outline around the image must be centered within the red outline marking the sheet cutout, because that dramatically simplifies the overall alignment process.

    Protip: Crop the image in GIMP with a fixed aspect ratio of 172:220 before scaling the result to match the 172×220 frame, then derive both the PNG and SVG from the result.

    The alert reader will recall the SVG shapes exclude the 6 pixel = 0.5 mm border closing the outlines, so the overall SVG size is 1 mm smaller than the PNG image. This will not be a problem, for reasons to become obvious.

    Because Inkscape can handle both SVG shapes and color PNG images (LightBurn turns them into grayscale):

    • Export the LightBurn template as an SVG
    • Open with Inkscape
    • Make the Tool layer elements visible
    • Import the PNG

    Without further ado, the PNG is automagically centered in both the blue and red rectangles:

    Page 4 - Layer 1 - Inkscape print layout
    Page 4 – Layer 1 – Inkscape print layout

    Print it, measure the vertical and horizontal distances between the corner target centers, scale the overall image to make the printed result come out exactly right, then iterate until satisfied. Scaling it 100.3% vertically worked for what’s called Art Cover paper printed with Stationery High Quality in an Epson ET-3830 printer. Your mileage will be different.

    Protip: Save the unscaled page as an Inkscape SVG, because the scale factor(s) depend on the paper / print quality setting / moon phase and you will print it several times under different conditions.

    In LightBurn:

    • Tweak a copy of the sheet template to eliminate the corner holes & suchlike
    • Import the Black Mask SVG into LightBurn
    • Drag-n-drop it at the center of the template
    • Set the speed / power to cut black Art Cover paper

    Which becomes the Black Mask layer:

    Page 4 - Layer 0 - Lightburn layout
    Page 4 – Layer 0 – Lightburn layout

    The alert reader will note the slightly different template layout: it’s been undergoing continuous process improvement and I’m not re-capturing all the details.

    The Black Mask SVG contains all the shapes-to-be-cut, so it forms the basis for all the sheets under the top mask. Drag-n-drop a copy of the Black Mask SVG at the center of a copy of the template, ungroup it, delete the outlines of all the shapes on the printed layer, and set the speed / power for ordinary Art Cover paper:

    Page 4 - Layer 1 - Lightburn layout
    Page 4 – Layer 1 – Lightburn layout

    The shapes on each layer will be the same as the one above it, minus whatever shapes have the color of that layer. After you finish each layer, select all its shapes, duplicate them, drop them at the center of the next sheet template, and iterate.

    Or just set up a line of templates spaced (say) 240 mm apart using the Grid Array tool:

    Page 4 - All layers - LightBurn layout
    Page 4 – All layers – LightBurn layout

    If you’re so inclined, set up their binary layer number holes:

    Layered Paper cutting fixture - layer binary code
    Layered Paper cutting fixture – layer binary code

    Then:

    • Select the finished shapes in one layer
    • Duplicate them (Ctrl-D)
    • Use the Numeric Edits toolbar to subtract 240 mm from their current location
    • Which causes them to appear exactly centered in the next template to the right without any drag-n-drop action

    Because my CO₂ laser has a Ruida controller and homes in the rear-right corner:

    • X coordinates increase to the left
    • Y coordinates increase to the front

    You can get used to anything if you do it enough and your coordinates will likely be different.

    Protip: Adding a description of each layer’s contents / color will be of great assistance when you select the paper.

    The end result of all that will be a set of sheet layouts ready to cut:

    • Select one entire sheet template + bird shapes
    • Duplicate it with Ctrl-D
    • Center the dupe on the LightBurn workspace with P (not Ctrl-P, which will send it to your printer)

    The next piece of the puzzle: correctly aligning a Letter piece of paper with those shapes …

  • Layered Paper: Masking the Cornell Painted Warblers

    Layered Paper: Masking the Cornell Painted Warblers

    After getting better at aligning printed sheets for laser cuttery and learning how to use GIMP’s Path Edit tool, a pair of Cornell Painted Warblers emerged!

    We call this one “Happy Bird”:

    Cornell Warblers - page 5
    Cornell Warblers – page 5

    And his companion “Pensive Bird”:

    Cornell Warblers - page 4
    Cornell Warblers – page 4

    The page numbers refer to the PDF file containing the outlines of all six birds.

    The wing feathers and butterfly require finer resolution than the black mask layer allows, so the first layer is printed on white paper. I put the berries and nut-like objects on that layer, too, mostly to reduce the number of layers.

    After considerable fumbling, it turns out GIMP provides a straightforward way to create the outlines required for the top Black Mask, from which all the other layers descend.

    A closeup of Happy Bird’s head as imported into GIMP from the PDF at 300 DPI = 11.8 pixel/mm:

    Page 5 - PDF line - detail
    Page 5 – PDF line – detail

    Because the Cornell Warblers were intended as a paint-by-number project, the PDF has (gray) color numbers in (most of the) regions. Selecting the numbers with GIMP’s Select by Color tool and hitting Delete clears the region for Bucket Fill colors copied from the key sheet with the Color Picker tool:

    Page 5 - Inkscape print layout
    Page 5 – Inkscape print layout

    I cropped the images to emphasize the birds and scaled the result to fit the 8×10 inch frame size. The picture is 172×220 mm within the red 200×250 mm frame cut from Letter size sheets of Art Cover paper stock. The corner targets come into play while aligning the paper with the laser pattern.

    Creating the Black Mask layer also starts from the cropped / scaled image. Select the black lines by color, then Grow the selection by 7 pixels = 0.6 mm to make the selection about 1.5 mm wide:

    Page 5 - PDF line - 1.5mm selection
    Page 5 – PDF line – 1.5mm selection

    Use Quick Mask to edit the selection. For example, I reduced the eye to a cutout through the mask revealing the white spot on the printed layer:

    Page 5 - PDF line - inverted quick mask
    Page 5 – PDF line – inverted quick mask

    Eventually the selection will neatly bracket the borders between the colors:

    Page 5 - PDF line - fill colors - mask overlay
    Page 5 – PDF line – fill colors – mask overlay

    The black legs and feet must be edited down to their original size, as became obvious on the first iteration:

    Page 5 - Test piece - stack oblique view
    Page 5 – Test piece – stack oblique view

    The fixed-up Quick Mask looks like this:

    Page 5 - PDF line - selection - printed areas
    Page 5 – PDF line – selection – printed areas

    The mask includes a 6 pixel = 0.5 mm border line around the perimeter of the image which serves as the outer edge of the cut-out areas and helps match the selections to the image.

    The process of growing & tweaking the selection will create orphan pixels:

    Page 5 - PDF line - orphan pixel selection
    Page 5 – PDF line – orphan pixel selection

    Each orphan pixel becomes a tiny triangle when imported into LightBurn:

    Page 5 - PDF line - orphan pixel - LighBurn vectors
    Page 5 – PDF line – orphan pixel – LighBurn vectors

    You’ll first notice those when the laser hesitates while cutting the outlines, which may overcook the adjacent paper. I cannot reliably detect these other than by watching the laser, because a single pixel is simply too small to see on-screen at normal zoom sizes. You can delete them in the LightBurn file or, if you prefer a single source of truth, in GIMP to regenerate the whole thing.

    The end result of all this is a single, rather complex, Selection that you must convert into a Path, which you then export to an SVG file and import into LightBurn for laser cuttery.

    Next: Aligning and layering

  • HQ Sixteen: Improved Anchor

    HQ Sixteen: Improved Anchor

    The original anchor / weight keeping the HQ Sixteen from rolling away suffered a disastrous fall, so I conjured a much better-looking replacement from the vasty digital deep:

    HQ Sixteen - improved anchor
    HQ Sixteen – improved anchor

    The handle and fancy nut came from the deceased pepper mill, sitting on laser-cut acrylic in a 3D printed base, with a drawer liner disk peeking out from underneath.

    The orange disk in the solid model represents the steel slug harvested from the old anchor:

    HQ Sixteen Anchor - solid model - Show view
    HQ Sixteen Anchor – solid model – Show view

    A ring of hot-melt glue under the weight keeps it from rattling around in there, with the snug-fitting central post encouraging good positioning. I made the acrylic lid sit flush with the top of the base by the simple expedient of running another ring of glue around it, plunking the base + weight atop it on a flat surface, then taking a deep breath while the glue solidified. The nut & screw thus compress a solid stack of acrylic + glue + steel + glue + PETG-CF, rather than just parts flying in formation.

    The OpenSCAD source code also produces a pair of outlines for laser-cutting the adhesive sheet and acrylic, suitable for export to an SVG file:

    HQ Sixteen Anchor - solid model - cuts
    HQ Sixteen Anchor – solid model – cuts

    They’re offset inward by amounts appropriate for my CO₂ laser:

    if (Layout == "Cuts") {
      left(BaseOD/2 + Gap)
        offset(r=-1.0)
          circle(d=BaseOD);
      right(Cap[OD]/2 + Gap)
        offset(r=-0.2/2)
          projection()
            tube(1.0,id=Cap[ID],od=Cap[OD],anchor=BOTTOM);
    }
    

    It might be prudent to apply those offsets to the original outlines in LightBurn or whatever you use for lasering.

    The OpenSCAD source code as a GitHub Gist:

    // Anchor block for HQ Sixteen
    // Ed Nisley – KE4ZNU
    // 2026-09-29
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Cuts]
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    Gap = 10.0/2; // build platform minimum spacing
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 8*3*2*4;
    $fn=NumSides;
    // Sizes
    Screw = [5.5,25.5,5.0]; // 10-24 screw + washer holding it together
    Weight = [11.0,80.0,11.5]; // stamped steel slug
    Cap = [26.0,Weight[OD],5.5]; // acrylic disk with handle hole
    BaseFloor = 10.0;
    BaseOD = 90.0; // printed anchor
    Spacing = 25.0; // Show view separation
    //———-
    // Model things
    module Housing() {
    tube(Screw[LENGTH],id=Screw[OD],od=BaseOD,anchor=BOTTOM) position(TOP) {
    tube(Weight[LENGTH],id=Screw[ID],od=Weight[ID],anchor=BOTTOM); // weight bushing
    tube(BaseFloor – Screw[LENGTH],id=Screw[ID],od=BaseOD,anchor=BOTTOM) position(TOP)
    tube(Cap[LENGTH] + Weight[LENGTH],id=Cap[OD],od=BaseOD,anchor=BOTTOM);
    }
    }
    //———-
    // Build things
    if (Layout == "Show") {
    Housing();
    color("Orange",0.7)
    up(BaseFloor + Spacing)
    tube(Weight[LENGTH],id=Weight[ID],od=Weight[OD],anchor=BOTTOM);
    color("Gray",0.8)
    up(BaseFloor + 2*Weight[LENGTH] + Spacing)
    tube(Cap[LENGTH],id=Cap[ID],od=Cap[OD],anchor=BOTTOM);
    }
    if (Layout == "Cuts") {
    left(BaseOD/2 + Gap)
    offset(r=-1.0)
    circle(d=BaseOD);
    right(Cap[OD]/2 + Gap)
    offset(r=0.2/2)
    projection()
    tube(1.0,id=Cap[ID],od=Cap[OD],anchor=BOTTOM);
    }
    if (Layout == "Build") {
    Housing();
    }