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:

Mailing Tube Cap - top - Slic3r
Mailing Tube Cap – top – Slic3r

The small ribs probably don’t actually do anything, but seemed like a nice touch.

They’re somewhat less boring from the bottom:

Mailing Tube Cap - bottom - Slic3r
Mailing Tube Cap – bottom – Slic3r

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:

Mailing tube end cap - installed
Mailing tube end cap – installed

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:

// 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();

Comments are closed.