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

  • Ed’s Atomic Fireball Avocado Smoothie

    Dump into a stick blender cup:

    • 1 tsp erythritol
    • 5 drops stevia
    • ≈2 ml mint extract
    • 1/2 tsp Vietnamese Cinnamon
    • 3+ tsp cocoa powder
    • 1/2 avocado, chunked
    • 6 fl oz whole milk to make ≈10 fl oz total

    Blend thoroughly. Slurp.

    Atomic Fireball Avocado Smoothie
    Atomic Fireball Avocado Smoothie

    Notes:

    • Another scant ounce of milk makes less of a slurry
    • More cinnamon cannot possibly be a bad thing
    • Commercial mint may be more potent

    AFAICT, this is the only way to make an avocado palatable.

    There is absolutely no connection with yesterday’s post.

  • Monthly Science: Cheese Slicer Epoxy Coating vs. Water

    Ten months ago, I cleaned the corrosion off our favorite cheese slicer:

    Cheese slicer - aluminum corrosion
    Cheese slicer – aluminum corrosion

    After cleaning, I coated it with XTC-3D epoxy:

    Cheese Slicer - epoxy coat - detail
    Cheese Slicer – epoxy coat – detail

    We’ve been using it daily ever since and it spends most of its life drip-drying in the dish drainer. I added a third opening to the cheerful orange measuring spoon holder just for the slicer.

    A few weeks ago I noticed corrosion once again growing on the handle:

    Cheese Slicer - epoxy coat - corrosion - detail
    Cheese Slicer – epoxy coat – corrosion – detail

    I think the rot comes from water diffusing through the epoxy, rather than gross leaks through damage or pinholes. The tip of the handle has the most corrosion, probably due to the water drop hanging there, even though it also has the thickest epoxy coating: it cured with the handle pointing downward.

    Verily, rust never sleeps …

  • Cheap Flashlight Boost Converter: Capacitor FAIL

    A long time ago, a pair of white LED + red laser flashlights powered by an AA cell diverged: one flashlight worked fine, the other always had a dead battery. The latter ended up on my “one of these days” pile, from which it recently emerged and accompanied me to a Squidwrench Tuesday session:

    Small Sun flashlight - original wiring
    Small Sun flashlight – original wiring

    The black wire trailing from the innards goes to the battery negative terminal, with the aluminum body providing the positive terminal connection to the wavy-washer spring contact visible atop the rear PCB inside the front shell.

    The switch connects each red wire to the battery negative terminal, so there’s a color code issue in full effect. The two red wires burrow through holes in the rear PCB (shown above) and connect to the negative terminal of the laser module (the brass cylinder near the top) and the negative terminal ring on the front PCB holding the seven white LEDs:

    Small Sun flashlight - original wiring - LED laser board
    Small Sun flashlight – original wiring – LED laser board

    Continuing the color code issue, the black wire from the laser is its positive terminal. The out-of-focus wire (an LED pin) sticking up near the top of the picture carries the positive connection to the LED ring. The red wires from the switch are the negative connections for the LEDs and laser.

    Voltages applied to the LED ring and the currents flowing therein:

    Small Sun flashlight - 7x white LED current vs voltage
    Small Sun flashlight – 7x white LED current vs voltage

    Seven LEDs at 20 mA each = 140 mA, so the voltage booster must crank out slightly more than 3.2 V. They’re not the brightest white LEDs I’ve ever seen, but suffice for a small flashlight.

    A crude sketch of the PCB layout, with a completely incorrect schematic based on the mistaken assumption the SOT23-3 package was an NPN transistor:

    Small Sun flashlight - schematic doodle
    Small Sun flashlight – schematic doodle

    Obviously, that’s just not ever going to oscillate, even if the 2603 topmark meant a 2SC2603 transistor, which it doesn’t.

    A bit more searching suggests it’s a stripped-down Semtech SC2603A boost converter, normally presented in a SOT23-6 package. If you order a few million of ’em, you can strip off three unused pins, do some internal rebonding, and (presumably) come out with an SOT23-3:

    Small Sun flashlight - correct schematic doodle
    Small Sun flashlight – correct schematic doodle

    That topology makes more sense!

    Before going further, I had to rationalize the colors:

    Small Sun flashlight - rewired LED laser board
    Small Sun flashlight – rewired LED laser board

    Soldering longer leads to the PCB allows current & voltage measurements:

    Small Sun flashlight - LED current test
    Small Sun flashlight – LED current test

    With the LEDs and laser disconnected, the converter seems to be struggling to keep the capacitor charged:

    Small Sun flashlight - V boost I 200mA-div - idle
    Small Sun flashlight – V boost I 200mA-div – idle

    Those purple spikes come from the current probe at 200 mA/div: maybe half an amp in 5 μs pulses at 6 kHz works out to a 15 mA average current, which is pretty close to the 11 mA I measured; it’s not obvious the Siglent SDM3045 meter was intended to handle such a tiny duty cycle.

    Obviously, the output capacitor is junk and, after removing it, the AADE L/C meter says NOT A CAPACITOR. Perhaps it never was one?

    Measuring the cap in the good (well, the other flashlight) suggests something around 100 nF, so I installed a random 110 nF cap from the stash. The current peaks are about the same size:

    Small Sun flashlight - I 200mA-div - 110nF cap
    Small Sun flashlight – I 200mA-div – 110nF cap

    The cap voltage (not shown) is now nearly constant and the 50 Hz PWM rate reduces the average battery current to 100-ish μA:

    Small Sun flashlight - I 200mA-div - color-grade - 110nF cap
    Small Sun flashlight – I 200mA-div – color-grade – 110nF cap

    Not great, but tolerable; a 1000 mA·h battery will go flat in a few months.

    The LED current runs a bit hotter than I expected:

    Small Sun flashlight - I 200mA-div - LED current - 110nF cap
    Small Sun flashlight – I 200mA-div – LED current – 110nF cap

    The bottom is about 200 mA and the average might be 350 to 400 mA.

    Compared with the other flashlight:

    Small Sun flashlight other - I 200mA-div - LED current
    Small Sun flashlight other – I 200mA-div – LED current

    So the cap is maybe a bit too small, but it likely doesn’t matter.

    Done!

  • Bathroom Sink Drain: Epoxy Touchup

    The glaring white ring around the drain comes from Magic Porcelain Chip Fix epoxy:

    Bathroom Sink Drain - Epoxy fill
    Bathroom Sink Drain – Epoxy fill

    What looks like a blob on the left side covers the missing chip, with the rest of the ring filled in to make it look like I knew what I was doing. The drain dried out while we were on vacation, having been scrubbed clean before we left, making for the best surface preparation I could provide.

    As it turns out, our resident iron bacteria took about a week to set up shop along the bottom of the ring, producing a pair of small rust-colored dots that will inevitably spread to encompass the whole thing. They’re endemic in the plumbing, impossible to kill off, and nothing more than an unsightly nuisance.

  • Rubber Soaker Hose Repair

    A soaker hose leaped under a descending garden fork and accumulated a nasty gash:

    Soaker Hose Splice - gashed
    Soaker Hose Splice – gashed

    Mary deployed a spare and continued the mission, while I pondered how to fix such an odd shape.

    For lack of anything smarter, I decided to put a form-fitting clamp around the hose, with silicone caulk buttered around the gash to (ideally) slow down any leakage:

    Soaker Hose Splice - Solid Model - Assembled
    Soaker Hose Splice – Solid Model – Assembled

    As usual, some doodling got the solid model started:

    Soaker Hose Splice - Dimension doodle 1
    Soaker Hose Splice – Dimension doodle 1

    A hose formed from chopped rubber doesn’t really have consistent dimensions, so I set up the model to spit out small test pieces:

    Soaker Hose Splice - Test Fit - Slic3r
    Soaker Hose Splice – Test Fit – Slic3r

    Lots and lots of test pieces:

    Soaker Hose Splice - test pieces
    Soaker Hose Splice – test pieces

    Each iteration produced a better fit, although the dimensions never really converged:

    Soaker Hose Splice - Dimension doodle 2
    Soaker Hose Splice – Dimension doodle 2

    The overall model looks about like you’d expect:

    Soaker Hose Splice - Complete - Slic3r
    Soaker Hose Splice – Complete – Slic3r

    The clamp must hold its shape around a hose carrying 100 psi (for real!) water, so I put 100 mil aluminum backing plates on either side. Were you doing this for real, you’d shape the plates with a CNC mill, but I just bandsawed them to about the right size and transfer-punched the hole positions:

    Soaker Hose Splice - plate transfer punch
    Soaker Hose Splice – plate transfer punch

    Some drill press action with a slightly oversize drill compensated for any misalignment and Mr Disk Sander rounded the corners to match the plastic block:

    Soaker Hose Splice - plate corner rounding
    Soaker Hose Splice – plate corner rounding

    A handful of stainless steel 8-32 screws holds the whole mess together:

    Soaker Hose Splice - installed
    Soaker Hose Splice – installed

    These hoses spend their lives at rest under a layer of mulch, so I’m ignoring the entire problem of stress relief at those sharp block edges. We’ll see how this plays out in real life, probably next year.

    I haven’t tested it under pressure, but it sure looks capable!

    The OpenSCAD source code as a GitHub Gist:

    // Rubber Soaker Hose Splice
    // Ed Nisley KE4ZNU July 2018
    Layout = "Build"; // Hose Block Show Build
    TestFit = false; // true to build test fit slice from center
    //- Extrusion parameters must match reality!
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    //———-
    // Dimensions
    // Hose lies along X axis
    Hose = [200,27.0,12.0]; // X = longer than anything else
    Block = [80.0,50.0,4.0 + Hose.z]; // overall splice block size
    echo(str("Block: ",Block));
    Kerf = 0.1; // cut through middle to apply compression
    ID = 0;
    OD = 1;
    LENGTH = 2;
    // 8-32 stainless screws
    Screw = [4.1,8.0,3.0]; // OD = head LENGTH = head thickness
    Washer = [4.4,9.5,1.0];
    Nut = [4.1,9.7,6.0];
    CornerRadius = Washer[OD]/2;
    NumScrews = 3; // screws along each side of cable
    ScrewOC = [(Block.x – 2*CornerRadius) / (NumScrews – 1),
    Block.y – 2*CornerRadius,
    2*Block.z // ensure complete holes
    ];
    echo(str("Screw OC: x=",ScrewOC.x," y=",ScrewOC.y));
    //———————-
    // Useful routines
    module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes
    Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
    FixDia = Dia / cos(180/Sides);
    cylinder(d=(FixDia + HoleWindage),h=Height,$fn=Sides);
    }
    // Hose shape
    // This includes magic numbers measured from reality
    module HoseProfile() {
    RimThick = 10.0; // outer sections
    RimOD = RimThick;
    RimFlatRecess = -0.7; // recess to front flat surface
    OuterOC = Hose.y – RimOD; // outer tube centers
    RecessM = 1.5; // back recess chord
    RecessC = OuterOC;
    RecessR = (pow(RecessM,2) + pow(RecessC,2)/4) / (2*RecessM);
    RidgeM = 1.0; // front ridge chord
    RidgeC = 8.0;
    RidgeR = (pow(RidgeM,2) + pow(RidgeC,2)/4) / (2*RidgeM);
    NumSides = 12*4;
    rotate([0,-90,0])
    translate([0,0,-Hose.x/2])
    linear_extrude(height=Hose.x,convexity=4)
    difference() {
    union() {
    for (j=[-1,1]) // outer channels
    translate([0,j*OuterOC/2])
    circle(d=RimOD,$fn=NumSides);
    translate([-RimOD/4,0]) // rear flat fill
    square([RimOD/2,OuterOC],center=true);
    translate([(RimOD/4 + RimFlatRecess),0]) // front flat fill
    square([RimOD/2,OuterOC],center=true);
    intersection() {
    translate([Hose.z/2,0])
    square([Hose.z,OuterOC],center=true);
    translate([-RidgeR + RimOD/2 + RimFlatRecess + RidgeM,0])
    circle(r=RidgeR,$fn=NumSides);
    }
    }
    translate([-(RecessR + RimOD/2 – RecessM),0])
    circle(r=RecessR,$fn=2*NumSides);
    }
    }
    // Outside shape of splice Block
    // Z centered on hose rim circles, not overall thickness through center ridge
    module SpliceBlock() {
    difference() {
    hull()
    for (i=[-1,1], j=[-1,1]) // rounded block
    translate([i*(Block.x/2 – CornerRadius),j*(Block.y/2 – CornerRadius),-Block.z/2])
    cylinder(r=CornerRadius,h=Block.z,$fn=4*8);
    for (i = [0:NumScrews – 1], j=[-1,1]) // screw holes
    translate([-(Block.x/2 – CornerRadius) + i*ScrewOC.x,
    j*ScrewOC.y/2,
    -(Block.z/2 + Protrusion)])
    PolyCyl(Screw[ID],Block.z + 2*Protrusion,6);
    cube([2*Block.x,2*Block.y,Kerf],center=true); // slice through center
    }
    }
    // Splice block less hose
    module ShapedBlock() {
    difference() {
    SpliceBlock();
    HoseProfile();
    }
    }
    //———-
    // Build them
    if (Layout == "Hose")
    HoseProfile();
    if (Layout == "Block")
    SpliceBlock();
    if (Layout == "Bottom")
    BottomPlate();
    if (Layout == "Top")
    TopPlate();
    if (Layout == "Show") {
    difference() {
    SpliceBlock();
    HoseProfile();
    }
    color("Green",0.25)
    HoseProfile();
    }
    if (Layout == "Build") {
    SliceOffset = TestFit && !NumScrews%2 ? ScrewOC.x/2 : 0;
    intersection() {
    translate([SliceOffset,0,Block.z/4])
    if (TestFit)
    cube([ScrewOC.x/2,4*Block.y,Block.z/2],center=true);
    else
    cube([4*Block.x,4*Block.y,Block.z/2],center=true);
    union() {
    translate([0,0.6*Block.y,Block.z/2])
    ShapedBlock();
    translate([0,-0.6*Block.y,Block.z/2])
    rotate([0,180,0])
    ShapedBlock();
    }
    }
    }
  • Mint Extract: Results

    Six weeks later, the mint seemed about as extracted as it was going to get and I now have nearly a liter of decidedly green mint extract:

    Mint Extract - liquid color
    Mint Extract – liquid color

    Correspondingly, the leaves turned from bright green to dull brown:

    Mint Extract - spent leaf colors
    Mint Extract – spent leaf colors

    The smaller and darker pile in the rightmost bowl came from the smaller jar (on the left) with a higher alcohol-to-leaf ratio:

    Mint Extract - start - 2018-05-29
    Mint Extract – start – 2018-05-29

    Perhaps packing the jars before pouring in the alcohol doesn’t extract as efficiently. Or maybe, as in so many things, it doesn’t really matter.

    A liter of mint extract may not be a lifetime supply, but it’ll suffice for quite a while!

  • Monthly Image: Maple Tree Fungus

    Repaving the driveway truncated the roots of a maple tree and, this year, produced a handsome pair of fungii:

    Fungus - top view
    Fungus – top view

    Seen from the side, they’re even more complex:

    Fungus - side view
    Fungus – side view

    They’re firm and perfectly healthy, but the tree is likely doomed.