$fn=30; BOARD_WIDTH=96.5; BOARD_HEIGHT=96.0; BOARD_THICKNESS=1.6; HOLE_NW_X=4.0; HOLE_NW_Y=4.0; HOLE_NE_X=92.5; HOLE_NE_Y=4.0; HOLE_SW_X=4.0; HOLE_SW_Y=92.0; HOLE_SE_X=92.5; HOLE_SE_Y=92.0; WALL_SPACE=1.0; WALL_THICKNESS=2.0; HOLE_HEIGHT=15.0; // USB A is 14.5 module pillar() { translate([0,0,HOLE_HEIGHT/2]) { difference() { cylinder(h=HOLE_HEIGHT, d=6, center=true); cylinder(h=HOLE_HEIGHT, d=3.5, center=true); } } } mirror([1,0,0]) { // we used bottom view // bottom plate cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS]); // screw mounts translate([WALL_THICKNESS+WALL_SPACE+HOLE_NW_X,WALL_THICKNESS+WALL_SPACE+HOLE_NW_Y,WALL_THICKNESS]) { pillar(); } translate([WALL_THICKNESS+WALL_SPACE+HOLE_NE_X,WALL_THICKNESS+WALL_SPACE+HOLE_NE_Y,WALL_THICKNESS]) { pillar(); } translate([WALL_THICKNESS+WALL_SPACE+HOLE_SW_X,WALL_THICKNESS+WALL_SPACE+HOLE_SW_Y,WALL_THICKNESS]) { pillar(); } translate([WALL_THICKNESS+WALL_SPACE+HOLE_SE_X,WALL_THICKNESS+WALL_SPACE+HOLE_SE_Y,WALL_THICKNESS]) { pillar(); } // side MARGIN=1.0; USB_B_WIDTH=12.0+MARGIN; USB_B_HEIGHT=11.0+MARGIN; USB_A_WIDTH=7.0+MARGIN; USB_A_HEIGHT=14.5+MARGIN; BARREL_WIDTH=9.0+MARGIN; BARREL_HEIGHT=11.3+MARGIN; INDUCTOR_HEIGHT=7.5; // side north difference() { cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); // DFP 7 USB A translate([WALL_THICKNESS+WALL_SPACE+12.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); } // DFP 7 BARREL translate([WALL_THICKNESS+WALL_SPACE+28-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); } // DFP 6 USB A translate([WALL_THICKNESS+WALL_SPACE+40.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); } // DFP 6 BARREL translate([WALL_THICKNESS+WALL_SPACE+56-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); } // DFP 5 USB A translate([WALL_THICKNESS+WALL_SPACE+68.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); } // DFP 5 BARREL translate([WALL_THICKNESS+WALL_SPACE+84-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); } } // side west difference() { cube([WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); // USB B translate([0,WALL_THICKNESS+WALL_SPACE+48-USB_B_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-USB_B_HEIGHT]) { cube([WALL_THICKNESS,USB_B_WIDTH,USB_B_HEIGHT]); } // 5V BARREL translate([0,WALL_THICKNESS+WALL_SPACE+33-BARREL_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([WALL_THICKNESS,BARREL_WIDTH,BARREL_HEIGHT]); } // 12V BARREL translate([0,WALL_THICKNESS+WALL_SPACE+63-BARREL_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([WALL_THICKNESS,BARREL_WIDTH,BARREL_HEIGHT]); } } // side south translate([0,BOARD_HEIGHT+WALL_THICKNESS+2*WALL_SPACE,0]) { difference() { cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); // DFP 1 USB A translate([WALL_THICKNESS+WALL_SPACE+27.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); } // DFP 1 BARREL translate([WALL_THICKNESS+WALL_SPACE+12-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); } // DFP 2 USB A translate([WALL_THICKNESS+WALL_SPACE+55.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); } // DFP 2 BARREL translate([WALL_THICKNESS+WALL_SPACE+40-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); } // DFP 3 USB A translate([WALL_THICKNESS+WALL_SPACE+83.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); } // DFP 3 BARREL translate([WALL_THICKNESS+WALL_SPACE+68-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); } } } // side east translate([BOARD_WIDTH+WALL_THICKNESS+2*WALL_SPACE,0,0]) { difference() { cube([WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); // DFP 4 USB A translate([0,WALL_THICKNESS+WALL_SPACE+40.5-USB_A_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { cube([WALL_THICKNESS,USB_A_WIDTH,USB_A_HEIGHT]); } // DFP 4 BARREL translate([0,WALL_THICKNESS+WALL_SPACE+56-BARREL_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { cube([WALL_THICKNESS,BARREL_WIDTH,BARREL_HEIGHT]); } } } // top plate SWITCH_WIDTH=3.0+0.5; SWITCH_LENGTH=6.0+0.5; translate([0,0,WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]) { difference() { cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS]); // DFP 7 translate([WALL_THICKNESS+WALL_SPACE+20.0, WALL_THICKNESS+WALL_SPACE+6.7,WALL_THICKNESS/2]) { cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); } // DFP 6 translate([WALL_THICKNESS+WALL_SPACE+48.0, WALL_THICKNESS+WALL_SPACE+6.7,WALL_THICKNESS/2]) { cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); } // DFP 5 translate([WALL_THICKNESS+WALL_SPACE+76.0, WALL_THICKNESS+WALL_SPACE+6.7,WALL_THICKNESS/2]) { cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); } // DFP 4 translate([WALL_THICKNESS+WALL_SPACE+89.7, WALL_THICKNESS+WALL_SPACE+48.0,WALL_THICKNESS/2]) { cube([SWITCH_LENGTH, SWITCH_WIDTH, WALL_THICKNESS], center=true); } // DFP 3 translate([WALL_THICKNESS+WALL_SPACE+76.0, WALL_THICKNESS+WALL_SPACE+89.3,WALL_THICKNESS/2]) { cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); } // DFP 2 translate([WALL_THICKNESS+WALL_SPACE+48.0, WALL_THICKNESS+WALL_SPACE+89.3,WALL_THICKNESS/2]) { cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); } // DFP 1 translate([WALL_THICKNESS+WALL_SPACE+20.0, WALL_THICKNESS+WALL_SPACE+89.3,WALL_THICKNESS/2]) { cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); } } } }