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: Machine Shop

Mechanical widgetry

  • Under-cabinet Lamp Brackets

    These blocky brackets hold a pair of LED light strips in the recess under our 1955-era kitchen cabinets, to let the light cover the entire counter:

    Kitchen Light Bracket
    Kitchen Light Bracket

    The large holes are for drywall screws into the cabinet, the smaller ones for 2.5 mm SHCS holding the strips to the brackets. I drilled those little holes out and installed 4-40 brass inserts; this being a one-off installation, the source code doesn’t include that change.

    There’s not much to see after they’re installed:

    Under-cabinet light bracket - center joiner
    Under-cabinet light bracket – center joiner

    I’d hoped to swap the ends of the strip to power it from the right end, but the guts aren’t symmetric and you can’t just flip it end-for-end:

    eShine LED Under-cabinet light - disassembled
    eShine LED Under-cabinet light – disassembled

    That’s an add-on unit without the IR proximity sensor circuitry and power switch, but with the same overall layout. You take it apart by pressing the obvious latch on one of the endcaps, then gently prying the plastic away from the aluminum extrusion, taking care not to wreck the coaxial socket. Reassemble in reverse order.

    The OpenSCAD source code as a GitHub Gist:


    // Mounting brackets for eShine under-counter LED lights
    // Ed Nisley KE4ZNU December 2016
    //- 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
    MountHeight = (1 + 3/16) * inch – 5.0; // under-cab space – base thickness
    THREADOD = 0;
    HEADOD = 1;
    LENGTH = 2;
    WoodScrew = [4.0,8.3,41]; // 8×1-5/8 Deck screw
    WoodScrewRecess = 2.0;
    LEDScrew = [2.0,4.5,8.0]; // M2.5×10 SHCS
    LEDScrewOffset = [1.0,8.2,0]; // hole offset from center point
    JoinerLength = 18.1; // joiner between strips
    EndBlock = [11.0,28.5,MountHeight]; // mounting block size for ends
    //———————-
    // 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);
    }
    // End mounting block with proper hole offsets
    module EndMount(Side = "L") {
    LSO = [((Side == "L") ? 1 : -1)*LEDScrewOffset[0],LEDScrewOffset[1],LEDScrewOffset[2]];
    difference() {
    union() {
    cube(EndBlock,center=true);
    translate([0,1.5*WoodScrew[1],0])
    cube(EndBlock,center=true);
    }
    translate(LSO + [0,0,-EndBlock[2]])
    rotate(180/4)
    PolyCyl(LEDScrew[THREADOD],2*EndBlock[2],4);
    translate([0,(EndBlock[1] + 1.5*WoodScrew[1])/2,-EndBlock[2]])
    rotate(180/6)
    PolyCyl(WoodScrew[THREADOD],2*EndBlock[2],6);
    translate([0,(EndBlock[1] + 1.5*WoodScrew[1])/2,(EndBlock[2]/2 – WoodScrewRecess)])
    rotate(180/6)
    PolyCyl(WoodScrew[HEADOD],WoodScrewRecess + Protrusion,6);
    translate([((Side == "L") ? 1 : -1)*EndBlock[0]/2,0,0])
    rotate([90,0,((Side == "L") ? 1 : -1)*90])
    translate([0,0,-2*ThreadThick])
    linear_extrude(height=4*ThreadThick,convexity=3)
    text(Side,font=":style=bold",valign="center",halign="center");
    }
    }
    module MidMount() {
    XOffset = (JoinerLength + EndBlock[0])/2;
    union() {
    translate([XOffset,0,0])
    EndMount("L");
    cube([JoinerLength,EndBlock[1],EndBlock[2]] + [2*Protrusion,0,0],center=true);
    translate([-XOffset,0,0])
    EndMount("R");
    }
    }
    //———-
    // Build them
    translate([0,0,EndBlock[2]/2]) {
    translate([-(JoinerLength + 2*EndBlock[0]),0,0])
    EndMount("L");
    MidMount();
    translate([(JoinerLength + 2*EndBlock[0]),0,0])
    EndMount("R");
    }

  • Satco PAR30 LED Floodlight vs. Halogen

    I replaced a dead 75 W halogen PAR30 bulb over the kitchen sink with a Satco S9415 LED bulb that was, at the time, advertised as “75 W equivalent”:

    Satco S9415 PAR30 LED Bulb - specs
    Satco S9415 PAR30 LED Bulb – specs

    It’s noticeably less bright than the surviving halogen bulb, which is what you’d expect when 950 lm goes head-to-head with 1100+ lm (based on casual searching), but with a similar color temperature and beam pattern, so it’s Good Enough. I should have bought two and converted the halogens into glass sculptures.

    The difference between the 22.8 year Life and the 3 Year Warranty always seems amusing. The warranty requires returning the bulb, so that’s about useless …

  • Kinesis Freestyle2 Keyboard vs. Linux

    My old Microsoft Comfort Curve keyboard having gotten on in years, I picked up a Kinesis Freestyle2 (KB800B for PC) split keyboard:

    Kinesis Freestyle2 - desk layout
    Kinesis Freestyle2 – desk layout

    The little hinged dingus (“Pivot Tether”) between the halves (“Keying Modules”) has two posts that pop into into sockets on the back of the halves and are retained by the two sliding latches. The cord connecting the halves allows 9 inches of separation; I don’t need that much, but more than zero seemed about right.

    Kinesis also sells various staggeringly expensive (IMO) doodads that attach to the back of the keyboard to “tent” the middle upward with varying degrees of refinement. None of the doodads offer to raise the back of the keyboard, which I vastly prefer to the current flat or reverse-tilted recommendations.

    The keyboard & trackballs rest on a homebrew shelf that slides out from where the desk used to have a center drawer, which puts the keyboard slightly above elbow height (heck, slightly above thigh height), whereupon tilting the keyboard puts the keys exactly where they should be. I bandsawed some wood into vaguely triangular sticks, topped them with foam sheets, and tinkered for best tilt. Works for me, anyhow.

    The Compatibility section of the Freestyle2 User Manual describes the “special driverless hot keys”: Most will also work with Linux. Four of them do not work, to the extent that they don’t even send key codes to exv. Some searching suggests this is an intractable problem, for reasons that make no sense to me. Their HID Usage Codes, whatever that might mean:

    Kinesis Freestyle2 - inert key codes
    Kinesis Freestyle2 – inert key codes

    That’s only a minor inconvenience; I prefer a physical calculator and don’t spend much of my life listening to anything through the headphones.

    For whatever it’s worth, the scroll ring on the most recent warranty replacement Kensington Expert “Mouse” (I think it’s the third) has worked flawlessly for years; they seem to have fixed the sudden death syndrome.

  • Sony HDR-AS30V vs. Lithium Ion 18650 Cells

    These items came near enough to produce an irresistible force:

    Sony HDR-AS30V vs 18650 cells - side view
    Sony HDR-AS30V vs 18650 cells – side view

    How can you look at that layout and not jump to the obvious conclusion?

    The front view suggests enough room for a stylin’ case:

    Sony HDR-AS30V vs 18650 cells - end view
    Sony HDR-AS30V vs 18650 cells – end view

    You’d need only one cell for the camera; I happened to have two in my hand when the attractive force hit.

    The camera is 24.5 ⌀ x 47 tall x 71.5 overall length (67.8 front-to-door-seating-plane).

    The ATK 18650 cells are 19 ⌀ x 69 long, with the overlong length due to the protection PCB stuck on the + end of the cylinder. You can get shorter unprotected cells for a bit less, which makes sense if you’re, say, Telsa Motors and building them into massive batteries; we mere mortals need all the help we can get to prevent what’s euphemistically called “venting with flame“.

    Although I like the idea of sliding the cell into a tubular housing with a removable end cap, it might make more sense to park the cell over the camera in a trough with leaf-spring contacts on each end and a lid that snaps over the top. That avoids threaded fittings, figuring out how to get an amp or so out of the removable end cap contact, and similar imponderables.

    think it’s possible to drill a hole through the bottom of the camera at the rear of the battery compartment to pass a cable from a fake internal cell to the external cell. Some delicate probing will be in order.

    In round numbers, those 18650 cells allegedly have three times the actual capacity of the camera’s flat battery and cost about as much as the not-so-cheap knockoff camera cells I’ve been using.

  • Improvised Repairs Done Wrong

    Mary’s relatives encountered this repair in a rental flat during Thanksgiving week:

    Door handle - hex head bolt
    Door handle – hex head bolt

    Don’t have a hex bolt with the right thread? No problem: just use a sheet-metal screw, perhaps with a self-drilling point:

    Door handle - metal screw
    Door handle – metal screw

    Those hex heads let you apply more torque with less risk of stabbing yourself in the palm, which strikes me as an all-around Good Thing. I prefer socket-head cap screws, myself, but I’ll admit they’re an acquired taste.

    I’d like to think I wouldn’t do that …

  • J5-V2 700 lm Flashlight: QC FAIL, Redux

    The inside of the replacement J5 V2 Tactical Flashlight doesn’t have quite as much dirt on the LED emitter, but it’s still pretty bad:

    J5-V2 Flashlight - LED crud - second unit
    J5-V2 Flashlight – LED crud – second unit

    The small white dingus at about 10 o’clock seems to be a plastic shred stuck on end to the emitter lens. Here’s a better look, rotated a quarter-turn counterclockwise:

    J5-V2 Flashlight - LED crud detail - second unit
    J5-V2 Flashlight – LED crud detail – second unit

    There’s also an alien egg glued to the heatsink beside the LED:

    J5-V2 Flashlight - random pellet - second unit
    J5-V2 Flashlight – random pellet – second unit

    I’m hoping it’s another random plastic blob.

    There’s no point in returning this one; it’ll suffice for my purposes. However, given two random samples, I’d say the J5 Tactical Flashlight factory, wherever it may be in China, is really filthy.

    I’d hoped that paying a bit more for a “tactical” flashlight, instead of going bottom dollar, would yield a better product. Maybe it did?

  • Kenmore Progressive Vacuum Tool Adapters: Second Failure

    Pretty much as expected, the dust brush nozzle failed again, adjacent to the epoxy repair:

    Dust brush adapter - second break
    Dust brush adapter – second break

    A bit of rummaging turned up some ¾ inch Schedule 40 PVC pipe which, despite the fact that no plumbing measurement corresponds to any physical attribute, had about the right OD to fit inside the adapter’s ID:

    Dust brush - PVC reinforcement
    Dust brush – PVC reinforcement

    The enlarged bore leaves just barely enough space for a few threads around the circumference. Fortunately, the pipe OD is a controlled dimension, because it must fit inside all the molded PVC elbows / tees / caps / whatever.

    The pipe ID isn’t a controlled dimension and, given that the walls seemed far too thick for this purpose, I deployed the boring bar:

    Dust brush adapter - reinforced tube - boring
    Dust brush adapter – reinforced tube – boring

    That’s probably too much sticking out of the chuck, but sissy cuts saved the day. The carriage stop keeps the boring bar 1 mm away from the whirling chuck.

    Bandsaw it to length and face the ends:

    Dust brush adapter - reinforcement
    Dust brush adapter – reinforcement

    The PVC tube extends from about halfway along the steep taper from the handle fitting out to the end, with the section closest to the handle making the most difference.

    Ram it flush with the end:

    Dust brush adapter - reinforced tube - detail
    Dust brush adapter – reinforced tube – detail

    I thought about gluing it in place, but it’s a sufficiently snug press fit that I’m sure it won’t go anywhere.

    Natural PETG probably isn’t the right color:

    Dust brush adapter - reinforced tube - installed
    Dust brush adapter – reinforced tube – installed

    Now, let’s see how long that repair lasts …

    The OpenSCAD source code as a GitHub Gist:

    //——————-
    // eBay horsehair dusting brush
    // Hacked for 3/4" Schedule 40 PVC stiffening tube
    module DustBrush() {
    union() {
    translate([0,0,40.0])
    rotate([180,0,0])
    difference() {
    union() {
    cylinder(d1=EndStop[OD1],d2=31.8,h=10.0);
    translate([0,0,10.0 – Protrusion])
    cylinder(d1=32.0,d2=30.0,h=30.0 + Protrusion);
    }
    translate([0,0,-Protrusion])
    cylinder(d1=26.0,d2=24.0,h=100);
    translate([0,0,-Protrusion]) // 3/4 inch Sch 40 PVC
    PolyCyl(27.0,100);
    }
    translate([0,0,40.0 – Protrusion])
    MaleFitting();
    }
    }