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

  • Michelin ProTek Max Tube: Autopsy

    The Michelin ProTek Max tube I installed two years ago developed a slow leak this year, which I eventually ascribed to the valve stem, because the sealant should plug any other leak.

    Cutting it open reveals the perfectly good greenish-yellow sealant:

    Michelin ProTek tube - sealant
    Michelin ProTek tube – sealant

    The sealant also carries black rubbery grit / shavings / dust, perhaps intended to jam inside larger gashes while the sealant coagulates and binds it together.

    There’s a lot of rubber floating around in there:

    Michelin ProTek tube - rubber fragments
    Michelin ProTek tube – rubber fragments

    Dismantling the Presta valve stem show the rubbery crud on and around the valve seal and seat:

    Michelin ProTek tube - fouled valve seal
    Michelin ProTek tube – fouled valve seal

    Whenever I pumped up the tires, I finger-tightened the nut to ensure a good seal, as you do with all Presta valves. Obviously, finger-tight can’t handle that much crud between the sealing surfaces.

    I’m sorry to say I was right about the leaky valve stem, because I think all the ProTek tubes will fail in exactly the same way.

    The valve has small wrench flats making it easy to remove, so I can at least attempt to de-gunk them when they develop slow leaks.

    Color me unimpressed.

     

  • Xubuntu Startup Delay vs. xsetwacom

    Over the years, various xsetwacom incantations have confined the tablet stylus to the left-hand landscape monitor on my desk. Updating to Xubuntu 18.04 once again changed the monitors names (from HEAD-0 back to DP-1), but xsetwacom stopped working.

    My startup.sh script runs from Xubuntu’s “Application Autostart” list, so X is already running and xsetwacom should do the right thing. Alas, even with $XAUTHORITY and $DISPLAY set correctly (automagically by X), xsetwacom still didn’t corral the cursor.

    Some rummaging around the Intertubes suggested a delay would allow X to get up to speed and, indeed, sleeping for two seconds solved the problem:

    logger "startup.sh - copying Xauthority values"
    whoami > /tmp/who
    cp /home/ed/.Xauthority /tmp/Xauthority.txt
    echo $XAUTHORITY > /tmp/XAUTHORITY.txt
    cp $XAUTHORITY /tmp/xauth.cp
    echo $DISPLAY > /tmp/DISPLAY.txt
    # xsetwacom needs an additional delay after $XAUTHORITY and $DISPLAY become correct
    logger "startup.sh - waiting aimlessly"
    sleep 2s
    logger "startup.sh - doing wacom setup"
    xsetwacom --verbose set "Wacom Graphire3 6x8 Pen stylus" MapToOutput "DP-1"
    xsetwacom --verbose set "Wacom Graphire3 6x8 Pen eraser" MapToOutput "DP-1"
    

    Sheesh & similar remarks.

    The complete Bash script as a GitHub Gist:

    logger "startup.sh – starting"
    logger "startup.sh – setting configurations"
    #setxkbmap -option terminate:ctrl_alt_bksp
    #pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
    amixer -D pulse sset Master 41%
    amixer -D pulse sset Master 1%-
    gsettings set org.gnome.Evince page-cache-size 500
    # enable Kinesis volume and calculator keys
    #/home/ed/bin/Kinesis/kfreestyle2d /dev/hidraw6 &
    logger "startup.sh – starting applications"
    /usr/bin/thunar &
    /usr/bin/gimp &
    /usr/bin/chromium-browser &
    /usr/bin/digikam &
    /usr/bin/firefox &
    /usr/bin/thunderbird &
    /usr/bin/xfce4-terminal &
    logger "startup.sh – copying Xauthority values"
    # similar lines in .xprofile happen before X grabs the display
    whoami > /tmp/who
    cp /home/ed/.Xauthority /tmp/Xauthority.txt
    echo $XAUTHORITY > /tmp/XAUTHORITY.txt
    cp $XAUTHORITY /tmp/xauth.cp
    echo $DISPLAY > /tmp/DISPLAY.txt
    # xsetwacom needs an additional delay after $XAUTHORITY and $DISPLAY become correct
    logger "startup.sh – waiting aimlessly"
    sleep 2s
    logger "startup.sh – doing wacom setup"
    xsetwacom –verbose set "Wacom Graphire3 6×8 Pen stylus" MapToOutput "DP-1"
    #xsetwacom –verbose set "Wacom Graphire3 6×8 Pen stylus" MapToOutput "HEAD-0"
    xsetwacom –verbose set "Wacom Graphire3 6×8 Pen eraser" MapToOutput "DP-1"
    #xsetwacom –verbose set "Wacom Graphire3 6×8 Pen eraser" MapToOutput "HEAD-0"
    logger "startup.sh — done"
    view raw startup.sh hosted with ❤ by GitHub

    The cruft in there reminds me of previous fixes / workarounds / haxx, so it’s not entirely wasted space.

  • Lenovo Headset Volume Control Lube

    The volume control wart pod on the cable of my old and longsuffering Lenovo headset had been dropping out the right channel for a while, eventually prompting me to discover it comes apart by simply pulling on the halves:

    Lenovo Headset - control pod
    Lenovo Headset – control pod

    There being no way to get closer to the open-frame volume pot’s innards, I eased a drop of DeoxIT Red along its edge (upper in the photo), slipped another drop into what’s presumably the wiper opening in the knob, and ran it through enough cycles to spread the juice evenly.

    Reassemble in reverse order and It Just Works™ again.

  • HP 6201B Power Supply Meter Switch Rehabilitation

    The meter range switch on Squidwrench’s HP 6201B bench power supply became erratic enough to get me to tear it apart:

    HP 6201B Power Supply - meter switch nut
    HP 6201B Power Supply – meter switch nut

    For future reference, apply a 9/16 inch deep socket after loosening two teeny setscrews in the knob.

    The date codes suggest a mid-70s assembly, but the design dates back to the 60s with no plug-in anything:

    HP 6201B Power Supply - meter switch in panel
    HP 6201B Power Supply – meter switch in panel

    Rather than unsolder eight switch leads, I wrangled it into a visible location:

    HP 6201B Power Supply - meter switch rear
    HP 6201B Power Supply – meter switch rear

    The knob and shaft sit on a separate metal bracket held in the white plastic ring with a pair of expanded prongs. Squashing the prongs together released the bracket, so I could see both sides of the switch wafer:

    HP 6201B Power Supply - meter switch front
    HP 6201B Power Supply – meter switch front

    Note the copious markings which would, in the event of an actual finger fumble, give me a better chance of reassembling the spilled guts. Turned out not to be necessary, but it’s good to be prepared!

    The actual repair consisted of easing a drop of DeoxIT Red into each side, spinning the central switch wafer / contacts a few dozen times, then reassembling in reverse order. Re-bending the prongs turned out to be the most difficult part, eventually requiring the designated Prydriver, and ended well enough.

    A quick test with a 100 Ω power resistor shows the supply was working fine and the switch produced the expected results without glitches or twitches:

    HP 6201B Power Supply - test load
    HP 6201B Power Supply – test load

    You just can’t beat the performance of old lab equipment!

  • Bird Feeder Unbending

    At some point in its history, the left rail holding the wood perch on our industrial-strength “squirrel proof” seed feeder took a hit, most likely from being dropped:

    Squirrel on bird feeder
    Squirrel on bird feeder

    I finally got a Round Tuit and un-bent the poor thing:

    Bird feeder - rail un-bending
    Bird feeder – rail un-bending

    Because the bend happened at the base of the vertical strut holding the shutter, I clamped a Genuine Vise-Grip sheet metal pliers along the straight section. The Craftsman knock-off Vise-Grip then applied torque at the bend, rather than just making things worse, and some two-axis tweakage lined up the rail pretty well.

    With the bend taken care of, I clamped the rail in the bench vise with some scrap wood around the strut:

    Bird feeder - warped rail
    Bird feeder – warped rail

    A percussive adjustment jam session flattened the top flange, leaving both sections as flat as they’re gonna get.

    While I was at it, I turned a pair of stepped aluminum washers for the new wood rod:

    Bird feeder - parting off washer
    Bird feeder – parting off washer

    Which looked about like you’d expect, including a little chatter from the cut off tool:

    Bird feeder - perch hardware
    Bird feeder – perch hardware

    Yeah, I drilled the wood rod on the lathe, too; I loves me some simple lathe action.

    Reassemble in reverse order and it’s all good:

    Bird feeder - perch installed
    Bird feeder – perch installed

    We’re supposed to bleach the feeder every week to kill off the bacteria causing House Finch Eye Disease and, while I can’t promise a weekly schedule, we’ll (try to) reduce the amount of crud on the feeder this year.

    If you’ve got a feeder, sign up for Project Feederwatch and do some citizen science!

  • SRAM X.9 Grip Shift Guts

    The guts of the failed SRAM X.9 rear shifter from my Tour Easy:

    SRAM X.9 grip shifter - innards
    SRAM X.9 grip shifter – innards

    The identical rear shifter on Mary’s bike also seems to be wearing out, as it glides between two of her favorite click stops a bit too easily. You can see the spring peeking out to the right, beyond the white tube, and the notches forming the clicks.

    AFAICT, the raised section between the notches is wearing down; there’s no repair for that sort of thing. I took this one apart to see what’s inside: now we know!

    We’ve agreed to not replace the shifter until the situation gets worse. An X.0 shifter should arrive shortly; it appears identical except for deeper scallops around the grip.

  • Kenmore Progressive Vacuum Tool Adapters: Third Failure

    The adapter for an old Electrolux crevice tool (not the dust brush) snapped at the usual stress concentration after about three years:

    Crevice tool adapter - broken vs PVC pipe
    Crevice tool adapter – broken vs PVC pipe

    The lower adapter is the new version, made from a length of 1 inch PVC pipe (that’s the ID, kinda-sorta) epoxied into a revised Kenmore adapter fitting.

    The original OpenSCAD model provided the taper dimensions:

    Electrolux Crevice Tool Adapter - PVC taper doodles
    Electrolux Crevice Tool Adapter – PVC taper doodles

    The taper isn’t quite as critical as it seems, because the crevice tool is an ancient molded plastic part, but a smidge over half a degree seemed like a good target.

    Start by boring out the pipe ID until it’s Big Enough (or, equally, the walls aren’t Scary Thin) at 28 mm:

    Crevice tool adapter - boring PVC
    Crevice tool adapter – boring PVC

    Alas, the mini-lathe’s craptastic compound has 2° graduations:

    Minilathe compound angle scale
    Minilathe compound angle scale

    So I set the angle using a somewhat less craptastic protractor and angle gauge:

    Crevice tool adapter - compound angle
    Crevice tool adapter – compound angle

    The little wedge of daylight near the gauge pivot is the difference between the normal perpendicular-to-the-spindle axis setting and half-a-degree-ish.

    Turning PVC produces remarkably tenacious swarf:

    Crevice tool adapter - PVC swarf
    Crevice tool adapter – PVC swarf

    The gash along the top comes from a utility knife; just pulling the swarf off didn’t work well at all.

    The column of figures down the right side of the doodles shows successive approximations to the target angle, mostly achieved by percussive adjustment, eventually converging to about the right taper with the proper dimensions.

    Cutting off the finished product with the (newly angled) cutoff bit:

    Crevice tool adapter - cutoff
    Crevice tool adapter – cutoff

    And then It Just Worked™.

    The OpenSCAD source code for all the adapters as a GitHub Gist:

    // Kenmore vacuum cleaner nozzle adapters
    // Ed Nisley KE4ZNU November 2015 and ongoing
    // Layout options
    Layout = "CrevicePipe"; // MaleFitting CoilWand FloorBrush
    // CreviceTool Crevice Pipe ScrubbyTool LuxBrush DustBrush
    //- Extrusion parameters must match reality!
    // Print with +1 shells and 3 solid layers
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    //———————-
    // Dimensions
    ID1 = 0; // for tapered tubes
    ID2 = 1;
    OD1 = 2;
    OD2 = 3;
    LENGTH = 4;
    OEMTube = [35.0,35.0,41.7,40.5,30.0]; // main fitting tube
    EndStop = [OEMTube[ID1],OEMTube[ID2],47.5,47.5,6.5]; // flange at end of main tube
    FittingOAL = OEMTube[LENGTH] + EndStop[LENGTH];
    $fn = 12*4;
    //———————-
    // 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);
    }
    //——————-
    // Male fitting on end of Kenmore tools
    // This slides into the end of the handle or wand and latches firmly in place
    module MaleFitting() {
    Latch = [40,11.5,5.0]; // rectangle latch opening
    EntryAngle = 45; // latch entry ramp
    EntrySides = 16;
    EntryHeight = 15.0; // lower edge on *inside* of fitting
    KeyRadius = 1.0;
    translate([0,0,6.5])
    difference() {
    union() {
    cylinder(d1=OEMTube[OD1],d2=OEMTube[OD2],h=OEMTube[LENGTH]); // main tube
    hull() // insertion guide
    for (i=[-(6.0/2 – KeyRadius),(6.0/2 – KeyRadius)],
    j=[-(28.0/2 – KeyRadius),(28.0/2 – KeyRadius)],
    k=[-(26.0/2 – KeyRadius),(26.0/2 – KeyRadius)])
    translate([(i – (OEMTube[ID1]/2 + OEMTube[OD1]/2)/2 + 6.0/2),j,(k + 26.0/2 – 1.0)])
    sphere(r=KeyRadius,$fn=8);
    translate([0,0,-EndStop[LENGTH]]) // wand tube butts against this
    cylinder(d=EndStop[OD1],h=EndStop[LENGTH] + Protrusion);
    }
    translate([0,0,-OEMTube[LENGTH]]) // main bore
    cylinder(d=OEMTube[ID1],h=2*OEMTube[LENGTH] + 2*Protrusion);
    translate([0,-11.5/2,23.0 – 5.0]) // latch opening
    cube(Latch);
    translate([OEMTube[ID1]/2 + EntryHeight/tan(90-EntryAngle),0,0]) // latch ramp
    translate([(Latch[1]/cos(180/EntrySides))*cos(EntryAngle)/2,0,(Latch[1]/cos(180/EntrySides))*sin(EntryAngle)/2])
    rotate([0,-EntryAngle,0])
    intersection() {
    rotate(180/EntrySides)
    PolyCyl(Latch[1],Latch[0],EntrySides);
    translate([-(2*Latch[0])/2,0,-Protrusion])
    cube(2*Latch[0],center=true);
    }
    }
    }
    //——————-
    // Refrigerator evaporator coil wand
    module CoilWand() {
    union() {
    translate([0,0,50.0])
    rotate([180,0,0])
    difference() {
    cylinder(d1=EndStop[OD1],d2=42.0,h=50.0);
    translate([0,0,-Protrusion])
    cylinder(d1=35.0,d2=35.8,h=100);
    }
    translate([0,0,50.0 – Protrusion])
    MaleFitting();
    }
    }
    //——————-
    // Samsung floor brush
    module FloorBrush() {
    union() {
    translate([0,0,60.0])
    rotate([180,0,0])
    difference() {
    union() {
    cylinder(d1=EndStop[OD1],d2=32.4,h=10.0);
    translate([0,0,10.0 – Protrusion])
    cylinder(d1=32.4,d2=30.7,h=50.0 + Protrusion);
    }
    translate([0,0,-Protrusion])
    cylinder(d1=28.0,d2=24.0,h=100);
    }
    translate([0,0,60.0 – Protrusion])
    MaleFitting();
    }
    }
    //——————-
    // Crevice tool
    module CreviceTool() {
    union() {
    translate([0,0,60.0])
    rotate([180,0,0])
    difference() {
    union() {
    cylinder(d1=EndStop[OD1],d2=32.0,h=10.0);
    translate([0,0,10.0 – Protrusion])
    cylinder(d1=32.0,d2=30.4,h=50.0 + Protrusion);
    }
    translate([0,0,-Protrusion])
    cylinder(d1=28.0,d2=24.0,h=100);
    }
    translate([0,0,60.0 – Protrusion])
    MaleFitting();
    }
    }
    //——————-
    // Crevice tool
    // Hacked for 1 inch Schedule 40 PVC pipe stiffening tube
    module CrevicePipe() {
    PipeOD = 33.5;
    union() {
    translate([0,0,10.0])
    rotate([180,0,0])
    difference() {
    cylinder(d1=EndStop[OD1],d2=PipeOD+2*8*ThreadWidth,h=10.0);
    translate([0,0,-Protrusion])
    cylinder(d=PipeOD,h=100);
    }
    translate([0,0,10.0])
    MaleFitting();
    }
    }
    //——————-
    // Mystery brush
    module ScrubbyTool() {
    union() {
    translate([0,0,60.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=31.8,d2=31.0,h=50.0 + Protrusion);
    }
    translate([0,0,-Protrusion])
    cylinder(d1=26.0,d2=24.0,h=100);
    }
    translate([0,0,60.0 – Protrusion])
    MaleFitting();
    }
    }
    //——————-
    // eBay horsehair dusting brush
    // Hacked for 3/4" Schedule 40 PVC stiffening tube
    // eBay: 30.0 32.0 30.0
    // Shopvac: 30.3 31.0 25.0
    // Must build snout down with brim to avoid support
    module DustBrush() {
    PipeOD = 27.0; // stiffening pipe
    Snout = [0,0, 31.0, 30.3, 25.0];
    TaperLength = 10.0; // transition cone from fitting to snout
    union() {
    translate([0,0,Snout[LENGTH] + TaperLength])
    rotate([180,0,0])
    difference() {
    union() {
    cylinder(d1=EndStop[OD1],d2=Snout[OD1],h=TaperLength);
    translate([0,0,TaperLength – Protrusion])
    cylinder(d1=Snout[OD1],d2=Snout[OD2],h=Snout[LENGTH] + Protrusion);
    }
    translate([0,0,-Protrusion]) // 3/4 inch Sch 40 PVC
    PolyCyl(PipeOD,100);
    }
    translate([0,0,Snout[LENGTH] + TaperLength – Protrusion])
    MaleFitting();
    }
    }
    //——————-
    // Electrolux brush ball
    module LuxBrush() {
    union() {
    translate([0,0,30.0])
    rotate([180,0,0])
    difference() {
    union() {
    cylinder(d1=EndStop[OD1],d2=30.8,h=10.0);
    translate([0,0,10.0 – Protrusion])
    cylinder(d1=30.8,d2=30.0,h=20.0 + Protrusion);
    }
    translate([0,0,-Protrusion])
    cylinder(d1=25.0,d2=23.0,h=30 + 2*Protrusion);
    }
    translate([0,0,30.0 – Protrusion])
    MaleFitting();
    }
    }
    //———————-
    // Build it!
    if (Layout == "MaleFitting")
    MaleFitting();
    if (Layout == "CoilWand")
    CoilWand();
    if (Layout == "FloorBrush")
    FloorBrush();
    if (Layout == "CreviceTool")
    CreviceTool();
    if (Layout == "CrevicePipe")
    CrevicePipe();
    if (Layout == "DustBrush")
    DustBrush();
    if (Layout == "ScrubbyTool")
    ScrubbyTool();
    if (Layout == "LuxBrush")
    LuxBrush();