MakerHome

One 3D print every day for a year

Day 113

Poly-snaps truncated tetrahedron

Over the next six days we’ll be posting polyhedra that we assembled using our new Poly-Snaps on Thingiverse. Our previous polyhedral models were made from Snap Tiles which had either two or three snaps on each side. This new type of modular polyhedra-builder has the same number of snaps on each side and is customizable in Thingiverse Customizer. Today’s print is a Truncated Tetrahedroncomposed of four triangles and four hexagons:

Thingiverse link: http://www.thingiverse.com/thing:208591

Settings: MakerWare .3mm/low in two batches (to get the two colors).

Technical notes: We used the following settings in the Thingiverse Customizer, which makes a sturdy, compact model that can be difficult to put together but stays together well even when tossed around.

Sides = 3 and 6
Snaps = 3
Side Length = 25
Thickness = 3.5
Border = 3.5
Clearance = .17
Lengthen = .3

Technical notes, OpenSCAD flavor: This is one of my first OpenSCAD designs so it is kind of a hack, but here is the code I wrote to make the Poly-Snap tiles:

// mathgrrl polysnap tiles

////////////////////////////////////////////////////////////////
// PARAMETERS //////////////////////////////////////////////////

/* [Shape] */

// Choose the number of sides for the tile
sides = 5; // [3,4,5,6,7,8,9,10,11,12]

// Choose the number of snaps on each side
snaps = 3; // [2,3,4,5,6,7,8]

/* [Size] */

// Set the length of each side, in mm
side_length = 25; 

// Set the thickness of the tile, in mm
thickness = 3.5;

// Set the border thickness, in mm
border = 3.5;

/* [Adjust Fit] */

// Add extra space between snaps, in mm
clearance = .17;

// Add extra length to the snaps, in mm
lengthen = .3;

//radius depends on side length
radius = side_length/(2*sin(180/sides)); 

//inside radius depends on the border thickness
inside = radius-border/(cos(180/sides)); 

//width of each snap depends on number of snaps
snapwidth = radius*sin(180/sides)/snaps;

////////////////////////////////////////////////////////////////
// RENDERS /////////////////////////////////////////////////////

union(){
 //make the polygon base
 poly_maker();

 //make the snaps
 snap_maker();
}

////////////////////////////////////////////////////////////////
// MODULES /////////////////////////////////////////////////////

//build the polygon shape of the tile
//shape is made up of n=sides wedges that are rotated around
module poly_maker(){

 //subtract the smaller polygon from the larger polygon
 difference(){

 //extrude to thicken the polygon
 linear_extrude(height=thickness,center=true){ 

 //rotate the wedge n=sides times at angle of 360/n each time
 for(i=[0:sides]){

 //rotation is around the z-axis [0,0,1]
 rotate(i*360/sides,[0,0,1])

 //make triangular wedge with angle based on number of sides
 polygon(

 //the three vertices of the triangle
 points = [[0-.1,0-.1], //tweaks fix CGAL errors
  [radius,0-.01],
  [radius*cos(360/sides)-.01,radius*sin(360/sides)+.01]],

 //the order to connect the three vertices above
 paths = [[0,1,2]]
 );
 }
 }
 //extrude to thicken the center polygon that will be the hole
 linear_extrude(height=thickness+2,center=true){ 

 //rotate the wedge n=sides times at angle of 360/n each time
 for(i=[0:sides]){

 //rotation is around the z-axis [0,0,1]
 rotate(i*360/sides,[0,0,1])

 //make triangular wedge with angle based on number of sides
 polygon(

 //the three vertices of the triangle
 points = [[0-.2,0-.2], //tweaks fix CGAL errors
  [inside,0-.01],
  [inside*cos(360/sides)-.01,inside*sin(360/sides)+.01]],

 //the order to connect the three vertices above
 paths = [[0,1,2]]
 );
 }
 }
 }
}

//build the snaps around the tile
//try the commands alone with i=1 and i=2 to see how this works
//remember to read from the bottom to the top to make sense of this
module snap_maker(){

 //rotate the side of snaps n=sides times at angle of 360/n each time
 for(i=[0:sides]){ 

 //rotation is around the z-axis [0,0,1]
 rotate(i*360/sides,[0,0,1])

 //build snaps for first side at the origin and move into positions
 for(i=[0:snaps-1]){

 //read the rest of the commands from bottom to top
 //translate the snap to the first side
 translate([radius,0,-thickness/2]) 

 //rotate the snap to correct angle for first side
 rotate(180/sides) 

 //for i^th snap translate 2*i snapwidths over from origin
 translate([0,2*i*snapwidth,0]) 

 //rounded box for snap made from a box and cylinder
 union(){

 //cube part of snap shape at the origin
 cube([thickness/2+lengthen,snapwidth-clearance,thickness]);

 //post at back of snap to avoid loose teeth
 //shifted a bit right to avoid overhangs when sides=3
 translate([-.5,.5,0])
 cube([thickness/2,snapwidth-clearance-.5,thickness]);

 //round part of snap shape at the origin
 //move cylinder to the end of the box
 translate([thickness/2+lengthen,
                   snapwidth-clearance,
                   thickness/2])
 //rotate cylinder to match box orientation
 rotate(90,[0,1,0]) 
 rotate(90,[1,0,0]) 

 //cylinder of the correct size to match box
 cylinder(
 r=thickness/2,
 h=snapwidth-clearance,
 $fn=16  //number of sides
 );
 }
 }
 }
} 

Update: These Poly-Snap triangle tiles were used by owens on Thingiverse to make a beautiful model of a toroidal polyhedron. So cool!