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

  • LED Bulb Lifespan vs. Warranty

    I picked up a $35 LED bulb that’s allegedly equivalent to a 75 W incandescent, replacing a 100 W equivalent compact fluorescent bulb that an X10 relay switch couldn’t turn off cleanly, for a torchiere floor lamp. ‘Nuff said about early CFL failures.

    It has both upward and downward facing LED chips that light up the diffuser and ceiling in equal measure. Both strings are visible from the side due to the heavy molded plastic lens around the chips:

    LED Bulb
    LED Bulb

    Some interesting bits from the package:

    Home Depot LED Bulb Warranty
    Home Depot LED Bulb Warranty

    A 22.8 year lifespan at three hours per day works out to 24.983×103 hours. I wish I could have heard the arguments about whether they could claim a 23 year lifespan…

    At the same duty cycle, the 5 year warranty covers 5.479×103 hours. Huh.

    The URL at the bottom leads to some general info, but nothing you didn’t know already.

    It works well enough, but at $35 it’s really a capital investment that I suspect will never actually pay for itself…

  • Kitchen Sink Faucet: Base Rejuvenation

    The kitchen sink has a small faucet that used to connect directly to the well out back, but now delivers town water from a line bypassing the water softener. The large steel washer below the sink deck has been shedding rust for a while and finally disintegrated:

    Kitchen faucet - rusted washer assembly
    Kitchen faucet – rusted washer assembly

    Well, this is a perfect application for plastic, not steel, so I conjured up a pair of disks:

    Sink Base - Build
    Sink Base – Build

    The large flat one goes below the sink deck in place of the steel washer and the smaller part of the stepped disk fits inside the deck opening to stabilize the faucet:

    Sink Base - Show
    Sink Base – Show

    The two dark rings bracketing the deck between the orange plastic disks represent a pair of gaskets / washers / seals cut from 1 mm rubber sheet with a straight razor toting compass:

    Kitchen faucet - plastic disks and rubber deck washers
    Kitchen faucet – plastic disks and rubber deck washers

    Just for fun, I used Slic3r’s Hilbert Curve top and bottom fill pattern. It produces a nice, grainy texture that feels appropriate for anything needing a non-slip grip (at least on the top, as the bottom surface is glass-smooth).

    Everything stacks up thusly, with the top dark ring representing a rubber seal that came with the faucet:

    Sink Base - Assemble
    Sink Base – Assemble

    It looks about the same in real life, albeit minus all the colors:

    Kitchen faucet - fitting stack
    Kitchen faucet – fitting stack

    The black plastic and black rubber blend together and vanish amid all the chrome:

    Kitchen faucet - assembled
    Kitchen faucet – assembled

    Alas, when I turned the water on, Mary said “That doesn’t sound right…” at about the same time I discovered a fine mist under the sink. See if you can spot the problem:

    Kitchen faucet - corroded copper tube
    Kitchen faucet – corroded copper tube

    A shined-up view should make it obvious:

    Kitchen faucet - corroded copper tube - pinhole
    Kitchen faucet – corroded copper tube – pinhole

    A trip to the precious metals aisle of the Big Box Home Repair Store produced a roll of 3/8 inch copper tubing, although I should have the stub end of that original roll somewhere in the heap. The fitting at the bottom of the faucet turned out to be completely non-standard and I had to re-use it with the new tubing, but it still sealed perfectly.

    I hate plumbing jobs. That fix better last for another decade…

    The OpenSCAD source code:

    // Sink faucet bottom seal
    // Ed Nisley KE4ZNU - Oct 2013
    
    Layout = "Assemble";				// Build Show Upper Lower Gasket
    
    Plastic = "Orange";
    Rubber = "DarkSlateGray";
    
    //- Extrusion parameters - must match reality!
    
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    Protrusion = 0.1;
    
    HoleWindage = 0.2;
    
    Gap = 10.0;
    
    //- Dimensions
    
    FaucetOD = 32.0;
    
    UpperOD = 44.5;
    UpperThick = IntegerMultiple(1.0,ThreadThick);
    
    DeckHoleOD = 37.5;
    DeckThick = IntegerMultiple(1.0,ThreadThick);
    
    LowerOD = 50.0;
    LowerThick = IntegerMultiple(5.0,ThreadThick);
    
    PipeOD = 11.0;
    PipeLength = 50;			// for Show layout
    
    GasketThick = 1.0;
    TopGasket = [FaucetOD,PipeOD,GasketThick];
    MidGasket = [UpperOD,DeckHoleOD,GasketThick];
    BotGasket = [LowerOD,PipeOD,GasketThick];
    
    NumSides = 4*12;
    
    //- Adjust hole diameter to make the size come out right
    
    module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes
    
      Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
    
      FixDia = Dia / cos(180/Sides);
    
      cylinder(r=(FixDia + HoleWindage)/2,h=Height,$fn=Sides);
    }
    
    //- Put peg grid on build surface
    
    module ShowPegGrid(Space = 10.0,Size = 1.0) {
    
      RangeX = floor(100 / Space);
      RangeY = floor(125 / Space);
    
    	for (x=[-RangeX:RangeX])
    	  for (y=[-RangeY:RangeY])
    		translate([x*Space,y*Space,Size/2])
    		  %cube(Size,center=true);
    
    }
    
    module UpperDisk() {
    	difference() {
    		union() {
    			cylinder(r=UpperOD/2,h=UpperThick,$fn=NumSides);
    			cylinder(r=DeckHoleOD/2,h=(DeckThick + UpperThick + GasketThick),$fn=NumSides);
    		}
    		translate([0,0,-Protrusion])
    			PolyCyl(PipeOD,(DeckThick + UpperThick + GasketThick + 2*Protrusion));
    	}
    }
    
    module LowerDisk() {
    	difference() {
    		cylinder(r=LowerOD/2,h=LowerThick,$fn=NumSides);
    		translate([0,0,-Protrusion])
    			PolyCyl(PipeOD,(LowerThick + 2*Protrusion));
    	}
    }
    
    module MakeGasket(Gasket=[10,5,1],Color=Rubber) {
    	color(Color)
    		difference() {
    			cylinder(r=Gasket[0]/2,h=Gasket[2]);
    			translate([0,0,-Protrusion])
    				PolyCyl(Gasket[1],(Gasket[2] + 2*Protrusion));
    		}
    
    }
    
    module SinkDeck() {
    	color("LightSlateGray")
    		difference() {
    			translate([-LowerOD,-LowerOD,0])
    				cube([2*LowerOD,2*LowerOD,DeckThick]);
    			translate([0,0,-DeckThick])
    				cylinder(r=DeckHoleOD/2,h=3*DeckThick);
    		}
    
    }
    
    //- Build it
    
    ShowPegGrid();
    
    if (Layout == "Upper")
    	UpperDisk();
    
    if (Layout == "Lower")
    	LowerDisk();
    
    if (Layout == "Gasket")
    	MakeGasket(MidGasket);
    
    if (Layout == "Show") {
    	color(Plastic)
    	translate([0,0,(UpperThick + DeckThick + Gap)])
    		rotate([180,0,0])
    			UpperDisk();
    
    	color(Plastic)
    	translate([0,0,-(Gap + LowerThick)])
    		LowerDisk();
    
    	color("Yellow",0.25)
    		translate([0,0,-PipeLength/2])
    			PolyCyl(0.9*PipeOD,PipeLength,NumSides);
    
    	color("DarkSlateGray")
    		difference() {
    			translate([0,0,3*Gap/2])
    				cylinder(r=FaucetOD/2,h=GasketThick);
    			translate([0,0,-25])
    				cylinder(r=PipeOD/2,h=50);
    		}
    
    	translate([0,0,3*Gap/2])
    		MakeGasket(TopGasket);
    
    	translate([0,0,-DeckThick])
    		SinkDeck();
    
    	translate([0,0,Gap/2])
    		MakeGasket(MidGasket);
    
    	translate([0,0,-Gap/2])
    		MakeGasket(BotGasket);
    
    }
    
    if (Layout == "Assemble") {
    	color(Plastic)
    	translate([0,0,(UpperThick + GasketThick)])
    		rotate([180,0,0])
    			UpperDisk();
    
    	color(Plastic)
    	translate([0,0,-(LowerThick + DeckThick + GasketThick)])
    		LowerDisk();
    
    	color("Yellow",0.25)
    		translate([0,0,-PipeLength/2])
    			PolyCyl(PipeOD,PipeLength,NumSides);
    
    	translate([0,0,-DeckThick])
    		SinkDeck();
    
    	color("DarkSlateGray")
    		difference() {
    			translate([0,0,3*Gap/2])
    				cylinder(r=FaucetOD/2,h=GasketThick);
    			translate([0,0,-25])
    				cylinder(r=PipeOD/2,h=50);
    		}
    
    	translate([0,0,3*Gap/2])
    		MakeGasket(TopGasket);
    
    	MakeGasket(MidGasket);
    
    	translate([0,0,-(DeckThick + GasketThick)])
    		MakeGasket(BotGasket);
    
    }
    
    if (Layout == "Build") {
    	translate(0.75*[UpperOD,UpperOD,0]/2)
    		UpperDisk();
    	translate(0.75*[-LowerOD,-LowerOD,0]/2)
    		LowerDisk();
    }
    

    As a reward for being the type of person who reads all the way to the end, yes, that’s a riff on Poke Salad Annie.

  • Sonicare Essence: Re-taping the Case

    Much to my astonishment, the ordinary adhesive tape holding the Sonicare Essence power toothbrush together lasted for a bit over a year. As the tape splits along the gap in the case, the coil driving the brush head begins vibrating inside its nest, making a truly horrendous racket.

    The new fix looks a bit odd, but works fine:

    Sonicare Essence - red tape
    Sonicare Essence – red tape

    The tape comes from Mad Phil’s stash and is, I think, splicing tape for reel-to-reel 1/4 inch recording tape: it has zero stretch, infinite strength, and adhesive that’s obviously lasted forever. The inside of the spool says “NOPI Made in Germany”, which doesn’t lead anywhere useful, although the NOPI name does seem to appear in a tape context.

    After a year, the replacement NiMH cells are doing fine, still operating about once a day for three weeks from a 24 hour charge.

  • Plastic Wrap Plastic Cutter Blade: FAIL

    OK, somebody decided that the classic metal blade used on all plastic wrap boxes since the dawn of time cost too much, so they decreed that it be replaced with a plastic blade that costs essentially nothing:

    Walmart plastic wrap - plastic cutter
    Walmart plastic wrap – plastic cutter

    Unfortunately, a thin plastic blade also bends easily and, after a few uses, cracks along the midline. After that, it simply doesn’t work; there’s no way to actually tear the plastic off the roll.

    It turns out that a common hacksaw blade is exactly the right length and, oriented with the teeth pointing to the left, will rip through plastic wrap like, uh, a hacksaw through plastic:

    Walmart plastic wrap - real cutter
    Walmart plastic wrap – real cutter

    That this hack should not be necessary goes without saying…

    There’s a layer of double-stick foam tape between the box and blade. It’s probably removable, but I was in a hurry.

  • Driveway Drain Debris Clog

    Alas, the nice slotted cap I put on the driveway drain can’t handle the amount of debris released by the trees next to the house and above the gutters. I’d removed the thumbscrew to simplify clearing the cap whenever I go for the mail, but that just accentuated the problem:

    Driveway drain - fountain
    Driveway drain – fountain

    The backup must be over a foot of water at the end of the pipe; that fountain emerges from the 1/4 inch hole for the thumbscrew. Fortunately, the slope is large enough that the water (probably) isn’t backing up into the retaining wall footing drain.

    When the pine trees toss their dead needles overboard, the cap plugs solid and, minus the screw, blows across the driveway:

    Driveway drain - clogged
    Driveway drain – clogged

    It usually doesn’t roll very far, although I’ve retrieved it halfway to the street.

    I still think the chipmunks will move in without a grate blocking the pipe, but I’m unsure how to proceed…

  • Survey Registration Number: Faceplant

    A giant envelope containing one of those “political surveys” that’s actually a thinly disguised fundraiser arrived, with this confidence-inspiring ID in the upper-right corner:

    Survey Registration Number
    Survey Registration Number

    The questions were all examples of false dichotomies.

    A pox on their backsides, sez I.

  • Why I Won’t Fix Your Windows PC

    Got a call from a friend who was having trouble getting BitDefender to accept its new license key, so I drove over; she’s at the top of a killer hill and I’d already biked my two dozen miles for the day. Solving that problem was straightforward, if you happen to know that they use “authorization” and “license” as synonyms and that you access the key entry dialog by clicking on a text field that doesn’t look at all clickable.

    I should have declared victory and returned to the Basement Laboratory, but, no, I had to be a nice guy.

    BitDefender kvetched that it had been 777 days since its last scan, so I set up some regularly scheduled scans and automagic updates for everything in sight; we agreed she’d just let the thing run overnight on Mondays to get all that done.

    BitDefender also suggested a handful of critical Windows XP updates, plus the usual Adobe Flash and Reader updates, plus some nonsense about Windows Live Messenger that seemed to require downloading and installing a metric shitload of Microsoft Bloatware. Rather than leave all that for next Monday’s unattended update, I unleashed the critical ones, did the Flash and Reader updates, and stuffed the Messenger update back under the rug.

    Then AOL recommended an urgent update to AOL Desktop 9.7. She has a couple of AOL email addresses, mostly for historic reasons, and I asked if she ever used the AOL Desktop. She wasn’t sure, so I lit up the installed AOL Desktop 9.6: “Oh, that’s how I get all my email!” OK, so we’ll update that, too.

    After all the thrashing was done, the system rebooted and presented us with the single most unhelpful error message I’ve ever seen:

    Windows Error - Ordinal Not Found
    Windows Error – Ordinal Not Found

    No, you chowderheads, that is not OK…

    Searching on the obvious terms indicated this had something to do with Internet Explorer 8 (remember IE 8?) and produced a number of irrelevant suggestions. The least awful seemed to involve running the Microsoft System File Checker utility:

    sfc /scannow

    Which I did.

    It ran for the better part of an hour, then suggested a reboot. During the shutdown, it replaced 29 files at an average of about 5 minutes per file.

    After which, Windows restarted and displayed exactly the same error message. Actually, a series of them; various programs couldn’t locate a fairly wide selection of ordinals in several DLLs.

    OK. I give up.

    We located a tech who does this sort of thing for a living. I’ve offered to split the cost of getting the box up and running again, with the understanding that it may be easier to start with a fresh off-lease Dell box running Windows 7 than to exhume an aging Windows XP installation.

    I stopped caring about Windows toward the end of the last millennium and now keep a Token Windows Box only for hardware like the HOBOWare dataloggers and software like TurboTax.

    Other than that, well…

    I. Don’t. Care.