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: Repairs

If it used to work, it can work again

  • Wireless Numeric Keypad vs. AmazonBasics AAA Alkaline: Another Data Point

    Wireless Numeric Keypad vs. AmazonBasics AAA Alkaline: Another Data Point

    Looks like a trend to me:

    Wireless keypad - 6 year battery
    Wireless keypad – 6 year battery

    Of course, past performance does not guarantee future results, because Amazon surely has gone through more white-label suppliers in the last half-dozen years than I can count.

  • GCMC XY Axis Calibration Target

    GCMC XY Axis Calibration Target

    The CNC-3018XL drawing the scales on a Tek Circuit Computer disagreed with the MPCNC cutting the perimeter. The Y axis edges looked OK:

    Tek CC - 2021-11 - Y detail
    Tek CC – 2021-11 – Y detail

    But the cut on the X axis edges went too close to the tips:

    Tek CC - 2021-11 - X detail
    Tek CC – 2021-11 – X detail

    I conjured a calibration target to help measure the two machines:

    Cal Target - CNC3018XL
    Cal Target – CNC3018XL

    The X- side of the plot gives the general idea:

    CNC-3018XL - Backlash Test - 400step-mm
    CNC-3018XL – Backlash Test – 400step-mm

    The vertical lines consist of two halves, drawn in order from left to right on the top and right to left on the bottom, meeting in the middle at the Y=0 axis. If they do, in fact, meet in the middle, then there’s no problem with backlash.

    The 25 mm distance between adjacent lines verifies the linear calibration; the total distance along the X and Y axes provides more travel for more error accumulation.

    The circles provide some reassurance the machine can draw a smooth circle, because they come from GRBL’s (or whatever) G2 G-Code commands, not a linear approximation.

    Spoiler: after a considerable amount of drawing, measuring, and muttering, the problem emerged from the CNC-3018XL’s X-axis leadscrew:

    Cal Target - 400 step-mm - merged
    Cal Target – 400 step-mm – merged

    It’s half a millimeter short on each end!

    More on this tomorrow …

    The GCMC source code as a GitHub Gist:

    (epilog begins)
    (bCNC may regard plot as done before this returns)
    M2
    (epilog ends)
    view raw epilog.gcmc hosted with ❤ by GitHub
    (prolog begins)
    G17 (XY plane)
    G21 (mm)
    G40 (no cutter comp)
    G49 (no tool length comp)
    G80 (no motion mode)
    G90 (abs distance)
    G94 (units per minute)
    (prolog ends)
    view raw prolog.gcmc hosted with ❤ by GitHub
    // Grid pattern to check XY scaling
    // Ed Nisley KE4ZNU – 2021-11
    // gcmc -P 4 –pedantic –prolog prolog.gcmc –epilog epilog.gcmc –output 'Scale Grid.ngc' 'Scale Grid.gcmc'
    include("engrave.inc.gcmc");
    FALSE = 0;
    TRUE = !FALSE;
    //—–
    // Define useful constants
    SafeZ = [-,-,10.0mm]; // above all obstructions
    TravelZ = [-,-,2.0mm]; // within engraving / milling area
    PenZ = [-,-,-1.0mm]; // depth for good inking
    PenSpeed = 2000mm;
    //—–
    // Overall values
    PlotSize = [250mm,200mm,-];
    comment("PlotSize: ",PlotSize);
    GridSize = [25mm,25mm,-];
    Margins = [5mm,5mm,-];
    CenterOD = 5.0mm;
    TextFont = FONT_HSANS_1_RS; // single stroke stick font
    TextSize = 3.0 * [1.0mm,1.0mm];
    //—–
    // Draw it
    feedrate(PenSpeed);
    comment("Draw title info");
    tp = scale(typeset("Scale & Backlash Test Pattern",TextFont),TextSize);
    tp += [-PlotSize.x/2 + GridSize.x/2,PlotSize.y/2 – GridSize.y/2,-];
    engrave(tp,TravelZ.z,PenZ.z);
    tp = scale(typeset("Grid " + GridSize,TextFont),TextSize);
    tp += [-PlotSize.x/2 + GridSize.x/2,PlotSize.y/2 – GridSize.y/2 – 1.5*TextSize.y,-];
    engrave(tp,TravelZ.z,PenZ.z);
    tp = scale(typeset("F " + PenSpeed + "/min",TextFont),TextSize);
    tp += [-PlotSize.x/2 + GridSize.x/2,PlotSize.y/2 – GridSize.y/2 – 3.0*TextSize.y,-];
    engrave(tp,TravelZ.z,PenZ.z);
    tp = scale(typeset("Ed Nisley – KE4ZNU",TextFont),TextSize);
    tp += [-PlotSize.x/2 + GridSize.x/2,-(PlotSize.y/2 – GridSize.y/2),-];
    engrave(tp,TravelZ.z,PenZ.z);
    tp = scale(typeset("softsolder.com",TextFont),TextSize);
    tp += [-PlotSize.x/2 + GridSize.x/2,-(PlotSize.y/2 – GridSize.y/2 + 1.5*TextSize.y),-];
    engrave(tp,TravelZ.z,PenZ.z);
    comment("Mark center point");
    goto(SafeZ);
    goto([CenterOD/2,0,-]);
    move(PenZ);
    circle_cw([0,0]);
    comment("Label axes");
    tp = scale(typeset("X+",TextFont),TextSize);
    tp += [GridSize.x + 0.5*TextSize.x,-TextSize.y/2,-];
    engrave(tp,TravelZ.z,PenZ.z);
    tp = scale(typeset("Y+",TextFont),TextSize);
    tp += [-TextSize.x/2,GridSize.y + 0.5*TextSize.y,-];
    engrave(tp,TravelZ.z,PenZ.z);
    comment("Draw left-to-right");
    tp = scale(typeset("L to R →",TextFont),TextSize);
    tp += [-PlotSize.x/2 + GridSize.x/2 – tp[-1].x/2,GridSize.y/2,-];
    engrave(tp,TravelZ.z,PenZ.z);
    goto([-(PlotSize.x/2 + Margins.x),GridSize.y,-]);
    for (p=[-PlotSize.x/2,GridSize.y,-] ; p.x <= PlotSize.x/2 ; p.x += GridSize.x ) {
    comment(" p: ",p);
    goto(p);
    move(PenZ);
    move_r([-,-GridSize.y,-]);
    goto(TravelZ);
    }
    comment("Draw right-to-left");
    tp = scale(typeset("R to L ←",TextFont),TextSize);
    tp += [PlotSize.x/2 – GridSize.x/2 – tp[-1].x/2,-GridSize.y/2,-];
    engrave(tp,TravelZ.z,PenZ.z);
    goto([(PlotSize.x/2 + Margins.x),-GridSize.y,-]);
    for (p=[PlotSize.x/2,-GridSize.y,-] ; p.x >= -PlotSize.x/2 ; p.x -= GridSize.x ) {
    comment(" p: ",p);
    goto(p);
    move(PenZ);
    move_r([-,GridSize.y,-]);
    goto(TravelZ);
    }
    comment("Draw bottom-to-top");
    tp = scale(typeset("B to T ↑",TextFont),TextSize);
    tp += [-GridSize.x/2 – tp[-1].x/2,-(PlotSize.y/2 – TextSize.y),-];
    engrave(tp,TravelZ.z,PenZ.z);
    goto([-GridSize.x,-(PlotSize.y/2 + Margins.y),-]);
    for (p=[-GridSize.x,-PlotSize.y/2,-] ; p.y <= PlotSize.y/2 ; p.y += GridSize.y ) {
    comment(" p: ",p);
    goto(p);
    move(PenZ);
    move_r([GridSize.x,-,-]);
    goto(TravelZ);
    }
    comment("Draw top-to-bottom");
    tp = scale(typeset("T to B ↓",TextFont),TextSize);
    tp += [GridSize.x/2 – tp[-1].x/2,(PlotSize.y/2 – 1.5*TextSize.y),-];
    engrave(tp,TravelZ.z,PenZ.z);
    goto([GridSize.x,(PlotSize.y/2 + Margins.y),-]);
    for (p=[GridSize.x,PlotSize.y/2,-] ; p.y >= -PlotSize.y/2 ; p.y -= GridSize.y ) {
    comment(" p: ",p);
    goto(p);
    move(PenZ);
    move_r([-GridSize.x,-,-]);
    goto(TravelZ);
    }
    comment("Draw circles");
    maxr = (PlotSize.x < PlotSize.y) ? PlotSize.x/2 : PlotSize.y/2;
    for (r=GridSize.x/2 ; r <= maxr ; r += GridSize.x) {
    comment(" r: ",r);
    goto([-r,0,-]);
    move(PenZ);
    circle_cw([0,0,-]);
    goto(TravelZ);
    }
    goto(SafeZ);
    goto([0,0,-]);
    view raw Scale Grid.gcmc hosted with ❤ by GitHub

  • Sheath Your Blades!

    Sheath Your Blades!

    Trigger warning: gore.

    A week ago I milled a stack of cursor blanks, then engraved a test hairline on a scrap cursor to make sure everything was ready:

    Cursor V-bit setup
    Cursor V-bit setup

    After raising the spindle a few inches, I reached across the table, peeled the tape, and, as I pulled my hand back with the finished cursor, snagged the back of my left index finger on the V bit.

    So. Much. Blood.

    Urgent Care PA: “You may have nicked the tendon. Get thee hence to the Hospital Trauma Center.”

    Trauma Center MD: “See that white fiber down in there? That’s the extensor ligament. Looks OK and should heal fine.”

    Me: “Urp.”

    Trauma Center MD: “Unless you’re one of the 20% who get an infection.”

    Me: “Unless I’m one of the few who contract an MRSA infection, then just up and die.”

    Trauma Center MD: “Well, yes, there’s that. If the wound swells or smells bad, come back here quickly.”

    Dutchess County is now on the trailing edge of the Omicron wave, but the Trauma Center is attached to the Emergency Room and had a steady stream of customers arriving by ambulance. While being entirely content to not be their most urgent case, I had plenty of time to examine the wide variety of instruments parked in the room with me:

    Nameless Hospital Cart
    Nameless Hospital Cart

    I’m on a ten-day regimen of surprisingly inexpensive Amoxicillin + Clavulanate Potassium capsules, which is apparently what it takes to knock down a potential infection these days.

    Five days later, it looks like I should pull through:

    Lacerated Left Index Finger
    Lacerated Left Index Finger

    So I hereby swear a mighty oath on the bones of my ancestors to always sheath my blades. You should, too.

    But we all knew that last week, didn’t we?

  • Dremel Flex Shaft Oiling

    Dremel Flex Shaft Oiling

    While using a Dremel cutoff wheel to shape a lathe bit, the flexible shaft sounded not quite noisy, if slightly less smooth than before, so easing some oil into the drive shaft might be a Good Idea. The springy shaft slides out of the motor end without disassembly, but, just for completeness, I took a look inside the handpiece:

    Dremel flex shaft - handpiece internals
    Dremel flex shaft – handpiece internals

    Before removing the two obvious screws holding the handpiece together, remember to remove the steel ring at each end. The tail ring is obvious:

    Dremel flex shaft - tail ring
    Dremel flex shaft – tail ring

    The nose ring wasn’t where I expected it, but released easily after the obvious mistake revealed itself:

    Dremel flex shaft - nose ring
    Dremel flex shaft – nose ring

    The steel shaft spun freely in its bearings and the matching end of the flex drive shaft had plenty of grease:

    Dremel flex shaft - drive detail
    Dremel flex shaft – drive detail

    So I just reassembled everything in reverse order. The trick is to line up the existing indentations in the outer sheath with the bumps inside the handpiece shell:

    Dremel flex shaft - housing detail
    Dremel flex shaft – housing detail

    After all that, spreading a few drops of high-speed spindle oil along the spring drive shaft seemed appropriate.

    Didn’t make the least bit of difference to the sound, but I feel better.

  • Tektronix AM503: Balance Pot Bushing

    Tektronix AM503: Balance Pot Bushing

    One of the Tekronix AM503 current probe amplifiers arrived without the panel bushing for the Balance trim pot. Back in the day, you could presumably order part number 350-0301-02 and have it delivered (most likely) by your local Tek representative:

    Balance pot panel bushing - Tek part listing
    Balance pot panel bushing – Tek part listing

    Those days are over.

    A few minutes produced a doodle with pretty-close measurements:

    Balance pot panel bushing - dimension doodle
    Balance pot panel bushing – dimension doodle

    The as-built bushing turned out just a smidge too long, so make yours a scant eighth of an inch. Maybe the Tek dimension is the overall length?

    An SLA resin printer might crank out such a thing, but it’s well below the looks-good / fits-well resolution limit of an ordinary fused-filament printer.

    Applying the mini-lathe to a 1/4 inch white acrylic rod produced a reasonable facsimile:

    Tek AM503 Balance pot bushing - front
    Tek AM503 Balance pot bushing – front

    The side view:

    Tek AM503 Balance pot bushing - side
    Tek AM503 Balance pot bushing – side

    Acrylic is definitely the wrong material for the job, but it came readily to hand while pondering the Shelf o’ Rods. Acetal would be better, as you could easily trim off the aforementioned excess length with a knife.

    All’s well that ends well:

    Tek AM503 Balance pot bushing - installed
    Tek AM503 Balance pot bushing – installed

    A dab of white acrylic adhesive around the raw opening holds the bushing in place and it looks good enough to me.

    The motivation for this boils down to having the bushing center the pot twiddler required to set the balance, which I must do every time I fire up the amps, even after waiting for the half-hour required to stabilize them at their operating temperature.

  • Bafang Battery Charge Port: Autopsy

    Bafang Battery Charge Port: Autopsy

    My friends in Raleigh sent a small box with the various tools I made, along with the scorched Bafang battery charge port. As it turned out, none of the tools were useful and the real fix required opening the battery cover enough to remove and replace the charge connector.

    A view looking straight into the connector, with the side contact on the top of the image:

    Bafang Battery Charge Port - damage overview
    Bafang Battery Charge Port – damage overview

    Gutting the connector shows why my homebrew shell drill wasn’t going to work:

    Bafang Battery Charge Port - components
    Bafang Battery Charge Port – components

    There’s not much left of the central pin: the nugget hanging on its side is much larger than I expected. Most of the pin melted into that nugget, with a bonus droplet on the near side.

    The rectangular chunk (upper right) is the switch terminal, with the tab from the side contact (on the right) welded to it.

    Fortunately, none of the mayhem (including a few small sparks during the connector replacement) damaged the battery management circuitry or triggered a shutdown, so the reset tool wasn’t needed.

    It’ll make a great 3D printing show-n-tell exhibit, in the unlikely event I ever do an in-person talk

  • Verizon FiOS Battery Replacement

    Verizon FiOS Battery Replacement

    Being that type of guy, a red LED glowing in the far corner of the basement attracts my attention:

    Verizon FiOS - replace battery
    Verizon FiOS – replace battery

    Back in the day, Verizon didn’t make it obvious that the customer is responsible for replacing the battery keeping the ONT alive during power failures. I expect VZ would eventually let me know the battery was dead, remind me I was on the hook for the replacement, then offer to send a tech around with a Genuine VZ Battery to maintain reliable service.

    It’s an ordinary 12 V 8 A·hr sealed lead acid battery and, yes, it’s been in there for a while:

    Verizon FiOS - OEM battery date
    Verizon FiOS – OEM battery date

    However, being that type of guy, I just happen to have a box of not-dead-yet SLA batteries waiting for recycling:

    UPS SLA 2021-10-22
    UPS SLA 2021-10-22

    They’re three years younger than the VZ battery …