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

  • Blue Gauntlet Fencing Helmet Ear Grommet

    Our Larval Engineer practiced fencing for several years, learning the fundamental truth that you should always bring a gun to a knife fight:

    Fencing - taking a hit
    Fencing – taking a hit

    It’s time to pass the gear along to someone who can use it, but we discovered one of the ear grommets inside the helmet had broken:

    Blue Gauntlet M003-BG Helmet - broken ear grommet
    Blue Gauntlet M003-BG Helmet – broken ear grommet

    The cylinder in the middle should be attached to the washer on the left, which goes inside the helmet padding. It’s a tight push fit inside the washer on the right, which goes on the outside of the padding. Ridges along the cylinder hold it in place.

    Being an injection-molded polyethylene part, no earthly adhesive or solvent will bother it, soooo… the solid model pretty much reproduces the original design:

    Fencing Helmet Ear Grommet - show
    Fencing Helmet Ear Grommet – show

    The top washer goes inside the padding against your (well, her) ear, so I chamfered the edges sorta-kinda like the original.

    There are no deliberate ridges on the central cylinder, but printing the parts in the obvious orientation with no additional clearance makes them a very snug push fit and the usual 3D printing ridges work perfectly; you could apply adhesive if you like. The outside washer has a slight chamfer to orient the post and get it moving along.

    The posts keep the whole affair from rotating, but I’m not sure they’re really necessary.

    Printing a pair doesn’t take much longer than just one:

    Fencing Helmet Ear Grommet - build
    Fencing Helmet Ear Grommet – build

    It doesn’t look like much inside the helmet:

    Blue Gauntlet M003-BG - replacement ear grommet - installed
    Blue Gauntlet M003-BG – replacement ear grommet – installed

    The OpenSCAD source code as a gist from Github:

    // Fencing Helmet Ear Grommet
    // Ed Nisley KE4ZNU December 2015
    // Layout options
    Layout = "Show"; // Base Cap Build Show
    //- Extrusion parameters must match reality!
    // Print with +1 shells and 3 solid layers
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    Protrusion = 0.1; // make holes end cleanly
    //———————-
    // Dimensions
    NumSides = 12*4;
    $fn = NumSides;
    //———————-
    // 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);
    }
    //——————-
    // Parts
    // Base on outside of liner
    PostOD = 15.5;
    PostLength = 8.0;
    BaseOD = 26.0;
    BaseLength = 3.4;
    module Base() {
    difference() {
    union() {
    cylinder(d=BaseOD,h=2.0);
    cylinder(d=20.0,h=BaseLength);
    for (i=[0:5])
    rotate(i*360/6)
    translate([11.5,0,0])
    rotate(180/6)
    cylinder(d1=2.5,d2=3*ThreadWidth,h=4.0,$fn=6);
    }
    translate([0,0,-Protrusion])
    // PolyCyl(PostOD,4.0,NumSides/4);
    cylinder(d=PostOD,h=PostLength,$fn=NumSides/4);
    translate([0,0,(BaseLength – 4*ThreadThick)])
    cylinder(d1=PostOD,d2=(PostOD + 2*ThreadWidth),h=(4*ThreadThick + Protrusion),$fn=NumSides/4);
    }
    }
    // Cap inside liner
    CapID = 12.0;
    CapOD = 28.0;
    CapThick = 3.0;
    module Cap() {
    difference() {
    union() {
    rotate_extrude(convexity=2)
    polygon(points=[
    [CapID/2 + CapThick/3,0.0],
    [CapOD/2 – CapThick/3,0.0],
    [CapOD/2,CapThick/2],
    [CapOD/2,CapThick],
    [CapID/2,CapThick],
    [CapID/2,CapThick – CapThick/3]
    ]);
    translate([0,0,CapThick – Protrusion])
    cylinder(d=PostOD,h=(PostLength – (CapThick – Protrusion)),$fn=NumSides/4);
    }
    translate([0,0,-Protrusion])
    PolyCyl(CapID,10.0,$fn);
    }
    }
    //———————-
    // Build it!
    if (Layout == "Base")
    Base();
    if (Layout == "Cap")
    Cap();
    BuildSpace = 30/2;
    if (Layout == "Build") {
    for (j=[-1,1])
    translate([j*BuildSpace,0,0]) {
    translate([0,-BuildSpace,0])
    Base();
    translate([0,BuildSpace,0])
    Cap();
    }
    }
    if (Layout == "Show") {
    color("LightGreen") Base();
    translate([0,0,12])
    rotate([180,0,0])
    color("LightBlue") Cap();
    }