include module standoff(pcb_heigth, pos) { // http://www.farnell.com/datasheets/2019490.pdf // http://www.farnell.com/datasheets/1702481.pdf // http://www.farnell.com/cad/1902171.pdf color("FloralWhite") translate(pos) { translate([0, 0, 5]) cylinder(h=6, d=3, $fn = circle_res); cylinder(h=5, d=6.35, $fn = 6); translate([0, 0, 5 + pcb_heigth]) cylinder(h=2.4, d=6.35, $fn = 6); ///screw translate([0, 0, -pvc_thickness - 2]) difference() { union() { cylinder(h=2, d=6.5, $fn = circle_res); translate([0,0,2]) cylinder(h=4, d=3, $fn = circle_res); } cube([0.54, 6.5, 2], center=true); } } } module rpi2() { hole_spacing = [49, 58]; rpi2_bbox = [58, 87]; pcb_size = [56,85]; pcb_heigth = 1.4; pcb_offset = [(rpi2_bbox[0] - pcb_size[0])/2, rpi2_bbox[1] - pcb_size[1]]; pos = hole_spacing/2; hole_center = [rpi2_bbox[0]/2, rpi2_bbox[1]-33,0]; color("DarkGreen") linear_extrude(pcb_heigth) union() { difference(){ translate(pcb_offset) hull() { orig = [2.54, 2.54]; pos = pcb_size - orig; translate(pos) circle(r=2.54); translate([pos[0],orig[1]]) circle(r=2.54, $fn = circle_res); translate(orig) circle(r=2.54); translate([orig[0],pos[1]]) circle(r=2.54, $fn = circle_res); } translate(hole_center + pos) { circle(d=3); translate([0,-hole_spacing[1],0]) circle(d=3, $fn=circle_res); } translate(hole_center - pos) { circle(d=3); translate([0,hole_spacing[1],0]) circle(d=3, $fn=circle_res); } } } translate([0, 0, pcb_heigth]) { //USB ports usb_size = [13.3, 18, 15.7]; color("Silver") translate([pcb_offset[0] + pcb_size[0] - 2.47 - usb_size[0], pcb_offset[1] - 1.8, 0]) cube(usb_size); color("Silver") translate([pcb_offset[0] + pcb_size[0] - 2.47 - 4.7 - 2*usb_size[0], pcb_offset[1] - 1.8, 0]) cube(usb_size); // Ethernet rj45_size = [16, 21.25, 13.6]; color("Silver") translate([pcb_offset[0] + 2.3, pcb_offset[1] - 1.9, 0]) cube(rj45_size); /// HDMI port hdmi_size = [11.5, 15.2, 6]; translate([pcb_offset[0] -1.2, pcb_offset[1] + pcb_size[1] - 24.5 - hdmi_size[1], 0]) { color("silver") cube(hdmi_size); color("orange") translate(hdmi_size/2) cube([9, 9, hdmi_size[2] + 0.01], center=true); } /// USB port uusb_size = [5.6, 7.6, 2.54]; color("silver") translate([pcb_offset[0] - 1.2, pcb_offset[1] + pcb_size[1] - 7 - uusb_size[1], 0]) { cube(uusb_size); } /// GPIOs for(h = [0:19]) { translate([0, -h*2.5, 0]) { color("black") translate(pcb_offset + pcb_size - [4.6,8.4]) hull() { cylinder(h = 2.55, d=2.5, $fn=8); translate([2.5,0,0]) cylinder(h = 2.55, d=2.54, $fn=8); } color("gold") translate([0,0, -(1.6 + pcb_heigth)]) translate(pcb_offset + pcb_size - [4.6, 8.4]) { cylinder(h = 8.5 + 1.6 + pcb_heigth, d=0.7, $fn=4); translate([2.5,0,0]) cylinder(h = 8.5 + 1.6 + pcb_heigth, d=0.7, $fn=4); } } } } } module rpi2_standoff() { hole_spacing = [49, 58]; rpi2_bbox = [58, 87]; pcb_heigth = 1.4; pos = hole_spacing/2; hole_center = [rpi2_bbox[0]/2, rpi2_bbox[1]-33,0]; translate([0, 0, 5]) { rpi2(); } /// standoff with screws below the support standoff(pcb_heigth, hole_center + pos); standoff(pcb_heigth, hole_center - pos); standoff(pcb_heigth, hole_center + pos - [0, hole_spacing[1]]); standoff(pcb_heigth, hole_center - pos + [0, hole_spacing[1]]); } rpi2_standoff();