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

  • Lip Balm Holder

    A bit of tinkering with the OpenSCAD code that produced the DeoxIT bottle holder delivered a place for the cylindrical objects we use just before cycling:

    Lip Balm Holder
    Lip Balm Holder

    The tubes are 1.5 diameters tall, minus a skosh, so the cylinders stand neatly inside and don’t want to fall over. I added about 1 mm clearance and you could taper the cylinder openings for E-Z insertion, although we can eke out a miserable existence with this thing as-is.

    It works exactly as you’d expect:

    Lip Balm Holder - in action
    Lip Balm Holder – in action

    That big stick in the middle is actually skin sunscreen, not lip balm; let’s not get all pedantic. The intent is to keep those cylinders from rolling off the shelf and falling into awkward locations, which this will do.

    The OpenSCAD source code is strictly from empirical:

    // Lip Balm Tube Holder
    // Ed Nisley KE4ZNU - July 2015
    
    //- Extrusion parameters - must match reality!
    
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    Protrusion = 0.1;
    
    HoleWindage = 0.2;
    
    //------
    // Dimensions
    
    Tubes = [18,26];			// tube diameters plus clearance
    
    WallThick = 2.0;
    
    Plate = [1.5*(Tubes[1] + 2*Tubes[0]),2.5*Tubes[1],IntegerMultiple(2.0,ThreadThick)];
    PlateRound = 5.0;
    
    NumSides = 8*4;
    
    //- Build it
    
    	hull() {
    		for (i=[-1,1], j=[-1,1]) {
    			translate([i*(Plate[0]/2 - PlateRound),j*(Plate[1]/2 - PlateRound),0])
    				cylinder(r=PlateRound,h=Plate[2],$fn=NumSides);
    		}
    	}
    
    	translate([0,0,Plate[2]/2])
    		rotate(180/NumSides)
    			difference() {
    				cylinder(d=(Tubes[1] + 2*WallThick),h=1.5*Tubes[1],$fn=NumSides);
    				cylinder(d=Tubes[1],h=1.5*Tubes[1] + Protrusion,$fn=NumSides);
    			}
    
    	for (i=[-1,1])
    		translate([i*((Tubes[1] + Tubes[0])/2 + 1.0*WallThick),0,Plate[2]/2])
    			rotate(180/NumSides)
    				difference() {
    					cylinder(d=(Tubes[0] + 2*WallThick),h=1.5*Tubes[0],$fn=NumSides);
    					cylinder(d=Tubes[0],h=1.5*Tubes[0] + Protrusion,$fn=NumSides);
    			}