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

  • Mini-Lathe: Metric Change Gear Tables

    Mini-Lathe: Metric Change Gear Tables

    Running my assortment of custom 3D printed change gears through the LittleMachineShop calculator and copying the results into a spreadsheet for E-Z formatting produces a useful table:

    The same table in text-ish format, minus the colored highlights marking the custom gears:

    PitchABCDActualErrorIn 10 pitches
    0.10
    208020800.0990.786%0.008
    207920800.1000.468%0.005
    208020790.1000.468%0.005
    0.20
    207940800.2010.473%0.009
    208040790.2010.473%0.009
    407920800.2010.473%0.009
    408020790.2010.473%0.009
    0.25
    205535810.2490.225%0.006
    208135550.2490.225%0.006
    355520810.2490.225%0.006
    0.30
    205735650.3000.023%0.001
    206535570.3000.023%0.001
    0.40
    205545650.4000.088%0.004
    206545550.4000.088%0.004
    0.50
    215045600.5000.012%0.001
    216045500.5000.012%0.001
    218060500.5000.012%0.001
    423521800.5000.012%0.001
    605021800.5000.012%0.001
    0.60
    355740650.6000.022%0.001
    356540570.6000.022%0.001
    405735650.6000.022%0.001
    406535570.6000.022%0.001
    0.70
    355545650.6990.087%0.006
    356545550.6990.087%0.006
    455535650.6990.087%0.006
    456535550.6990.087%0.006
    507755810.7000.006%0.000
    508155770.7000.006%0.000
    557750810.7000.006%0.000
    0.75
    425045800.7500.012%0.001
    428045500.7500.012%0.001
    455042800.7500.012%0.001
    458042500.7500.012%0.001
    0.80
    405545650.7990.088%0.007
    406545550.7990.088%0.007
    455540650.7990.088%0.007
    456540550.7990.088%0.007
    205579570.8000.010%0.001
    205779550.8000.010%0.001
    1.00
    215060401.0000.012%0.001
    425045601.0000.012%0.001
    426045501.0000.012%0.001
    428060501.0000.012%0.001
    455042601.0000.012%0.001
    456042501.0000.012%0.001
    605042801.0000.012%0.001
    1.25
    215060321.2500.013%0.002
    354045501.2500.013%0.002
    424045601.2500.013%0.002
    428060401.2500.013%0.002
    454042601.2500.013%0.002
    602021801.2500.013%0.002
    604042801.2500.013%0.002
    1.50
    424045501.5000.013%0.002
    454042501.5000.013%0.002
    1.75
    654257801.7510.029%0.005
    2.00
    424060502.0000.012%0.003
    425060402.0000.012%0.003
    604042502.0000.012%0.003
    2.50
    423260502.5000.012%0.003
    424060402.5000.012%0.003
    425060322.5000.012%0.003
    602042802.5000.012%0.003
    603242502.5000.012%0.003
    3.00
    655080553.0020.061%0.018
    655580503.0020.061%0.018
    805065553.0020.061%0.018
    3.50
    574065423.5010.029%0.010
    574265403.5010.029%0.010
    652157803.5010.029%0.010
    654057423.5010.029%0.010
    654257403.5010.029%0.010
    4.00
    602042504.0000.012%0.005
    5.00
    552160504.9890.215%0.107
    553580404.9890.215%0.107
    554080354.9890.215%0.107
    602155504.9890.215%0.107
    803555404.9890.215%0.107
    804055354.9890.215%0.107
    354581205.0010.012%0.006
    455577205.0010.012%0.006
    772045555.0010.012%0.006
    Mini-Lathe Metric Change Gear Trains

    The basic formulas:

    TPI = 16 / ((A/B) x (C/D))
    Pitch = 25.4 / TPI = 1.5875 x ((A/B) x (C/D))

    So, for example, a 45-50-42-60 train will produce a 1 mm thread pitch with 120 ppm error adding up to a mere 1 micron in 10 pitches:

    Mini-Lathe change gears - stacked 50-42 - installed
    Mini-Lathe change gears – stacked 50-42 – installed

    Overall, the errors are so low as to not matter, even without using the custom gears, but it’s the principle of the thing …

  • Mini-lathe Metric Threading: Stackable Change Gear Generator

    Mini-lathe Metric Threading: Stackable Change Gear Generator

    Although OpenSCAD’s MCAD library includes a gear generator, I don’t profess to understand the relations between reality and its myriad parameters, plus I vaguely recall it has a peculiar definition for Diametral Pitch (or some such). Rather than fiddle with all that, I start with an SVG outline from Inkscape’s Gears extension and go all 3D on it.

    So, the “gear blank” looks like this after extruding the SVG:

    Mini-lathe change gear - 42 tooth - SVG import
    Mini-lathe change gear – 42 tooth – SVG import

    Producing this is a lot easier in OpenSCAD than in real life:

    Mini-lathe change gear - 42 tooth - solid model
    Mini-lathe change gear – 42 tooth – solid model

    OpenSCAD centers the blank’s bounding box at XY=0, which won’t be exactly on the bore centerline for gears with an odd number of teeth. One tooth sits at 0° and two teeth bracket 180°, so the bounding box will be a little short on one side

    A reference for gear nomenclature & calculations will come in handy.

    For a 21 tooth module 1 gear, which should be pretty close to the worst case in terms of offset:

    • Pitch dia = d = 21 × 1 = 21 mm
    • Tip dia = da = d + 2m = 23 mm
    • Tip radius = da/2 = 11.5 mm
    • Tooth-to-tooth angle = 360/21 = 17.143°
    • Radius to tangent across adjacent teeth = 11.5 × cos 17.143°/2 = 11.372 mm

    An actual metal 21 tooth gear measures 22.87 mm across a diameter, dead on what those numbers predict: 11.5 + 11.372 = 22.872 mm.

    So the bounding box will be 11.5 mm toward the tooth at 0° and 11.372 mm toward the gap at 180°. The offset will be half that, with the tooth at 0° sitting 0.063 mm too close to the origin. Gears with more teeth will have smaller errors.

    Given that we’re dealing with a gear “machined” from plastic goo, that’s definitely close enough:

    Mini-Lathe change gears - 1 mm - 45-50-45-60
    Mini-Lathe change gears – 1 mm – 45-50-45-60

    That’s an earlier version with the debossed legend.

    The code can also generate stacked gears for the BC shaft in the middle:

    Mini-lathe change gear - 42-55 tooth stacked - solid model
    Mini-lathe change gear – 42-55 tooth stacked – solid model

    In principle, the key locking the gears together isn’t needed and the bore could fit the inner shaft, rather than the keyed bushing, but then you’d (well, I’d) be at risk of losing the bushing + key in one easy operation.

    So it’s better to go with the bushing:

    Mini-Lathe change gears - stacked 50-42 - installed
    Mini-Lathe change gears – stacked 50-42 – installed

    Now, to cut some threads!

    The OpenSCAD source code as a GitHub Gist:

    // LMS Mini-Lathe
    // Change gears with stacking
    // Generate SVG outlines with Inkscape's Gear extension
    // Ed Nisley – KE4ZNU
    // 2020-05
    /* [Gears] */
    TopGear = 0; // zero for single gear
    BottomGear = 42;
    /* [Hidden] */
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    Dir = ""; // empty string for current directory
    /* [Dimensions] */
    ShaftOD = 12.0;
    ShaftSides = 4*3;
    GearThick = 7.75;
    Keyway = [3.5 + HoleWindage,3.0 + HoleWindage,3*GearThick]; // x on radius, y on perim, z on axis
    LegendThick = 2*ThreadThick;
    LegendZ = (TopGear ? 2*GearThick : GearThick) – LegendThick;
    LegendRecess = [10,7,LegendThick];
    LegendEnable = (TopGear == 0 && BottomGear > 41) || (TopGear > 41);
    //———————-
    // Useful routines
    // Enlarge holes to prevent geometric shrinkage
    // based on nophead's polyholes
    // http://hydraraptor.blogspot.com/2011/02/polyholes.html
    // http://www.thingiverse.com/thing:6118
    module PolyCyl(Dia,Height,ForceSides=0) {
    Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
    FixDia = Dia / cos(180/Sides);
    cylinder(r=(FixDia + HoleWindage)/2,
    h=Height,
    $fn=Sides);
    }
    //———————–
    // Build it!
    union() {
    difference() {
    union() {
    linear_extrude(GearThick,center=false,convexity=5)
    import(file=str(Dir,"Change Gear – ",BottomGear," teeth.svg"),
    center=true);
    if (TopGear)
    translate([0,0,GearThick])
    linear_extrude(GearThick,center=false,convexity=5)
    import(file=str(Dir,"Change Gear – ",TopGear," teeth.svg"),
    center=true);
    }
    rotate(180/ShaftSides)
    translate([0,0,-Protrusion])
    PolyCyl(ShaftOD,3*GearThick);
    translate([ShaftOD/2,0,Keyway.z/2 – Protrusion])
    cube(Keyway,center=true);
    if (LegendEnable) {
    translate([0,1.1*ShaftOD,LegendZ + LegendRecess.z/2])
    cube(LegendRecess + [0,0,Protrusion],center=true);
    if (TopGear) {
    translate([0,-1.1*ShaftOD,LegendZ + LegendRecess.z/2])
    cube(LegendRecess + [0,0,Protrusion],center=true);
    }
    }
    }
    if (LegendEnable)
    translate([0,0,LegendZ – Protrusion])
    linear_extrude(height=LegendThick + Protrusion,convexity=10) {
    translate([-0*2.5,1.1*ShaftOD])
    rotate(-0*90)
    text(text=str(BottomGear),size=5,font="Arial:style:Bold",halign="center",valign="center");
    if (TopGear)
    translate([-0*2.5,-1.1*ShaftOD])
    rotate(-0*90)
    text(text=str(TopGear),size=5,font="Arial:style:Bold",halign="center",valign="center");
    }
    }

  • Pride Lift Chair: Fuzzy Felt Feet

    Pride Lift Chair: Fuzzy Felt Feet

    By the Universal Principle of the Conservation of Perversity, the base of the floor lamp just barely doesn’t fit under the edge of the Comfy Chair:

    Floor Lamp - copper 70° elbow - installed
    Floor Lamp – copper 70° elbow – installed

    Well, I can fix that!

    Lift Chair Foot - installed
    Lift Chair Foot – installed

    The feet descend from the fuzzy felt feet on the plant shelves, with the hex head socket transmogrified into a circle to match the chair feet. The support structure grew a flat plate to ensure it doesn’t pull loose from the platform:

    Lift Chair Feet - solid model - support view
    Lift Chair Feet – solid model – support view

    Print ’em out, stick the felt in place:

    Lift Chair Feet - assembly
    Lift Chair Feet – assembly

    Lift the chair (maybe with a small prybar atop some plywood to protect the floor), position the feet, lower gently: done!

    While the M2 was warm, I ran off another set for the other Comfy Chair, just for symmetry.

    The OpenSCAD source code as a GitHub Gist:

    // Feet for Pride lift chair
    // Ed Nisley KE4ZNU 2020-05
    Layout = "Build"; // [Show, Build]
    Support = true;
    //- Extrusion parameters must match reality!
    // Print with 2 shells and 3 solid layers
    /* [Hidden] */
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    //———————-
    // Dimensions
    /* [Dimensions] */
    ChairFootOD = 33.0;
    ChairFootRecess = 5.0;
    FeltOD = 39.0;
    FeltRecess = 2.5;
    FootPlate = 6*ThreadThick;
    FootWall = 4*ThreadWidth;
    FootOD = 2*FootWall + max(ChairFootOD,FeltOD);
    echo(str("Foot OD: ",FootOD));
    FootTall = ChairFootRecess + FootPlate + FeltRecess;
    echo(str(" … height: "),FootTall);
    NumSides = 9*4;
    //———————-
    // Useful routines
    module FootPad() {
    difference() {
    cylinder(r=FootOD/2,h=FootTall,$fn=NumSides);
    translate([0,0,FeltRecess + FootPlate])
    cylinder(d=ChairFootOD,h=2*ChairFootRecess,$fn=NumSides);
    translate([0,0,-Protrusion])
    cylinder(d=FeltOD,h=(FeltRecess + Protrusion),$fn=NumSides);
    }
    }
    //——————-
    // Build it…
    if (Layout == "Show")
    FootPad();
    if (Layout == "Build") {
    translate([0,0,FootTall])
    rotate([180,0,0])
    FootPad();
    if (Support)
    color("Yellow") {
    for (Seg=[0:5])
    rotate(30 + 360*Seg/6)
    translate([0,0,(ChairFootRecess – ThreadThick)/2])
    cube([(ChairFootOD – 3*ThreadWidth),
    2*ThreadWidth,
    (ChairFootRecess – ThreadThick)],
    center=true);
    rotate(180/6)
    cylinder(d=0.5*ChairFootOD,h=ThreadThick,$fn=6);
    }
    }

  • Mini-Lathe Metric Threading: 42 Tooth Gear

    Mini-Lathe Metric Threading: 42 Tooth Gear

    Going from a 21 tooth gear to a 42 tooth gear means you must reduce the remaining train ratio by a factor of two for a given thread pitch. Here’s a 42-50-45-60 train, with the same -125 ppm error as the 21-50-60-40 train and no screw / washer clearance issues between the A screw and the C gear:

    Mini-Lathe change gears - 1 mm - 45-50-45-60
    Mini-Lathe change gears – 1 mm – 45-50-45-60

    The original 60-40 CD pair has a 3:2 ratio, the 45-60 CD pair is 3:4, so that’s where the factor-of-two reduction happens.

    The first pass at the solid model included a debossed legend:

    Mini-lathe 42 tooth change gear - Slic3r
    Mini-lathe 42 tooth change gear – Slic3r

    With a printed gear in hand, I realized the legend must be embossed below the surface, so as not to rub against an adjacent gear; better modeling is in order.

    The general idea is to set Inkscape’s (known-good) gear generator to the correct gear parameters (module 1 → 3.14 mm circular pitch, 20° pressure angle):

    Inkscape Gear Generator dialog
    Inkscape Gear Generator dialog

    Save the outline as an SVG:

    Inkscape Gear Generator result
    Inkscape Gear Generator result

    If you do like I did and neatly position the gear at the bottom-left origin, all SVG viewers will show only the Quadrant I arc, probably because Inkscape sets the SVG file to display it that way. I’ve made that mistake before and maybe, someday, I’ll remember.

    Load the SVG into OpenSCAD, which will find the entire gear, no matter where it falls in the coordinate space, and spike it at the origin:

    linear_extrude(8.0,center=false,convexity=5) 
     import(file="/the-source-directory/Mini-Lathe/Change Gear - 42 teeth.svg",center=true);
    

    The linear_extrude( … center=false … ) keeps the bottom of the blank at Z=0. The import( … center=true … ) puts the 2D shape at the XY origin. Because OpenSCAD centers the bounding box, gears with an odd number of teeth will be ever so slightly off-center, which would matter a whole lot more in a fancier machine tool than a mini-lathe.

    All of which produces a tidy 3D gear blank:

    Mini-lathe change gear - 42 tooth - SVG import
    Mini-lathe change gear – 42 tooth – SVG import

    OpenSCAD ignores SVG holes, which isn’t a problem for me, because I’d rather punch the bore, keyway, and so forth programatically.

    But that’s another story …

  • Mini-Lathe Metric Threading: 32 Tooth Gear

    Mini-Lathe Metric Threading: 32 Tooth Gear

    While not strictly necessary for metric threading on a USA-ian mini-lathe, a 32 tooth gear can produce reasonable approximations, so I printed a pair from a Thingiverse collection:

    Mini-lathe 32 tooth change gear - Slic3r
    Mini-lathe 32 tooth change gear – Slic3r

    The model was designed for a slightly different mini-lathe, as it includes a short boss and thinner plate, but it did fit on the shaft:

    Mini-Lathe change gears - 1 mm - bad 32 60 65 55
    Mini-Lathe change gears – 1 mm – bad 32 60 65 55

    The gear mesh seemed odd, though, and comparing it with a standard 30 tooth gear and a different printed 32 tooth gear (about which, more later) showed it was definitely not compatible:

    Mini-lathe change gears - 32 30 odd 32
    Mini-lathe change gears – 32 30 odd 32

    Yes, the 32 tooth Thingiverse gear on the right is slightly smaller than the stock 30 tooth gear in the middle.

    The larger 32 tooth gear (on the left, above) meshes better:

    Mini-Lathe change gears - 1 mm - 65 55 32 60
    Mini-Lathe change gears – 1 mm – 65 55 32 60

    Both of those trains have a 600 ppm error, so they’re definitely suboptimal compared to the results with a 21 tooth gear in the train.

    The real reason you need a 32 tooth gear is for exact 25, 50, and 100 TPI threads with a 1/16 inch leadscrew. I don’t foresee much need for those around here, but you can never have too many change gears …

  • Garden Rake Cross Bolt

    Garden Rake Cross Bolt

    Mary’s long-suffering garden rake pulled apart while we were flattening a section of what will become something like a lawn next to the garden:

    Garden rake - shank and ferrule
    Garden rake – shank and ferrule

    For whatever reason, there’s no cross bolt holding the shank into the ferrule, like there should be on any tool subject to pulling force.

    After marking the wide spot on the shank, a couple of good shots with a two pound hammer flattened the ferrule around it well enough to start a hole with a 3/16 step drill:

    Garden rake - cross drilling
    Garden rake – cross drilling

    Go through the far side with a 13/16 inch drill for a generous 5 mm fit, drop a bolt into the hole while it can’t get away, tighten the nyloc nut, and it’s all good:

    Garden rake - cross bolt
    Garden rake – cross bolt

    In fact, it’s better than it ever was, because now the shank can’t pull out until the ferrule falls off the handle. Which could happen, but I’m not averse to another bolt.

    Admittedly, it’s not a stainless steel socket head cap screw, because that’d just about double the value of the rake. The handle is in such bad shape that the bolt will probably outlast the wood …

    Done!

    Update: The consensus says I totally missed the Ritual Invocation of the Epoxy, so:

    Garden rake - epoxy fill
    Garden rake – epoxy fill

    Now all is right with the world …

  • Floor Lamp Height vs. Reach: Plumbing Fitting

    Floor Lamp Height vs. Reach: Plumbing Fitting

    Update: Welcome Adafruit! The reshaped elbow shown here eventually got threaded adapters for the tubing and an awful paint job.

    The floor lamp with the invisible / non-tactile controls moved to a different chair, where it didn’t have quite enough reach and too much height. Knowing what was about to happen, I spliced a JST-SM connector into the wire inside the tube:

    Floor Lamp - base wiring JST-SM connector
    Floor Lamp – base wiring JST-SM connector

    After trimming off all the extraneous bits, the larger half of the connector (male pins) fits through the tubing and the smaller half (female sockets) barely fits through the bottom bushings.

    It turns out half-inch copper pipe fittings (ID = 15.9 mm) almost exactly fit the tubing (OD = 15.7 mm):

    Floor Lamp - copper 45° elbow
    Floor Lamp – copper 45° elbow

    A quick test showed the 45° (actually, it’s 135°, but we’re deep into plumbing nomenclature) positioned the lamp head too high and with too much reach:

    Floor Lamp - gooseneck exercise
    Floor Lamp – gooseneck exercise

    So shorten the tube attached to the head and deburr the cut:

    Floor Lamp - tube deburring
    Floor Lamp – tube deburring

    The 45° fitting is too high and a 90° fitting is obviously too low, so cut a 20° slice out of a 90° fitting:

    Floor Lamp - copper 90° elbow - 20° cutout
    Floor Lamp – copper 90° elbow – 20° cutout

    Cut a snippet of brass tubing to fit, bash to fit, file to hide, buff everything to a high shine, silver-solder it in place, and buff everything again:

    Floor Lamp - copper 90° elbow - 20° fill strip
    Floor Lamp – copper 90° elbow – 20° fill strip

    The 5/8 inch aluminum rods serve to stiffen the fitting, smooth out the torch heating, and generally keep things under control.

    Wrap the obligatory Kapton tape around the butt ends of the tubes to fill the fitting’s oversize hole, put everything together, and it’s just about perfect:

    Floor Lamp - copper 70° elbow - installed
    Floor Lamp – copper 70° elbow – installed

    I immobilized the fitting with black Gorilla tape, but it really needs something a bit more permanent. One of these days, maybe, a pair of setscrews will happen.

    The additional reach required a little more counterweight on the far side for security, so I added the broken stub of a truck leaf spring. It should be secured firmly to the base plate, but no tool I own can put a dent in those three pounds of spring steel. Maybe it’ll merit a fancy enclosure wrapped around the base?