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

  • Traffic Signal Timing: Jackson Rd at New Hackensack Rd, 2016 Edition

    I reported this short cycle time to the Dutchess County DPW, back in September 2015, and got this response:

    Thank you for contacting Dutchess County DPW about this matter.  I will ask our Traffic Engineer to review the signal timing at CR 104/CR110 (New Hackensak/Jackson) to see if adjustments can be made.  The primary factors used to set the current signal timing are operational efficiency, safety and Level of Service for motor vehicles.  If there are signal timing adjustments which can achieve these goals and provide for safer passage of bicycles, we will explore those options.  I will also ask our Traffic Engineer to investigate altering the sensitivity of the detector system to detect bicycles.  I will share our findings with you. Thank you again for your comments.

    Robert H. Balkind, P.E.
    Deputy Commissioner
    Dutchess County Department of Public Works

    Emphasis mine, of course. Translation: “It’s not going to happen.”

    I pinged him a few weeks later:

    That review has not been done yet. I will advise you when our investigation is complete.

    So, here’s what the signal timing looks like these days…

    T = 0.000 s – Green

    Jackson at New Hackensack - Signal Timing 2016-06-27 - 0218
    Jackson at New Hackensack – Signal Timing 2016-06-27 – 0218

    On the positive side, a pair of big long wheelbase recumbents stopped in the middle of the lane seem sufficient to trigger the traffic detector!

    T = 3.150 s – Yellow

    Jackson at New Hackensack - Signal Timing 2016-06-27 - 0407
    Jackson at New Hackensack – Signal Timing 2016-06-27 – 0407

    We’re definitely not fast enough off the block; Mary thought she had time for a sip of water. We started rolling less than two seconds after the green appeared, which is as fast as one should enter an intersection around here.

    T = 8.000 s – Red

    Jackson at New Hackensack - Signal Timing 2016-06-27 - 0698
    Jackson at New Hackensack – Signal Timing 2016-06-27 – 0698

    T = 13.000 s – Opposing Green

    Jackson at New Hackensack - Signal Timing 2016-06-27 - 13 s - rear
    Jackson at New Hackensack – Signal Timing 2016-06-27 – 13 s – rear

    In round numbers, it takes us about 15 seconds from a cold start to reach the far side of that intersection. I can do it in a bit less, but Mary can’t, even though we’re in pretty good shape for the shape we’re in.

    As with NYSDOT’s promises about the signal timing on Burnett Blvd, I’m not holding my breath about DCDPW getting in touch with me about that study; if nothing has changed after ten months, it never will.

  • Dishwasher Rack Protectors in PETG

    Our standard dishwasher loadout changed a while back, so I ran off more protectors to fill the bottom rack. The crystalline look of natural PETG is probably wasted in there, even though it puts the old, rather yellowed, PLA protectors to shame:

    Dishwasher Rack Protectors - old PLA new PETG
    Dishwasher Rack Protectors – old PLA new PETG

    Dollops of silicone sealant hold them in place: the bigger the blob, the better the job.

    We don’t activate the drying heater, so the plastic doesn’t get exposed to absurdly high temperatures. As nearly as I can tell, those PLA protectors remain in fine physical condition, even though they’re turning an odd color.

    The support structures peeled out easily with a fingernail pull:

    Dishwasher Rack Protectors - 0.20 mm PETG bridging - detail
    Dishwasher Rack Protectors – 0.20 mm PETG bridging – detail

    PETG doesn’t bridge well, as shown by the gaps between the support ridges. Those 0.20 mm layers seemed skimpy for lightly supported PETG, so I ran another set at 0.25 mm:

    Dishwasher Rack Protectors - 0.25 mm PETG bridging - detail
    Dishwasher Rack Protectors – 0.25 mm PETG bridging – detail

    Not quite enough improvement for a Happy Dance, although fine for the application.

    We look forward to seeing what grows in those little crevices…

  • Inspiron Mini 10 as a 3D Printer Controller

    It turns out that the dual-core Intel Atom Inside an old Dell Mini 10 isn’t up to the demands of rendering modern web design; disk I/O speed has nothing to do with the CPU’s (lack of) ability to chew through multiple layers of cruft adorning what used to be straightforward static HTML.

    So, equipped with Linux Mint / XFCE, it’s now found a new purpose in life:

    SnowWhite back in action
    SnowWhite back in action

    In truth, an Atom isn’t quite up to the demands of modern 3D printing, either, at least in terms of processing a huge G-Code file into a layer-by-layer path preview. Fortunately, Pronterface doesn’t generate the preview until you ask for it: arranging the UI to put the preview on a separate tab eliminates that problem.

    The Mini 10 can dribble G-Code into the printer just fine and looks much cuter than the hulking laptop in the background.

  • Whirlpool Refrigerator Drawer Strut Re-Re-Re-repair

    The support holding the two big drawers below the bottom shelf of our long-suffering Whirlpool refrigerator broke off. Having previously repaired and then replaced the tab holding the strut in place, then added metal skid plates to the bearing surfaces, I’m getting pretty good at fighting this particular bit of entropy to a standstill:

    Refrigerator strut - clamped glue joint
    Refrigerator strut – clamped glue joint

    Adding a few more clamps always make me feel good:

    Refrigerator strut - many clamps
    Refrigerator strut – many clamps

    Although a good solvent-bond joint should be as strong as the original plastic, that’s not saying much: I expect the end of that strut will break off again. Perhaps the central web is wide enough for a few small screws?

  • Solar-Powered Trash Can FAIL

    Some time ago, Vassar deployed Big Belly solar-powered, network-connected, compacting trash cans. We recently walked across the campus to a play …

    Once is happenstance:

    Vassar Old Main - Broken Trash Can 1
    Vassar Old Main – Broken Trash Can 1

    Twice is coincidence:

    Vassar Old Main - Broken Trash Can 2
    Vassar Old Main – Broken Trash Can 2

    Those neatly printed signs suggested a common-mode failure, so we took the long way back to visit my all-time favorite trash can installation. Yup, three times is enemy action:

    Vassar Library - Broken Trash Can 3
    Vassar Library – Broken Trash Can 3

    You can still put trash in the containers through the obvious opening. Perhaps the networking failed?

  • Mini-Lathe: Cover Screw Knobs and Change Gear Protector

    About the third time I removed the mini-lathe’s change gear cover by deploying a 4 mm hex wrench on its pair of looong socket head cap screws, I realized that finger-friendly knobs were in order:

    LMS Mini-lathe cover screw knobs - installed
    LMS Mini-lathe cover screw knobs – installed

    A completely invisible length of 4 mm hex key (sliced off with the new miter saw) runs through the middle of the knob into the screw, with a dollop of clear epoxy holding everything together:

    LMS Mini-lathe cover screw knobs - epoxied
    LMS Mini-lathe cover screw knobs – epoxied

    The 2 mm cylindrical section matches the screw head, compensates for the 1.5 mm recess, and positions the knobs slightly away from the cover:

    LMS Mini-lathe cover screw knob - solid model
    LMS Mini-lathe cover screw knob – solid model

    They obviously descend from the Sherline tommy bar handles.

    I built three of ’em at a time to get a spare to show off and to let each one cool down before the next layer arrives on top:

    LMS Mini-lathe cover screw knobs - on platform
    LMS Mini-lathe cover screw knobs – on platform

    The top and bottom surfaces have Octagram Spiral infill that came out nicely, although it’s pretty much wasted in this application:

    LMS Mini-lathe cover screw knob - Slic3r first layer
    LMS Mini-lathe cover screw knob – Slic3r first layer

    I have no explanation for that single dent in the perimeter.

    The cover hangs from those two screws, which makes it awkward to line up, so I built a shim to support the cover in the proper position:

    LMS Mini-lathe cover support shim - Slic3r preview
    LMS Mini-lathe cover support shim – Slic3r preview

    Nope, it’s not quite rectangular, as the change gear plate isn’t mounted quite square on the headstock:

    LMS Mini-lathe - cover alignment block
    LMS Mini-lathe – cover alignment block

    I decided when if that plate eventually gets moved / adjusted / corrected, I’ll just build a new shim and move on. A length of double-sticky tape holds it onto the headstock.

    Mounting the cover now requires only two hands: plunk it atop the shim, press it to the right so the angled side settles in place, insert screws, and it’s done.

    A short article by Samuel Will (Home Shop Machinist 35.3 May 2016) pointed out that any chips entering the spindle bore will eventually fall out directly into the plastic change gears and destroy them. He epoxied a length of PVC pipe inside the cover to guide the swarf outside, but I figured a tidier solution would be in order:

    LMS Mini-lathe - change gear shield
    LMS Mini-lathe – change gear shield

    The solid model looks just like that:

    LMS Mini-lathe cover shaft shield - Slic3r preview
    LMS Mini-lathe cover shaft shield – Slic3r preview

    The backside of the shield has three M3 brass inserts pressed in place. I marked the holes on the cover by the simple expedient of bandsawing the base of the prototype shield (which I needed for a trial fit), lining it up with the spindle hole, and tracing the screw holes (which aren’t yet big enough for the inserts):

    LMS mini-lathe - cover hole template
    LMS mini-lathe – cover hole template

    Yeah, that’s burned PETG snot around 10 o’clock on the shield. You could print a separate template if you prefer.

    The various diameters and lengths come directly from my lathe and probably won’t be quite right for yours; there’s a millimeter or two of clearance in all directions that might not be sufficient.

    Don’t expect the cover hole to line up with the spindle bore:

    LMS mini-lathe - view through cover and spindle
    LMS mini-lathe – view through cover and spindle

    I should build an offset into the shield that jogs the holes in whatever direction makes the answer come out right, but that’s in the nature of fine tuning; those holes got filed slightly egg-shaped to ease the shield a bit to the right and it’s all good.

    Heck, having the spindle line up pretty closely with the tailstock seems like enough of a bonus for one day.

    The OpenSCAD source code as a GitHub Gist:

    // Tweakage for LMS Mini-Lathe cover
    // Ed Nisley – KE4ZNU – June 2016
    Layout = "Shaft"; // Knob Shim Shaft
    use <knurledFinishLib_v2.scad>
    //- Extrusion parameters must match reality!
    // Print with 2 shells and 3 solid layers
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    HoleWindage = 0.3; // extra clearance to improve hex socket fit
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    //———————-
    // Dimensions
    //- Knobs for cover screws
    HeadDia = 8.5; // un-knurled section diameter
    HeadRecess = 2.0; // … length inside cover surface + some clearance
    SocketDia = 4.0; // hex key size
    SocketDepth = 10.0;
    KnurlLen = 15.0; // length of knurled section
    KnurlDia = 20.0; // … diameter at midline of knurl diamonds
    KnurlDPNom = 12; // Nominal diametral pitch = (# diamonds) / (OD inches)
    DiamondDepth = 1.5; // … depth of diamonds
    DiamondAspect = 4; // length to width ratio
    KnurlID = KnurlDia – DiamondDepth; // dia at bottom of knurl
    NumDiamonds = ceil(KnurlDPNom * KnurlID / inch);
    echo(str("Num diamonds: ",NumDiamonds));
    NumSides = 4*NumDiamonds; // 4 facets per diamond
    KnurlDP = NumDiamonds / (KnurlID / inch); // actual DP
    echo(str("DP Nom: ",KnurlDPNom," actual: ",KnurlDP));
    DiamondWidth = (KnurlID * PI) / NumDiamonds;
    DiamondLenNom = DiamondAspect * DiamondWidth; // nominal diamond length
    DiamondLength = KnurlLen / round(KnurlLen/DiamondLenNom); // … actual
    TaperLength = 0*DiamondLength;
    //- Shim to support cover
    CoverTopThick = 2.0;
    ShimThick = 10.0;
    ShimCornerRadius = 2.0;
    ShimPoints = [[0,0],[60,0],[60,(13.5 – CoverTopThick)],[0,(14.5 – CoverTopThick)]];
    //- Shaft extension to keep crap out of the change gear train
    ID = 0;
    OD = 1;
    LENGTH = 2;
    Shaft = [24.0,30.0,41.0]; // ID=through, OD=thread OD, Length = cover to nut seat
    ShaftThreadLength = 3.0;
    ShaftSides = 6*4;
    ShaftNut = [45,50,16]; // recess around shaft nut, OD = outside of cover
    Insert = [3.5,5.0,8.0]; // 3 mm threaded insert
    NumCoverHoles = 3;
    CoverHole = [Insert[OD],35.0,12.0]; // ID = insert, OD = BCD, LENGTH = screw hole depth
    ShaftPoints = [
    [Shaft[ID]/2,0],
    [ShaftNut[OD]/2,0],
    [ShaftNut[OD]/2,Shaft[LENGTH]],
    [ShaftNut[ID]/2,Shaft[LENGTH]],
    [ShaftNut[ID]/2,Shaft[LENGTH] – ShaftNut[LENGTH]],
    [Shaft[OD]/2, Shaft[LENGTH] – ShaftNut[LENGTH]],
    [Shaft[OD]/2, Shaft[LENGTH] – ShaftNut[LENGTH] – ShaftThreadLength],
    [Shaft[ID]/2, Shaft[LENGTH] – ShaftNut[LENGTH] – ShaftThreadLength],
    ];
    //———————-
    // 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(r=(FixDia + HoleWindage)/2,
    h=Height,
    $fn=Sides);
    }
    //- Build things
    if (Layout == "Knob")
    difference() {
    union() {
    render(convexity=10)
    translate([0,0,TaperLength]) // knurled cylinder
    knurl(k_cyl_hg=KnurlLen,
    k_cyl_od=KnurlDia,
    knurl_wd=DiamondWidth,
    knurl_hg=DiamondLength,
    knurl_dp=DiamondDepth,
    e_smooth=DiamondLength/2);
    color("Orange") // lower tapered cap
    cylinder(r1=HeadDia/2,
    r2=(KnurlDia – DiamondDepth)/2,
    h=(TaperLength + Protrusion),
    $fn=NumSides);
    color("Orange") // upper tapered cap
    translate([0,0,(TaperLength + KnurlLen – Protrusion)])
    cylinder(r2=HeadDia/2,
    r1=(KnurlDia – DiamondDepth)/2,
    h=(TaperLength + Protrusion),
    $fn=NumSides);
    color("Moccasin") // cylindrical extension
    translate([0,0,(2*TaperLength + KnurlLen – Protrusion)])
    cylinder(r=HeadDia/2,h=(HeadRecess + Protrusion),$fn=NumSides);
    }
    translate([0,0,(2*TaperLength + KnurlLen + HeadRecess – SocketDepth + Protrusion)])
    PolyCyl(SocketDia,(SocketDepth + Protrusion),6); // hex key socket
    }
    if (Layout == "Shim")
    linear_extrude(height=(ShimThick)) // overall flange around edges
    polygon(points=ShimPoints);
    if (Layout == "Shaft")
    difference() {
    rotate_extrude($fn=ShaftSides,convexity=5)
    polygon(points=ShaftPoints);
    for (i=[0:NumCoverHoles-1])
    rotate(i*360/NumCoverHoles)
    translate([CoverHole[OD]/2,0,-Protrusion])
    rotate(180/8)
    PolyCyl(Insert[OD],15,8);
    }

    The original doodle with more-or-less actual dimensions and clearances and suchlike:

    Cover to Shaft spacing doodles
    Cover to Shaft spacing doodles
  • Mini-Lathe: Adjusting the Carriage Retaining Strips

    The mini-lathe carriage rides on its craptastically finished ways, with a pair of steel strips holding it in place. They’re supposed to be flat against the bed, with a nice oil layer providing a slippery surface. Well, apart from lots and lots of oil, that’s not their as-delivered condition:

    LMS Mini-lathe - carriage front retainer - as received
    LMS Mini-lathe – carriage front retainer – as received

    The rear retainer:

    LMS Mini-lathe - carriage rear retainer - as received
    LMS Mini-lathe – carriage rear retainer – as received

    Adjusting both retaining strips works best without the apron in place, which works best without the leadscrew in place, which requires dismantling the change gear quadrant and messing around with the pieces. Instead, disengage the half nuts (which is how they should be, anyway), remove the two big apron screws, then gently maneuver the apron out of the way off to the right. It’ll rest against the chip pan and hang from the half nuts, but won’t get into any trouble unless you do something stupid.

    Remove both strips, wipe off the excess oil, then align each strip in turn:

    Clamp the strip in place to ensure it’s flat against the underside of the bed way:

    LMS Mini-lathe - carriage front retainer - clamped
    LMS Mini-lathe – carriage front retainer – clamped

    Twiddle the two setscrews until they’re just barely touching the underside of the carriage (thus ready to hold the strip more-or-less in the proper position), snug the three caps screws, test the fit by sliding the carriage back and forth, and iterate until satisfied. I found the setscrews needed quite a bit more than “barely touching” before the cap screws were tight enough, but your experience may differ.

    Maybe 10 minutes of fiddling changed the overall carriage fit from “barely pushable” to “pretty good”, even with the original (lack of) way finishing in full effect:

    LMS Mini-lathe - carriage flat way - detail
    LMS Mini-lathe – carriage flat way – detail

    My lathe has a loose spot a few inches to the right of the chuck, but it’s now reasonably smooth along the entire length.

    Adjusting the cross-slide and compound gibs will definitely improve their disposition, too.