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

  • Craftsman Hedge Trimmer: Biennial Laying On Of Hands Repair

    Craftsman Hedge Trimmer: Biennial Laying On Of Hands Repair

    Once again, the hedge trimmer failed to turn on with the switch pressed, so I took it apart, did nothing, and had thing start working again:

    Craftsman Hedge Trimmer - innards exposed
    Craftsman Hedge Trimmer – innards exposed

    It finally penetrated my dim consciousness: perhaps the switch is fine and a carbon brush (or two) has lost contact with the commutator atop a layer of oil and dust.

    So a year from now when this happens again, try jamming a screwdriver through a vent slot and moving the motor a few degrees to jostle the crud.

    If it works, that would be much easier than taking it apart!

  • Garage Door Opener Battery Life

    Garage Door Opener Battery Life

    The keypad for the garage door opener didn’t cooperate one cold evening, so the first thing to check is the battery:

    Garage Door Opener battery change
    Garage Door Opener battery change

    Given that it lacks a scrawled date, it’s the original battery dating back to late 1998 when I replaced the defunct opener that Came With The House™.

    It was down to 8.3 V on that sunny afternoon and, surely, not nearly enough in the dark of a wintry night.

    Even I can’t complain about that kind of battery life …

  • Engineer’s Boot

    Engineer’s Boot

    The rivet holding the lace eyelet in place disintegrated:

    Engineers Boot
    Engineers Boot

    A flat head 6-32 screw fit neatly inside the original grommet, making it flush on the side that matters and putting a stylin’ nyloc nut in full view.

    When the only tool you have is a Basement Shop, pretty nearly everything looks like a project … and is fixable, too!

  • 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.