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.

The New Hotness

  • APRS/GPS + Voice Interface: Improved PTT Button Cap

    Long ago, Mary picked out a PTT switch with a raised, square post that provided a distinct shape and positive tactile feedback:

    PTT Button - bare post
    PTT Button – bare post

    Time passes, she dinged her thumb in the garden, and asked for a more rounded button. I have some switches with rounded caps, but replacing the existing switch looked a lot like work, sooooo:

    PTT Button Cap - Slic3r preview
    PTT Button Cap – Slic3r preview

    As with all small objects, building them four at a time gives the plastic in each one time to cool before slapping the next layer on top:

    PTT Button - on platform
    PTT Button – on platform

    The hole in the cap is 0.2 mm oversize, which results in a snug press fit on the small ridges barely visible around the post in the first image:

    PTT Button - rounded cap
    PTT Button – rounded cap

    Rather than compute the chord covering the surface, I just resized a sphere to twice the desired dome height (picked as 6 threads, just for convenience) and plunked it atop a cylinder. Remember to expand the sphere diameter by 1/cos(180/sides) to make it match the cylinder and force both to have the same number of sides.

    If it falls off, I have three backups.

    The OpenSCAD source code as a GitHub Gist:

    // PTT Button cap
    // Ed Nisley KE4ZNU – June 2016
    //- Extrusion parameters – must match reality!
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    Protrusion = 0.1;
    HoleWindage = 0.2;
    //——
    // Dimensions
    Post = [3.8,3.8,3.0];
    OD = 0;
    HEIGHT = 1;
    DOMEHEIGHT = 2;
    Button = [12,0+Post[2],6*ThreadThick];
    NumSides = 8*4;
    //———————-
    //- Build it
    difference() {
    union() {
    translate([0,0,Button[HEIGHT]])
    resize([0,0,2*Button[DOMEHEIGHT]])
    sphere(d=Button[OD]/cos(180/NumSides),$fn=NumSides);
    cylinder(d=Button[OD],h=Button[HEIGHT],$fn=NumSides);
    }
    translate([0,0,Post[2]/2 – Protrusion])
    cube(Post + [HoleWindage,HoleWindage,Protrusion],center=true);
    }