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.

Tag: Improvements

Making the world a better place, one piece at a time

  • MPCNC: Relocated Camera

    The original camera position put it close to the MPCNC’s DW660 spindle:

    MPCNC - original camera location
    MPCNC – original camera location

    Unfortunately, it sat slightly too close to the gantry roller along the X-axis for comfort.

    The effort required to pry the mount off its hot-melt glue bed showed it wasn’t ever going to shake loose, so I fired up the glue gun and stuck it to a better spot on the XY assembly:

    MPCNC - relocated camera - front view
    MPCNC – relocated camera – front view

    Seen from the side:

    MPCNC - relocated camera - side view
    MPCNC – relocated camera – side view

    Bonus: it’s now trivially easy to tweak the locking screw!

    Realigning the camera and recalibrating its offset proceeded as before.

  • Zeiss Ikon Ikoflash 4

    A flash gun is hard to beat for straight-up nostalgia:

    Zeiss Ikon Ikoblitz 4 - box
    Zeiss Ikon Ikoblitz 4 – box

    This Zeiss Ikon Ikoblitz 4 is in fine shape:

    Zeiss Ikon Ikoblitz 4 - front
    Zeiss Ikon Ikoblitz 4 – front

    And no more grubby than one might expect after all those decades:

    Zeiss Ikon Ikoblitz 4 - back
    Zeiss Ikon Ikoblitz 4 – back

    I distinctly remember Flash Guide Numbers:

    Zeiss Ikon Ikoblitz 4 - guide-number calculator
    Zeiss Ikon Ikoblitz 4 – guide-number calculator

    The red dial scale has the Guide Numbers (aperture × feet) and the lower black dial scale gives the lens apertures. The manual doesn’t mention the black figures above the red Guide Numbers; they’re metric Guide Number (aperture × meters), which would have been obvious back in the day.

    The tidy shell slides off when you release a latch in the back:

    Zeiss Ikon Ikoblitz 4 - front - stowed
    Zeiss Ikon Ikoblitz 4 – front – stowed

    Then the reflector unfurls:

    Zeiss Ikon Ikoblitz 4 - front unfurled
    Zeiss Ikon Ikoblitz 4 – front unfurled

    Mirabile dictu, the previous owner removed the 15 V “hearing aid” battery (Eveready 504, 60 mA·h in the 504A alkaline version) before storing the flash, leaving the contacts in pristine condition:

    Zeiss Ikon Ikoblitz 4 - CR123A test fit
    Zeiss Ikon Ikoblitz 4 – CR123A test fit

    A 3 V CR123A primary lithium cell snaps perfectly into the battery holder, which I define as a Good Omen: a dab of circuitry could turn this into self-powered and highly attractive Art. This would be one of the very few applications well-suited for the coldest blue-white LEDs.

    One could adapt an A23 12 V alkaline battery (33 mA·h) to the holder, at the cost of half the capacity.

    The silver shield just to the left of the battery conceals a 250 μF (!) nonpolarized capacitor.

    One could build a bayonet-base (GE #5 / Press 25) adapter or poke a doodad with a 9 mm cylindrical base into the M2 bulb adapter (unrelated to my M2 printer):

    Zeiss Ikon Ikoblitz 4 - bulb adapter
    Zeiss Ikon Ikoblitz 4 – bulb adapter

    Herewith, the Zeiss Ikon Ikoblitz 4 – Instruction Manual, should you need more details.

    This hardware may be a progenitor of Gibson’s vat-grown Zeiss Ikon eyes.

  • Digital Chicken

    Because you get white eggs from white chickens and brown eggs from brown chickens (*), this one came from a brown chicken with the digital option:

    Date-coded brown egg
    Date-coded brown egg

    The egg matched the carton date stamp, so this must be an additional part of the process.

    Some casual searching shows egg shell printing is a production-line thing.

    I suppose RFID-per-egg will eventually be the Next New Thing.

    (*) Yes, and chocolate milk from brown cows. Work with me on this, OK?

  • MPCNC: Ground Shaft Pen Holder

    Drilling a pair of holes into a length of ground steel shaft turned it into a holder for a Sakura Micron pen:

    DW660 Pen Holder - printed plastic vs ground steel
    DW660 Pen Holder – printed plastic vs ground steel

    The aluminum ring epoxied to the top keeps it from falling completely through the linear bearing.

    The hole sizes are the nearest inch drills matching the pen’s hard metric sizes:

    Ground 12 mm rod - Sakura pen drill diameters
    Ground 12 mm rod – Sakura pen drill diameters

    While I was at the lathe, I turned another layer of epoxy on the printed holder down to a consistent 11.95+ OD. It fits the bearing nearly as well as the steel shaft, although it’s not quite as smooth.

    The steel version weighs about 20 g with the pen, so it applies about the same downforce on the pen nib as the HP 7475A plotter. The force varies from about 19 g as the Z axis moves upward to 23 g as it move downward, so the stiction amounts to less than 10% of the weight:

    DW660 Pen Holder - ground shaft
    DW660 Pen Holder – ground shaft

    However, the more I ponder this setup, the less I like it.

    When the Z-axis moves downward and the nib hits the paper, it must decelerate the weight of the pen + holder + ballast within a fraction of a millimeter, without crushing the nib. If the pen moves downward at 3000 mm/min = 50 mm/s, stopping in 0.3 mm requires an acceleration of 4.2 m/s² and a 20 g = 2/3 oz mass will apply 0.08 N = 0.3 oz to the nib. Seems survivable, but smashing the tip a few hundred times while drawing the legends can’t possibly be good for it.

    Also, the tool length probe switch trips at 60 (-ish) g, which means the pen can’t activate the switch. Adding a manual latch seems absurd, but you can get used to anything if you do it enough.

  • Propane Tank QD Fitting Adapter, PETG Edition

    Smoking bacon during the winter months brought the third tank into play, requiring the POL-to-QD adapter I’d had in the drawer for just such an occasion. Not much to my surprise, the old PLA fitting adapter snapped along the layers near the outside end of the triangular snout:

    IMG_20180408_125018
    IMG_20180408_125018

    So I ran off the two orange ones in PETG with six perimeter layers and 50% infill density:

    Propane QD Adapter Tool - Slic3r
    Propane QD Adapter Tool – Slic3r

    Those should last roughly forever …

    The OpenSCAD source code as a GitHub Gist:

    // Propane tank QD connector adapter tool
    // Ed Nisley KE4ZNU November 2012
    // 2018-04-08 toss MCAD includes overboard
    //- Extrusion parameters must match reality!
    // Print with about half a dozen perimeter threads and 50% infill
    ThreadThick = 0.25;
    ThreadWidth = 2.0 * ThreadThick;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    //———————-
    // Dimensions
    WrenchSize = (5/8) * inch; // across the flats
    WrenchThick = 10;
    NoseDia = 8.6;
    NoseLength = 9.0;
    LockDia = 12.5;
    LockRingLength = 1.0;
    LockTaperLength = 1.5;
    TriDia = 15.1;
    TriWide = 12.2; // from OD across center to triangle side
    TriOffset = TriWide – TriDia/2; // from center to triangle side
    TriLength = 9.8;
    NeckDia = TriDia;
    NeckLength = 4.0;
    //———————-
    // 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);
    }
    /*
    module ShowPegGrid(Space = 10.0,Size = 1.0) {
    Range = floor(50 / Space);
    for (x=[-Range:Range])
    for (y=[-Range:Range])
    translate([x*Space,y*Space,Size/2])
    %cube(Size,center=true);
    }
    */
    //——————-
    // Build it…
    $fn = 4*6;
    //ShowPegGrid();
    union() {
    translate([0,0,(WrenchThick + NeckLength + TriLength – LockTaperLength – LockRingLength + Protrusion)])
    cylinder(r1=NoseDia/2,r2=LockDia/2,h=LockTaperLength);
    translate([0,0,(WrenchThick + NeckLength + TriLength – LockRingLength)])
    cylinder(r=LockDia/2,h=LockRingLength);
    difference() {
    union() {
    translate([0,0,WrenchThick/2])
    cube([WrenchSize,WrenchSize,WrenchThick],center=true);
    cylinder(r=TriDia/2,h=(WrenchThick + NeckLength +TriLength));
    cylinder(r=NoseDia/2,h=(WrenchThick + NeckLength + TriLength + NoseLength));
    }
    for (a=[-1:1]) {
    rotate(a*120)
    translate([(TriOffset + WrenchSize/2),0,(WrenchThick + NeckLength + TriLength/2 + Protrusion/2)])
    cube([WrenchSize,WrenchSize,(TriLength + Protrusion)],center=true);
    }
    }
    }
  • Streaming Radio Player: CE Timing Tweak

    Adding delays around the SPI control signal changes reduced the OLED glitch rate from maybe a few a week  to once a week, but didn’t completely solve the problem.

    However, (nearly) all the remaining glitches seem to occur while writing a single row of pixels, which trashes the rest of the display and resolves on the next track update. That suggests slowing the timing during the initial hardware setup did change the results.

    Another look at the Luma code showed I missed the Chip Enable (a.k.a. Chip Select in the SH1106 doc) change in serial.py:

    def _write_bytes(self, data):
        gpio = self._gpio
        if self._CE:
            time.sleep(1.0e-3)
            gpio.output(self._CE, gpio.LOW)  # Active low
            time.sleep(1.0e-3)
    
        for byte in data:
            for _ in range(8):
                gpio.output(self._SDA, byte & 0x80)
                gpio.output(self._SCLK, gpio.HIGH)
                byte <<= 1
                gpio.output(self._SCLK, gpio.LOW)
    
        if self._CE:
            time.sleep(1.0e-3)
            gpio.output(self._CE, gpio.HIGH)
    

    What remains unclear (to me, anyway) is how the code in Luma's bitbang class interacts with the hardware-based SPI code in Python’s underlying spidev library. I think what I just changed shouldn’t make any difference, because the code should be using the hardware driver, but the failure rate is now low enough I can’t be sure for another few weeks (and maybe not even then).

    All this boils down to the Pi’s SPI hardware interface, which changes the CS output with setup / hold times measured in a few “core clock cycles”, which is way too fast for the SH1106. It seems there’s no control over CS timing, other than by changing the kernel’s bcm2708 driver code, which ain’t happening.

    The Python library includes a no_cs option, with the caveat it will “disable use of the chip select (although the driver may still own the CS pin)”.

    Running vcgencmd measure_clock core (usage and some commands) returns frequency(1)=250000000, which says a “core clock cycle” amounts to a whopping 4 ns.

    Forcibly insisting on using Luma’s bitbang routine may be the only way to make this work, but I don’t yet know how to do that.

    Obviously, I should code up a testcase to hammer the OLED and peer at the results on the oscilloscope: one careful observation outweighs a thousand opinions.

  • Fluorescent Shop Light Ballasts, Redux

    As usual, several shoplights didn’t survive the winter, so I gutted and rebuilt them with LED tubes. Even the fancy shoplights with genuine electronic ballasts survive less than nine years, as two of those eight “new” lamps have failed so far.

    The dead ballast looks the same as it did before:

    Electronic ballast - label
    Electronic ballast – label

    Some deft work with a cold chisel and my Designated Prydriver popped the top to reveal a plastic-wrapped circuit board:

    Electronic ballast - interior wrapped
    Electronic ballast – interior wrapped

    Perhaps the flexy gunk reduces the sound level:

    Electronic ballast - interior A
    Electronic ballast – interior A

    While also preventing casual failure analysis and organ harvesting:

    Electronic ballast - interior B
    Electronic ballast – interior B

    The black gunk smells more like plastic and less like old-school tar. It’s definitely not a peel-able conformal coating.

    One the other paw, the two magnetic ballasts in another lamp sported actual metal-film capacitors, which I harvested and tossed into the Big Box o’ Film Caps:

    Shoplight choke ballast - film cap
    Shoplight choke ballast – film cap

    If a dying ballast didn’t also kill its fluorescent tube(s), I’d be less annoyed. I’m running the remaining tubes through the surviving fixtures, but the end is nigh for both.

    The new LED tubes produce more light than the old fluorescents, although I still don’t like their 6500 K “daylight glow” color.