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

Making the world a better place, one piece at a time

  • 3D Printed Smashed Glass Coasters: Fragment Layout

    3D Printed Smashed Glass Coasters: Fragment Layout

    I selected and laid out the smashed glass fragments for the first few coasters by hand:

    Smashed Glass - 4in - group A - tweaked
    Smashed Glass – 4in – group A – tweaked

    Which worked reasonably well for coasters with a rim around the perimeter to hold in the epoxy covering the entire top surface:

    Printed Coaster Layout - solid model
    Printed Coaster Layout – solid model

    The problem with smooth-top coasters is this:

    Printed Coasters - epoxy fill
    Printed Coasters – epoxy fill

    A slightly sweaty or wet mug can get a firm suction lock on that smooth top, lift the coaster off the table, then drop it into a plate of food.

    So I put a rim around each fragment to separate the epoxy surfaces and break the suction lock:

    Printed Coaster Layout - 5 inch Set B
    Printed Coaster Layout – 5 inch Set B

    Each recess has a narrow inner lip as a border inside the raised perimeter, which may not be strictly necessary, but IMO nicely sets off the fragments:

    Smashed Glass 3D Printed Coaster - Set B
    Smashed Glass 3D Printed Coaster – Set B

    Each fragment must be spaced far enough from its three neighbors to allow for those lips and perimeter walls, which requires more fussing than I’m willing to apply on a regular basis.

    So fetch & install Deepnest to fuss automagically. The program hasn’t been updated in years and the Linux version segfaults on my Manjaro boxen, but the Windows version runs fine on the Mini-PC I use for LightBurn:

    Deepnest Fragment Set E - in progress
    Deepnest Fragment Set E – in progress

    The Mini-PC runs maxi-hot, though, so at some point I must install Deepnest on the Token Windows Laptop for more grunt.

    Deepnest requires a large shape representing the “sheet” in which to arrange the other pieces, so:

    • Import the fragments outlines into LightBurn
    • Create a suitable circle
    • Export circle + fragments as an SVG file
    • Import into Deepnest
    • Set 5 mm spacing & other suitable parameters
    • Let it grind until a nice arrangement pops out
    • Save as Yet Another SVG file

    The output SVG has the fragment outlines arranged to fit within the circle, but does not include the circle. That’s fine, because the next step involves creating a conformal perimeter around the entire group of fragments and preparing it for input to OpenSCAD to create a solid model:

    Printed Coaster Layout - 5 inch Set C - solid model
    Printed Coaster Layout – 5 inch Set C – solid model

    So. Many. Smashed. Glass.

  • 3D Printed Smashed Glass Coasters: Optimization

    3D Printed Smashed Glass Coasters: Optimization

    A pair of 3D printed smashed glass coasters for a friend:

    Printed Coasters - in use
    Printed Coasters – in use

    The black PETG coaster under the French Press:

    Printed Coasters - black PETG finished
    Printed Coasters – black PETG finished

    The white PETG coaster under the mug:

    Printed Coasters - white PETG finished
    Printed Coasters – white PETG finished

    They’re considerably improved from the first attempt:

    Smashed glass printed coaster - front view
    Smashed glass printed coaster – front view

    More details to follow …

  • Dryer Vent Filter Snout

    Dryer Vent Filter Snout

    The first step in adding a filter bag to the dryer vent requires a convenient way to attach it. Because we live in the future, a couple of hours of 3D printing produced something that might work:

    Clothes Dryer Vent Filter Snout - installed
    Clothes Dryer Vent Filter Snout – installed

    It’s made of TPU, which is bendy enough to ease two tabs into the two outermost slots you can see and a corresponding pair of tabs into slots on the wall side.

    The solid model shows the part snapped inside the vent:

    Clothes Dryer Vent Filter Snout - OpenSCAD show
    Clothes Dryer Vent Filter Snout – OpenSCAD show

    The flared bottom takes something like three hours to print (TPU likes slooow extrusion), so I did the top ring first to verify the tab fit:

    Clothes Dryer Vent Filter Snout - OpenSCAD build
    Clothes Dryer Vent Filter Snout – OpenSCAD build

    Both parts come from hull() surfaces wrapped around quartets of thin circles at the proper positions; the difference() of two slightly different hulls produces thin shells.

    A thin layer of JB PlasticBonder urethane adhesive, which bonds TPU like glue, holds the two parts together. I used the tan variant and, while it’s not a perfect match, it definitely looks better than black. Not that it matters in this case.

    Mary will sew up a bag with a drawstring holding it to the snout. If everything survives the performance tests, printing the whole snout in one four-hour job will both make sense and eliminate an uneven joint that’s sure to be a lint-catcher.

    The OpenSCAD source code as a GitHub Gist:

    // Clothes dryer vent filter snout
    // Ed Nisley – KE4ZNU
    // 2025-10-07
    include <BOSL2/std.scad>
    Layout = "Ring"; // [Show,Build,Ring,Taper]
    /* [Hidden] */
    ID = 0;
    OD = 1;
    LENGTH = 2;
    HoleWindage = 0.2;
    Protrusion = 0.1;
    NumSides = 4*3*2*4;
    $fn=NumSides;
    Gap = 5.0;
    // Centers of corner rounding circles
    InnerWidth = 3.0; // wall inside snout
    InnerRadius = 6.0; // inner corner rounding
    RR = [130.0/2 – InnerRadius,91.0/2 – InnerRadius]; // right rear corner
    RF = [112.0/2 – InnerRadius,-(91.0/2 – InnerRadius)]; // right front corner
    CornerCtrs = [[RR.x,RR.y],[RF.x,RF.y],[-RF.x,RF.y],[-RR.x,RR.y]]; // clockwise from RR
    InsertHeight = 7.0; // overall height inside the snout
    TabOC = [73.0,91.0]; // tabs locking into snout
    TabCtrs = [[TabOC.x/2,TabOC.y/2],[TabOC.x/2,-TabOC.y/2],[-TabOC.x/2,-TabOC.y/2],[-TabOC.x/2,TabOC.y/2]];
    TabRadius = 5.0;
    TabHeight = 3.0;
    TaperHeight = 20.0; // Taper holding filter bag
    TaperRadius = 10.0; // outward to capture bag string
    TaperWidth = 2.0; // wall width
    TaperCtrs = CornerCtrs + [[0,-(TaperRadius – InnerWidth)],[0,0],[0,0],[0,-(TaperRadius – InnerWidth)]];
    //—–
    // Clear inside vent opening as 2D shape
    module Opening() {
    hull()
    for (p = CornerCtrs)
    translate(p)
    circle(r=InnerRadius);
    }
    //—–
    // Insert ring locking into vent snout
    module Ring() {
    difference() {
    union() {
    linear_extrude(h=InsertHeight)
    offset(delta=InnerWidth)
    hull()
    for (p = CornerCtrs)
    translate(p)
    circle(r=InnerRadius);
    up(InsertHeight – TabHeight)
    linear_extrude(h=TabHeight)
    for (p = TabCtrs)
    translate(p)
    circle(r=TabRadius);
    }
    down(Protrusion)
    linear_extrude(h=2*InsertHeight)
    Opening();
    }
    }
    //—–
    // Taper glued to ring
    module Taper() {
    difference() {
    hull() {
    up(TaperHeight)
    linear_extrude(h=Protrusion)
    offset(delta=InnerWidth)
    hull()
    for (p = CornerCtrs)
    translate(p)
    circle(r=InnerRadius);
    linear_extrude(h=Protrusion)
    offset(delta=TaperRadius)
    hull()
    for (p = TaperCtrs)
    translate(p)
    circle(r=TaperRadius);
    }
    hull() {
    up(TaperHeight)
    linear_extrude(h=2*Protrusion)
    offset(delta=InnerWidth)
    hull()
    for (p = CornerCtrs)
    translate(p)
    circle(r=InnerRadius – InnerWidth);
    down(Protrusion)
    linear_extrude(h=2*Protrusion)
    offset(delta=TaperRadius – TaperWidth)
    hull()
    for (p = TaperCtrs)
    translate(p)
    circle(r=TaperRadius);
    }
    }
    }
    //—–
    // Build things
    if (Layout == "Ring")
    Ring();
    if (Layout == "Taper")
    Taper();
    if (Layout == "Show") {
    up(TaperHeight)
    Ring();
    Taper();
    }
    if (Layout == "Build") {
    back(55)
    up(InsertHeight)
    yrot(180)
    Ring();
    fwd(55)
    up(TaperHeight)
    yrot(180)
    Taper();
    }
  • Worst Deck Staining Job: Recoated

    Worst Deck Staining Job: Recoated

    A year after using up the rest of the stain that Came With The House™, I pressure-washed the worst deck staining job into submission:

    Deck restaining - pressure washed
    Deck restaining – pressure washed

    Given the variegated ugly remaining, a “solid” color seemed appropriate. Based on web color samples, we independently decided “Cedar Naturaltone” was the least awful choice:

    Deck restaining - Behr Cedar Naturaltone
    Deck restaining – Behr Cedar Naturaltone

    I am not an expert on woods, but IMO that ain’t close to any real substance named “cedar”.

    The instructions insist two thin coats will produce a better outcome than one thick coat, so I did my best:

    Deck restaining - starting
    Deck restaining – starting

    The first coat dried slightly less orange than I feared:

    Deck restaining - first coat
    Deck restaining – first coat

    After the second coat, it’s not really pumpkin out there, but it’s pretty close. The phone camera + GIMP seem unable to cope with the situation, so trust me when I say that’s a sheet of pure white EVA foam:

    Deck restaining - not pumpkin
    Deck restaining – not pumpkin

    I suspect the stain / paint will outlive the deck structure, but now it’s uniformly ugly.

  • Mostly Removing Acrylic Scratches

    Mostly Removing Acrylic Scratches

    Some time ago I made a simple guide / carrier to help select & arrange smashed glass fragments to fit within a given diameter:

    Coaster Layout - selected fragments
    Coaster Layout – selected fragments

    The laser-engraved guide lines confused GIMP’s edge detection to no end.

    It came from a large sheet of 1 mm acrylic, formerly a poster cover, bearing scars of its long history in the “might be useful someday” stash. I wondered if I could remove enough scratches and scuffs to ease GIMP’s workload.

    Stipulated: I am a cheapskate.

    Laser-cut a suitable sheet and sand both sides with 220 grit paper to what looked like a uniform surface:

    Acrylic polishing - 220
    Acrylic polishing – 220

    Continue scrubbing with 400, 800, 1000, 1500, and 3000 grit papers:

    Acrylic polishing - 3000
    Acrylic polishing – 3000

    Massage it with Novus Polish 3, 2, and 1:

    Acrylic polishing - Novus 1
    Acrylic polishing – Novus 1

    At best, it’s more translucent than transparent and definitely not an optical-quality polishing job:

    Acrylic polishing - translucency
    Acrylic polishing – translucency

    Fortunately, I need not care about the edges, because it goes in a square frame with a circular cutout.

    Tape it into that cardboard frame, scan it against a black background, and blow out the contrast to show I should have started with 100 grit paper and paid more attention to that “uniform surface” thing:

    Acrylic polishing - scratches
    Acrylic polishing – scratches

    In use, though, it doesn’t look all that bad:

    Fragment layout - 5in Set B - scan tweaked
    Fragment layout – 5in Set B – scan tweaked

    Come to find out those glittery cracks between all the cuboids still confuse GIMP’s edge detection, but at least hand-tracing the outline is easier without all the lines.

    The entire “polishing” series as a slideshow for your amusement:

    • Acrylic polishing - 220
    • Acrylic polishing - 400
    • Acrylic polishing - 800
    • Acrylic polishing - 1000
    • Acrylic polishing - 1500
    • Acrylic polishing - 3000
    • Acrylic polishing - Novus 3
    • Acrylic polishing - Novus 2
    • Acrylic polishing - Novus 1

    FWIW, those fragments turned out nicely:

    Smashed Glass 3D Printed Coaster - Set B
    Smashed Glass 3D Printed Coaster – Set B

    More on that later …

  • Glow In The Dark Pool Sandals

    Glow In The Dark Pool Sandals

    For reasons not relevant here, after Having Been Advised to not walk barefoot on our wood floors, I picked up a pair of beach / pool sandals with comfy soles. Although they have a white logo, they’re black and essentially invisible in the dark when I need them most.

    Start by taking a photo of the logo on the clamped-flat upper strap:

    UnderArmour logo - flattened
    UnderArmour logo – flattened

    Use GIMP to select the white area, clean it up a little, convert the selection into a path, export it as an SVG file, import into LightBurn, scale to match reality, and Fire The Laser:

    UnderArmour logo - GITD tape cutting
    UnderArmour logo – GITD tape cutting

    That’s a roll of glow-in-the-dark tape which is almost certainly a lethal combination of PVC and phosphorescent stuff, so hold your breath while it cuts.

    It’s “actually a “kiss cut” through the tape, but not through the backing paper, letting the whole thing hang together after the operation.

    Peel-n-stick on the (still flattened) sandals, expose them to light, and It Just Works:

    UnderArmour logo - glowing
    UnderArmour logo – glowing

    The fit isn’t perfect, perhaps due to insufficient flattening, but it’s close enough for my simple needs.

  • Worm Bin Fly Trap

    Worm Bin Fly Trap

    Despite freezing the kitchen scraps going into the worm bin since the previous fruit fly infestation, a zillion flies are now in residence. Lacking the peppermint-stick tube of yesteryear, I conjured another fly trap from common household items:

    Worm Bin Fly Trap - overview
    Worm Bin Fly Trap – overview

    The gap around the top got a strip of tape after I took the picture.

    The gallon jug has cardboard stiffeners supporting a sheet of the sticky paper I used for the onion fly traps:

    Worm Bin Fly Trap - sticky paper holder
    Worm Bin Fly Trap – sticky paper holder

    I was all set to 3D print a threaded adapter to join the two bottles when I realized they already had lids. A few minutes of lathe work added a passageway:

    Worm Bin Fly Trap - Bottle caps
    Worm Bin Fly Trap – Bottle caps

    They’re held together by a generous ring of hot melt glue:

    Worm Bin Fly Trap - lighting detail
    Worm Bin Fly Trap – lighting detail

    The LED strip provides enough light to simultaneously attract the flies and repel the worms.

    The laser cuttery looks like this:

    Worm Bin Fly Trap - LightBurn parts
    Worm Bin Fly Trap – LightBurn parts

    The white shape in the black block is a scan of the cut-open jug, with the other shapes in that row being rectangularized versions. The two tiny notches in the Top and Bottom shapes hold the sticky paper.

    The two rings at the top adapt the LED-wrapped bottle to the existing fitting on the worm bin from the previous episode. They’re visible as shadows near the bottom of the bottle.

    The circle is a laser-cut hole in the gallon jug bottom for the screened plug made for the pepermint-stick tube; the less said about that operation the better.

    So far, so good, although previous experience suggests the flies will be breeding ahead of their (considerable) losses for the next few weeks.