-
Mailing Tube End Caps
Faced with a need to send documents rolled up in a tube, rather than folded flat, I sawed off a suitable length of cardboard tube from the heap, then discovered a distinct lack of end caps.
Well, once again, it’s 3D printing to the rescue:
The small ribs probably don’t actually do anything, but seemed like a nice touch.
They’re somewhat less boring from the bottom:
The fancy spider supports that big flat top and provides some crush resistance. The flat flange should collect the edge of the packing tape wrapped around the ends.
A firm shove installs them, so the size worked out perfectly:
Add a wrap of tape to each end, affix the USPS label, and they went out with the next day’s mail, PETG hair and all.
The OpenSCAD source code as a GitHub Gist:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters// Mailing tube end cap // Ed Nisley KE4ZNU – June 2017 Layout = "Build"; //- 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; //- Screw sizes inch = 25.4; TubeID = 2 * inch; TubeWall = 0.1 * inch; CapInsert = 15.0; CapRim = 1.0; CapWall = 3*ThreadWidth; NumFlanges = 3; FlangeHeight = 3*ThreadThick; FlangeWidth = ThreadWidth/2; FlangeSpace = CapInsert / (NumFlanges + 1); OAHeight = CapInsert + CapRim; NumRibs = 3*4; NumSides = 3*NumRibs; //- Adjust hole diameter to make the size come out right 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); } module TubeCap() { difference() { cylinder(d=TubeID,h=OAHeight,$fn=NumSides); translate([0,0,CapWall]) cylinder(d=TubeID – 2*CapWall,h=OAHeight,$fn=NumSides); } for (i=[1:NumFlanges]) translate([0,0,i*FlangeSpace]) difference() { cylinder(d=TubeID + 2*FlangeWidth,h=FlangeHeight,$fn=NumSides); translate([0,0,-Protrusion]) cylinder(d=TubeID – 2*CapWall,h=FlangeHeight + 2*Protrusion,$fn=NumSides); } for (i=[0:NumRibs-1]) rotate(i*360/NumRibs) translate([0,-ThreadWidth,CapWall + ThreadThick]) cube([TubeID/2 – CapWall/2,2*ThreadWidth,CapInsert + CapRim – CapWall – ThreadThick],center=false); translate([0,0,CapInsert]) { difference() { cylinder(d=TubeID + 2*TubeWall,h=CapRim,$fn=NumSides); translate([0,0,-Protrusion]) cylinder(d=TubeID – 3*2*CapWall,h=2*CapRim,$fn=NumSides); } } } //- Build things if (Layout == "Show") TubeCap(); if (Layout == "Build") translate([0,0,OAHeight]) rotate([180,0,0]) TubeCap();


