$fn=120; degrees=360; steps = 12; spacing = 7; width = 30; height = 70; module pizero () { // This is the main board and a block for the sd card translate ([0,-1,0]) cube ([80, 32, 2]); translate ([2,2,0]) cube ([61, 26, 2.4]); // hdmi translate ([48,25,0]) cube ([12, 8, 5.4]); // cpu? translate ([48,25,0]) cube ([20, 7, 5.4]); // usb and power translate ([20.6,26,0]) cube ([8, 8, 3.4]); translate ([8,26,0]) cube ([8, 8, 3.4]); // ? translate ([50,7,0]) cube ([18, 16, 3.4]); // Bottom holes translate ([-4,22,0]) rotate (90, [0,1,0]) cylinder (h=10, r=6); translate ([-4,16,0]) rotate (90, [0,1,0]) cylinder (h=10, r=5); translate ([-4,10,0]) rotate (90, [0,1,0]) cylinder (h=10, r=3); } difference () { union (){ // Center post translate ([3,0,0]) rotate (90, [0,1,0]) cylinder (h=height-10, r=spacing +1 ); // the outer wall. difference (){ translate ([-1,0,0]) rotate (90, [0,1,0]) cylinder (h=height+2, r=width+spacing+3); translate ([3,0,0]) rotate (90, [0,1,0]) cylinder (h=height+3, r=width+spacing); } } union (){ // rotate all the pi zeros around in a circle // to cut out all the holes they need in each position. // change steps to cut out a different number of holes. for (i=[0:degrees/steps:degrees-steps]) { rotate( i, [1, 0, 0]) translate([0, spacing, 0]) pizero(); // Center hole translate ([-15,0,0]) rotate (90, [0,1,0]) cylinder (h=height+20, r=spacing +1-3 ); } } }