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.

Author: Ed

  • Double Helix Thing

    After enduring my OpenSCAD solid modeling class, The Might Thor conjured up a solid model of a Thing he wanted and asked if it was buildable. I added a pair of hemispheres to round off the tops, thinned and widened the baseplate for better adhesion, and Fired the M2:

    Double Helix - on platform
    Double Helix – on platform

    I thought the overhang was aggressive, but, while it’s not perfect, it’s not nearly as awful as I expected. Perhaps tinkering with a slightly lower extrusion temperature would help.

    It’s far less blocky than the stuff I build!

    The OpenSCAD model is his; you get to figure it out on your own. Hint: linear_extrude a pair of circles with a twist.

  • Toyota Sienna: New Rear Shocks

    After the last annual inspection, the Nice Man told me that the rear shocks were rusted out and, although they still worked and he couldn’t fail the van, he wished he could. After 13 years and 88 k miles, yeah, they looked pretty grim:

    Sienna OEM rear shocks - removed
    Sienna OEM rear shocks – removed

    The loose steel snippet came from the bottom of the outer shield; it had completely rusted off and dropped free around the lower mount. I suppose that was what got his attention.

    Anyhow, the removal went astonishingly well:

    • Back the van out of the garage until the wheels line up with drop to the driveway apron
    • Pop inside dress covers over the struts
    • Remove top jam nuts, cushion, cups
    • Remove bottom bolt from wheel carrier (easily!)
    • Spritz penetrating on rubber bushing
    • Compress shock, twist until bushing slides free

    And the installation was equally smooth:

    • Install shock on wheel carrier
    • Torque bottom bolt (29 ft·lb)
    • Aim strut at hole in body
    • Cut restraining wire, guide strut through hole
    • Install OEM bottom cup, new cushion & cup, new nylock nut
    • Tighten to same length as OEM nut
    • Install dress covers

    The OEM cup fits snugly into the body hole to center the strut, so it seemed like a Good Idea to reuse it. Despite the rust stain inside the body, it was in reasonable condition.

    You’re supposed to jack the van up while fiddling around underneath, but the driveway slopes down from the garage enough to provide access. I did chock the wheels, of course, but not jacking the van and putting it on stands looked like a major safety win right there.

    The bottom view, which shows the effect of a dozen New York State winters on ordinary steel:

    Sienna replacement rear shocks - bottom
    Sienna replacement rear shocks – bottom

    The top view, which shows that the bushings did leak a bit of water over the last decade:

    Sienna replacement rear shocks - top
    Sienna replacement rear shocks – top

    Done!

    I suppose, just for completeness, I should do the front shocks, but those aren’t nearly as easy and I’d have to start by buying a spring compressor.

  • Cooper’s Hawks

    High atop that tree again:

    Coopers Hawks in evergreen treetop
    Coopers Hawks in evergreen treetop

    The bird on the right seems larger and may be the female of a mated pair, but it’s hard to tell at this distance. They could be siblings from the most recent nest in the area, but hawks aren’t chummy birds.

    Search for hawk and you’ll find many more pix; I think they’re photogenic.

    Go, hawks, go!

    It’s taken at the usual 12x zoom with the 1.7 teleadapter on the Sony DSC-H5. I can’t justify the kilobucks required for a large-sensor SLR with nice long glass, but it’d definitely improve the picture quality around here. [sigh]

     

  • 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…

  • Dutchess County Rail Trail Ride

    The DCRT folks held a “soft opening” last week at the bridge over Rt 55 completing the rail trail from Hopewell Junction to the Walkway Over the Hudson; the Hudson Valley Rail Trail continues westward to Lloyd. I hadn’t actually planned to ride the whole thing, but Monday was a lovely day and, hey, why not?

    So here’s what a pleasant, mostly off-road 36 mile ride looks like:

    KE4ZNU Rail Trail Ride - 2013-10-14
    KE4ZNU Rail Trail Ride – 2013-10-14

    Hadn’t realized it was Columbus Day until well into the ride, which accounted for a Hudson River crossing at 3 mph embedded in a solid 1.5 mile scrum. Being no fool, I returned over the Poughkeepsie (a.k.a. Mid Hudson) Bridge.

  • 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.

  • Monthly Image: Cormorants at Vassar Farm Pond

    This pair of Double-crested Cormorants took up residence for a few weeks on the pond at Vassar Farm:

    Cormorants at Vassar Farm pond
    Cormorants at Vassar Farm pond

    The rubbery blue feet should be diagnostic, but don’t appear in any of our references. They’re definitely not Blue-footed Boobies, that much we know.

    They’re XORed with turtles on the same snags.

    Hand-held with the Canon SX230HS at full zoom across the pond.