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

  • Improved Cable Clips

    Those ugly square cable clips cried out for a cylindrical version:

    LED Cable Clips - round - solid model
    LED Cable Clips – round – solid model

    Which prompted a nice button:

    LED Cable Clips - button - solid model
    LED Cable Clips – button – solid model

    Which suggested the square version needed some softening:

    LED Cable Clips - square - solid model
    LED Cable Clips – square – solid model

    Apart from the base plate thickness, all the dimensions scale from the cable OD; I’ll be unsurprised to discover small cables don’t produce enough base area for good long-term foam tape adhesion. Maybe the base must have a minimum size or area?

    I won’t replace the ones already on the saw, but these will look better on the next project…

    The OpenSCAD source code as a GitHub Gist:

    // Cable Clips
    // Ed Nisley – KE4ZNU – October 2014
    // February 2017 – adapted for USB cables
    Layout = "Show"; // Show Build
    Style = "Button"; // Square Round Button
    //- Extrusion parameters must match reality!
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2; // extra clearance
    Protrusion = 0.1; // make holes end cleanly
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    //———————-
    // Dimensions
    CableOD = 3.8; // cable jacket
    Base = [4*CableOD,4*CableOD,3*ThreadThick]; // overall base and slab thickness
    CornerRadius = CableOD/2; // radius of square corners
    CornerSides = 4*4; // total sides on square corner cylinders
    NumSides = 6*3; // total sides for cylindrical base
    //– Oval clip with central passage
    module CableClip() {
    intersection() {
    if (Style == "Square")
    hull()
    for (i=[-1,1], j=[-1,1])
    translate([i*(Base[0]/2 – CornerRadius),j*(Base[1]/2 – CornerRadius),0])
    rotate(180/CornerSides) {
    cylinder(r=CornerRadius,h=Base[2] + CableOD/2,$fn=CornerSides,center=false);
    translate([0,0,Base[2] + CableOD/2])
    sphere(d=CableOD,$fn=CornerSides);
    }
    else if (Style == "Round")
    cylinder(d=Base[0],h=Base[2] + 1.00*CableOD,$fn=NumSides);
    else if (Style == "Button")
    resize(Base + [0,0,2*(Base[2] + CableOD)])
    sphere(d=Base[0],$fn=NumSides);
    union() {
    translate([0,0,Base[2]/2]) // base defines slab thickness
    cube(Base,center=true);
    for (j=[-1,1]) // retaining ovals
    translate([0,j*(Base[1]/2 – 0.125*(Base[1] – CableOD)/2),(Base[2] – Protrusion)])
    resize([Base[0]/0.75,0,0])
    cylinder(d1=0.75*(Base[1]-CableOD),
    d2=(Base[1]-CableOD)/cos(0*180/NumSides),
    h=(CableOD + Protrusion),
    center=false,$fn=NumSides);
    }
    }
    if (Layout == "Show")
    color("Green",0.2)
    translate([0,0,Base[2] + CableOD/2])
    rotate([0,90,0])
    cylinder(d=CableOD,h=2*Base[0],center=true,$fn=48);
    }
    //———————-
    // Build it
    CableClip();