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

  • Vista Point of Sale Terminal Boot Screen

    Spotted this behind the Customer Service desk at the local movie theater (or whatever you call ’em these days):

    Vista POS boot screen
    Vista POS boot screen

    I suppose those are the three things you do a lot of…

    The next time we passed by, the screen displayed a more-or-less standard screensaver.

  • 60 kHz Preamp: Simulation

    This circuitry descends directly from a QEX article (Nov/Dec 2015, p 13) by John Magliacane, KD2BD: A Frequency Standard for Today’s WWVB. The key part, at least for me, is a 60 kHz preamplifier using a resonant-tuned loop antenna and an instrumentation amplifier to reject common-mode interference from local electrostatic fields.

    I tinkered up an LTSpice IV simulation using somewhat more contemporary parts (clicky for more dots):

    60 kHz Preamp - LTSpice schematic
    60 kHz Preamp – LTSpice schematic

    The simulation quickly revealed that the original schematic interchanged the filter amp’s pins 2 and 3; the filter doesn’t work at all when you swap the + and – inputs.

    The stuff in the dotted box fakes the loop antenna parameters, with a small differential AC signal that injects roughly the right voltage to simulate a nominal 100 µV/m WWVB field strength. I biased the center tap to the DC virtual ground at + 10 V and bypassed it to circuit common, so the RF should produce a nice differential signal about the virtual ground. The 5 kΩ resistors provide ESD protection and should help tamp down damage from nearby lightning strikes and suchlike.

    It works pretty much as you’d expect:

    60 kHz Preamp - Frequency Response
    60 kHz Preamp – Frequency Response

    The LT1920 is mostly flat with 40 dB gain out through 60 kHz, although the actual hardware becomes a nice oscillator with that much gain; my layout and attention to detail evidently leaves a bit to be desired. The LF353 implements a multiple-feedback bandpass filter with about 20 dB of gain; its 4 MHz GBW gives it enough headroom. The LT1010 can drive 150 mA and, with a bit of luck and AC coupling, will feed a 50 Ω SDR input just fine.

    This obviously turns into a Circuit Cellar column: March 2017, if you’re waiting by the mailbox.

  • Monthly Image: Red Squirrel

    This red squirrel has the reddest tail of all:

    Red squirrel on patio - front
    Red squirrel on patio – front

    Those white eye rings help carry off the whole “insufferably cute” thing:

    Red squirrel on patio - side
    Red squirrel on patio – side

    We often see them scampering through the pine treee out back, where they pause to strip the seeds off unopened pine cones and toss the empties on the driveway.

    Taken through two layers of wavy 1955-era glass with the Sony DSC-H5.

  • Respooling Stainless Steel Thread

    For various reasons, I needed a smaller quantity of that stainless steel thread / yarn, so I mooched an empty spool from Mary, ran a bolt through it with washers + nut on the far end, chucked the bolt in the lathe, and ran the spindle backwards at the slowest speed:

    Stainless steel thread - smaller spool
    Stainless steel thread – smaller spool

    I started by letting the big spool unroll from the side, but that produced horrible twists in the slack thread. Remembering the lesson from our previous thread spool adventure, I put it on the floor and let the thread pull from the top:

    Stainless steel thread - unwinding spool
    Stainless steel thread – unwinding spool

    It still accumulated a huge twist between the two spools, even while guiding it hand-over-hand onto the rotating spool. Either the factory lays the thread on the large spool with a built-in twist or, more likely, a multi-strand steel thread behaves like a spring, no matter what anybody wants, and comes off the spool with a nasty case of inherent vice.

    Memo to Self: don’t let stainless steel thread slide through your hands under power, because some of the fuzz visible in the top picture will stay with you.

  • 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");
    }

  • The Thrilling Adventures of Lovelace and Babbage

    We’re reading Sydney Padua’s The Thrilling Adventures of Lovelace and Babbage as our evening story, so I gave a Lightning talk at the MHV LUG meeting last week:

    MHVLUG – Lovelace and Babbage – Book Report

    Earlier versions of the comics graphic novel are on her blog, including several stories that didn’t make the final book cut.

    Highly recommended; if you don’t have wet eyes occasionally, you’re entirely too hard-hearted.

    You should read Ada’s Analytical Engine Programming Guide; that’s not her title, but that’s what she wrote. If you’ve ever done any assembly language programming, you’ll feel right at home.

    Also, get historical documents, commentary, and Analytical Engine emulators (!) at Fourmilab.

    Makes me wish I lived in that Pocket Universe, it does:

    econ3_005 - Brunel
    econ3_005 – Brunel

    That picture is ©www.sydneypadua.com, Creative Commons Attribution-NonCommercial 4.0 International License. There exist T-shirts & mugs.

  • Pheasant Sighting

    I rolled the bike around the corner of the garage, saw something move, and spotted an exceedingly agitated Ring-necked Pheasant atop the shredded leaf compost:

    Pheasant in compost bin
    Pheasant in compost bin

    He ran back and forth on the pile inside the cage, apparently having forgotten he had wings, while I fumbled with the camera. Just after I took the picture, he managed a short-field takeoff and flew away through the trees away from me.

    A pair of female pheasants then emerged from the forsythia behind the pile at a dead run, made a hard turn to their left, and ran off in the general direction the male had flown. One of the pair seemed smaller and may have been a chick this year, but it’s hard to say.

    We haven’t seen any pheasants in the yard before and hope they return …

    Taken with the Canon SX-230HS through a layer of deer netting, alas.