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: Home Ec

Things around the home & hearth

  • Hood Heavy Cream Seal: Whoopsie

    Hood Heavy Cream Seal: Whoopsie

    I was certain this was badly spoiled cream:

    Hood Heavy Cream seal - exterior
    Hood Heavy Cream seal – exterior

    The seal was firmly affixed inside the cap, just like all the seals on all the other cartons we’ve ever bought, so this wasn’t a “broken seal”.

    The bottom of the seal looked about the same:

    Hood Heavy Cream seal - interior 1
    Hood Heavy Cream seal – interior 1

    The cream inside the carton looked & smelled fine, so it went into the morning omelette with no ill effect. Yes, I’m aware some bacterial contamination has no particular smell or taste.

    Scraping off the pure-white cream showed the crud had been molded inside the plastic:

    Hood Heavy Cream seal - interior 2
    Hood Heavy Cream seal – interior 2

    A closer look at the exterior surface of the seal:

    Hood Heavy Cream seal - exterior detail
    Hood Heavy Cream seal – exterior detail

    And the interior surface:

    Hood Heavy Cream seal - interior detail
    Hood Heavy Cream seal – interior detail

    Both of those are focused on the top surface; the blurred areas are inside the plastic.

    The date & production codes sprayed onto the carton were somewhat illegible:

    Hood Heavy Cream seal - illegible codes
    Hood Heavy Cream seal – illegible codes

    Getting a better angle helped:

    Hood Heavy Cream seal - date prod codes
    Hood Heavy Cream seal – date prod codes

    I sent in a report, but I’m sure I’ll never know the rest of the story …

  • Rolling Bed Stop

    Rolling Bed Stop

    The upstairs Sewing Room came with a couch-like bed incorporating a roll-out trundle bed. It doesn’t get a lot of use, but it lacks wheel locks and tends to scoot away unless you get into it rather more carefully than seems reasonable.

    So I made a pair of stops to capture the wheels:

    Rolling Bed Stops - installed
    Rolling Bed Stops – installed

    The solid model shows they’re just plastic blocks minus a model of the roller wheel:

    Rolling Bed Stops - solid model - show view
    Rolling Bed Stops – solid model – show view

    I like the wood-grain effect of the doubly curved recess on printed plastic layers, even if nobody will ever see it:

    Rolling Bed Stops - PrusaSlicer
    Rolling Bed Stops – PrusaSlicer

    The OpenSCAD code also exports a projection of the block as an SVG file to laser-cut the cork pad.

    Roll the trundle bed into position, push the stops against the wheels, lift and pull forward an inch, let it down, and the wheels snap into those recesses.

    These are considerably fancier than some of the other wheel stops / feet around the house, if only because I got to use the Chord Equation to solve for the radius of the circle parallel to the axle for a snug socket.

    The OpenSCAD source code as a GitHub Gist:

    // Rolling Bed roller stops
    // Ed Nisley – KE4ZNU
    // 2025-06-16
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Roller,Plan]
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    WallThick = 10.0; // default width for things
    BaseThick = 3.0; // bottom thickness
    RollerOA = [47.2,49.8,40.0]; // min & max dia, length
    FrameClearance = 11.0; // max height under bed frame at roller
    PadOA = [RollerOA[LENGTH] + 2*WallThick,RollerOA[OD],FrameClearance – 1.0];
    //———-
    // Define Shapes
    module Roller() {
    m = (RollerOA[OD] – RollerOA[ID])/2;
    RollerR = (m^2 + (RollerOA[LENGTH]^2)/4) / (2*m);
    up(RollerOA[OD]/2)
    yrot(90)
    rotate_extrude($fa=1)
    intersection() {
    left(RollerR – RollerOA[OD]/2)
    circle(r=RollerR,$fa=1);
    rect([RollerOA[OD]/2,RollerOA[LENGTH] + 2.0],anchor=LEFT);
    }
    }
    module RollerStop() {
    difference() {
    cuboid(PadOA,anchor=BOTTOM,rounding=WallThick/2,except=BOTTOM);
    up(BaseThick)
    Roller();
    }
    }
    //———-
    // Build things
    if (Layout == "Plan") {
    projection(cut=true)
    RollerStop();
    }
    if (Layout == "Roller") {
    Roller();
    }
    if (Layout == "Show") {
    RollerStop();
    color("Green",0.5)
    up(BaseThick)
    Roller();
    }
    if (Layout == "Build") {
    RollerStop();
    }
  • PolyDryer Humidity: Alumina vs. PETG-CF

    PolyDryer Humidity: Alumina vs. PETG-CF

    A pair of PolyDryer boxes has been holding black and gray PETG-CF for a while:

    PolyDryer - PETG-CF - 32 pctRH Black 31 pctRF Gray
    PolyDryer – PETG-CF – 32 pctRH Black 31 pctRF Gray

    A few days ago I slipped humidity indicator cards into the boxes:

    The black PETG-CF card suggests 30 to 40 %RH:

    PolyDryer - PETG-CF - 32 pctRH Black test card
    PolyDryer – PETG-CF – 32 pctRH Black test card

    Yes, I dropped that card into the box upside-down.

    The gray PETG-CF card shows similar results:

    PolyDryer - PETG-CF - 31 pctRF Gray test card
    PolyDryer – PETG-CF – 31 pctRF Gray test card

    The desiccant in the black PETG-CF box weighed 80.9 g, a gain of 5.9 g = 10.8%. The chart suggests that corresponds to 35 to 40 %RH:

    Desiccant adsorption vs humidity
    Desiccant adsorption vs humidity

    The gray PETG-CF box had 102.0 g of desiccant. I apparently loaded 25 g in the meter container and 70 g in seven tea bags, but I don’t trust those numbers enough to go any further.

    Unlike the black PETG box mismatch, these black PETG-CF numbers seem plausible. The results may depend on allowing far more time for the filament + air to equilibrate with the desiccant tucked in its containers than the days I’ve been giving it.

  • Garden Hose Valve Wrench: Decommissioning

    Garden Hose Valve Wrench: Decommissioning

    Mary found the wrench I made five years ago in the bottom of her tool bucket:

    Hose Valve Knob - five years later
    Hose Valve Knob – five years later

    Having moved away from the garden with all the valves that wrench turned, it can now go into the 3D Printed Sample Box for use in the unlikely event I ever give another talk on the subject.

    I’d design it differently these days, what with BOSL2 in my sails, but it got the job done.

    Some things last long enough!

  • WS-5000 Anemometer Bird Spike Ring

    WS-5000 Anemometer Bird Spike Ring

    A critter made off with our battered plastic rain gauge, so I set up an Ambient Weather WS-5000 station to tell Mary how much rain her garden was getting. I added the Official Bird Spike Ring around the rain gauge to keep birds off, but robins began perching atop the anemometer while surveying the yard and crapping on the insolation photocell.

    After a few false starts, the anemometer now has its own spikes:

    Weather station with additional spikes
    Weather station with additional spikes

    It’s a snugly fitting TPU ring:

    Weather Station Spikes - build test piece
    Weather Station Spikes – build test piece

    The spikes are Chromel A themocouple wire, because a spool of the stuff didn’t scamper out of the way when I opened the Big Box o’ Specialty Wire. As you can tell from the picture, it’s very stiff (which is good for spikes) and hard to straighten (which is bad for looking cool).

    The shape in the middle is a hole diameter test piece. Next time around, I’ll use thicker 14 AWG copper wire:

    Weather station spikes - test piece
    Weather station spikes – test piece

    The test piece showed I lack good control over the TPU extrusion parameters on the Makergear M2, as holes smaller than about 2 mm vanish, even though the block’s outside dimensions are spot on. This application wasn’t too critical, so I sharpened the wire ends and stabbed them into the middle of the perimeter threads encircling the hole.

    Now we’ll discover how TPU survives weather.

    The OpenSCAD source code as a GitHub Gist:

    // Ambient Weather – Ambient Weather WS-5000 anemometer bird spike ring
    // Ed Nisley – KE4ZNU
    // 2025-06-09
    include <BOSL2/std.scad>
    Layout = "Show"; // [Show,Build,Slice]
    /* [Hidden] */
    HoleWindage = 0.2;
    Protrusion = 0.1;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    SpikeOC = 30.0; // straight-line distance between spikes, OEM = 35
    WallThick = 4.0;
    BandID = 3.5*INCH – 0.5; // = OD of weather station
    BandOD = BandID + 2*WallThick;
    BandHeight = 8.0;
    SpikeOD = 1.7 + HoleWindage; // wire diameter
    SpikeWall = 2.0; // around wires
    SpikeBCD = BandOD;
    MountOD = SpikeOD + 2*SpikeWall;
    NumSpikes = ceil(PI*BandOD/SpikeOC); // need integral number of spikes
    SpikeAngle = 360/NumSpikes;
    NumSides = 3*NumSpikes;
    echo(SpikeAngle=SpikeAngle);
    echo(NumSpikes=NumSpikes);
    //———-
    // Define Shapes
    module Slice() {
    difference() {
    hull() {
    pie_slice(h=BandHeight,d=BandOD,$fn=NumSides,ang=SpikeAngle,spin=-SpikeAngle/2,anchor=BOTTOM);
    right(SpikeBCD/2 – MountOD/2)
    cyl(h=BandHeight,d=MountOD,realign=true,anchor=LEFT+BOTTOM,$fn=2*6);
    }
    down(Protrusion) {
    cyl(h=BandHeight + 2*Protrusion,d=BandID,$fn=NumSides,circum=true,realign=true,anchor=BOTTOM);
    right(SpikeBCD/2)
    cyl(h=BandHeight + 2*Protrusion,d=SpikeOD,$fn=6,circum=true,realign=true,anchor=BOTTOM);
    }
    }
    }
    module SpikeRing() {
    for (i=[0:NumSpikes-1])
    zrot(i*SpikeAngle)
    Slice();
    }
    //———-
    // Build things
    if (Layout == "Slice") {
    Slice();
    }
    if (Layout == "Show") {
    left(SpikeBCD/2)
    Slice();
    SpikeRing();
    }
    if (Layout == "Build") {
    SpikeRing();
    }

  • Screen Door Handle Repositioning

    Screen Door Handle Repositioning

    For unknown reasons, the handle on the porch screen door was installed less than one finger width from the frame, so I conjured a pair of plastic plates shifting it far enough to prevent finger pinches and avoid the screws for the outside handle:

    Porch door handle repositioning
    Porch door handle repositioning

    The original holes now have M4 threaded wood inserts and the holes in the ¼ inch acrylic have M4 heat-staked brass inserts, mostly because I had everything on hand.

    This was part of a project to trim the bottom of the door to clear the porch floor boards, which evidently continued warping after they trimmed the door to fit:

    Porch door trimming
    Porch door trimming

    That thin blue line suggests the highest part of the floor was once near the bottom of the picture, but it’s now the lowest part. The highest part is now near the hinge side near the top of the picture, firmly jamming the door in place.

    Works great now!

  • Pepper Mill: End of Life

    Pepper Mill: End of Life

    So I finally took our pepper mill apart to see why it was having trouble grinding peppercorns:

    Pepper mill wear
    Pepper mill wear

    It was a wedding present and, nigh onto half a century later, it’s all worn out.

    Its replacement surely won’t survive so long, even with ceramic innards, but I may not notice.