include <../lib/chamfered-cube.scad> include <../lib/rounded-cube.scad> // All units in mm $fn=128; outerWall=4; innerWall=2; layerClearance = 0.5; verStr="v7"; font="Montserrat"; // as a convention, outer dimensions refer to measurements from outside wall to // outside wall, as if you put a caliper around the whole thing. Inner // dimesions refers to inside or void dimensions: the space available to be // filled. outerBoxLength = 300; outerBoxWidth = 154; innerBoxLength = outerBoxLength - 2*outerWall; innerBoxWidth = outerBoxWidth - 2*outerWall; innerBoxHeight = 44; audioTraySide = 64; audioTrayHeight = 15; audioTrayIS = audioTraySide - 2*innerWall; audioTrayIH = audioTrayHeight - innerWall; module audioLayer() { oH = innerBoxHeight; oL = innerBoxLength - 2*layerClearance; // outer length oW = innerBoxWidth - 2*layerClearance; // outer width iL = oL - 2*innerWall; // inner length iW = oW - 2*innerWall; // inner width iH = oH - innerWall; // inner height handleDia=42; cableDia = 130; translate([innerWall, innerWall, innerWall]) union() { difference() { // main shell translate([-innerWall, -innerWall, -innerWall]) roundedCube([oW, oL, oH], [1, 1, 1]); translate([0, 169, 0]) mirror([0, 1, 0]) union() { // screwdriver handle translate([handleDia / 2, handleDia / 2, handleDia / 2]) sphere(d=handleDia); translate([handleDia / 2, handleDia / 2, handleDia / 2]) cylinder(d=handleDia, h = handleDia / 2 + innerWall); translate([(handleDia - 32) / 2, handleDia / 2, 7]) cube([32, 102 - handleDia/2, oH]); // screw bits bitL = 112; bitW = 22; // plain cube version (we're going to oversize and chamfer to get // diagonal edges) // translate([(handleDia - bitW) / 2, handleDia / 2, 0]) cube([bitW, bitL + handleDia/2, oH]); translate([(handleDia - bitW) / 2 - 5, handleDia / 2 - 5, -0.01]) chamferedCube([bitW + 10, bitL + handleDia/2 + 10, 16], chamfer=5); // power block cutout translate([(handleDia - 32) / 2 - 4, handleDia / 2 + 80, 7]) cube([40, 68, oH]); // fingerway cut-outs translate([handleDia*0.6, 55, 0]) cube([24, 36, oH]); } // lower-right cubby translate([handleDia + 2*innerWall, 0, 0]) cube([iW - handleDia - 3*innerWall, 150, oH]); // cable cut-out translate([iW/2, iL - cableDia/2 - innerWall, 0]) cylinder(d=cableDia, h=oH); // upper-left bits union() { // PortaPow translate([6.5, 249.5, 22]) rotate([0, 0, 45]) cube([44.5, 10.5, oH]); // USB thumbdrive translate([5, 272, 1]) rotate([0, 0, 45]) cube([13, 5, oH]); // fingerway translate([16, 271, iH + 15]) sphere(d=46); } // SD-card adapter + SIM removal tool union() { translate([iW - 26, 278, 9.5]) rotate([0, 0, -45]) cube([24.5, 2, 33]); translate([iW - 8, 280, 4.5]) rotate([0, 0, -135]) cube([8.5, 1, 38]); // fingerway translate([iW - 16, 271, iH + 15]) sphere(d=46); } } translate([handleDia*0.988, 77.5, -0.1]) cylinder(d=9, oH - innerWall + 0.1); translate([handleDia*0.988, 114.5, -0.1]) cylinder(d=9, oH - innerWall + 0.1); translate([iW/2 - audioTraySide/2, iL - audioTraySide/2 - cableDia/2 - innerWall, 0]) difference() { translate([0, 0, -0.1]) roundedCube([audioTraySide, audioTraySide, 1.1], [0.4, 0.4, 0.4]); translate([innerWall, innerWall, 0]) cube([audioTraySide - 2*innerWall, audioTraySide - 2*innerWall, 2]); } } } module audioTrayBlank(s, h) { difference() { union() { translate([0, 0, 1]) roundedCube( [s, s, h - 1], [1, 1, 1]); translate([innerWall + layerClearance, innerWall + layerClearance, 0]) roundedCube( [ s - 2*(innerWall + layerClearance), s - 2*(innerWall + layerClearance), h - 1], [1, 1, 1]); } // bottom edge chamfers translate([-1, (innerWall + layerClearance), 1]) rotate([-30, 0, 0]) translate([0, -2*(innerWall + layerClearance), -4]) cube([audioTraySide+2, 2*(innerWall + layerClearance), 4]); translate([-1, audioTraySide - (innerWall + layerClearance), 1]) rotate([30, 0, 0]) translate([0, 0, -4]) cube([audioTraySide+2, 2*(innerWall + layerClearance), 4]); translate([(innerWall + layerClearance), -1, 1]) rotate([0, 30, 0]) translate([-2*(innerWall + layerClearance), 0, -4]) cube([2*(innerWall + layerClearance), audioTraySide+2, 4]); translate([audioTraySide - (innerWall + layerClearance), -1, 1]) rotate([0, -30, 0]) translate([0, 0, -4]) cube([2*(innerWall + layerClearance), audioTraySide+2, 4]); // top lip cutaway translate([innerWall, innerWall, h - 1]) cube([audioTrayIS,audioTrayIS, 4]); // version marker translate([0.6, 30, 4]) rotate([90, 0,-90]) linear_extrude(0.61) text(text = verStr, font = font, size = 8); } } module audioTray1() { difference() { audioTrayBlank(s = audioTraySide, h = audioTrayHeight); translate([2.5, innerWall, innerWall]) union() { for (i = [0, 1]) { translate([i*(11), i*60, 0]) mirror([0, i, 0]) union() { translate([6.5, 0, 6]) rotate([-90, 0, 0]) cylinder(d=13, h=28); translate([0, 0, 6]) cube([13, 28, audioTrayIH]); translate([6.5, 27.5, 6]) rotate([-90, 0, 0]) cylinder(d=7, h=32.5); translate([3, 27.5, 6]) cube([7, 32.5, audioTrayIH]); translate([6.5, 48, 3.5]) rotate([-90, 0, 0]) cylinder(d=7, h=12); translate([3, 48, 3.5]) cube([7, 12, audioTrayIH]); translate([6.5, 53, 11]) sphere(d=14); } translate([22 + i*(10), i*60, 0]) mirror([0, i, 0]) translate([0, 6, 0]) union() { translate([6, 0, 7]) rotate([-90, 0, 0]) cylinder(d=12, h=16); translate([0, 0, 7]) cube([12, 16, audioTrayIH]); translate([6, 15.5, 7]) rotate([-90, 0, 0]) cylinder(d=7, h=32.5); translate([2.5, 15.5, 7]) cube([7, 32.5, audioTrayIH]); translate([6, 36, 4]) rotate([-90, 0, 0]) cylinder(d=7, h=12); translate([2.5, 36, 4]) cube([7, 12, audioTrayIH]); translate([6, 43, 11]) sphere(d=13); } } translate([audioTrayIS - 14, 8, 0]) union() { translate([6, 0, 6.5]) rotate([-90, 0, 0]) cylinder(d=12, h=40); translate([0, 0, 6.5]) cube([12, 40, audioTrayIH]); translate([6, 26, 5]) rotate([-90, 0, 0]) cylinder(d=12, h=14); translate([0, 26, 5]) cube([12, 14, audioTrayIH]); } } // Show Cross-section // translate([-2, -1, -1]) cube([audioTraySide + 4, 20, audioTrayHeight + 4]); } } module audioTray2() { difference() { audioTrayBlank(s = audioTraySide, h = audioTrayHeight); translate([innerWall, innerWall, innerWall]) union() { // drum-key translate([audioTrayIS/2, 2*innerWall, 0]) union() { translate([0, 0, 7.5]) rotate([-90, 0, 0]) cylinder(d=11, h=36); translate([-5.5, 0, 7.5]) cube([11, 36, audioTrayIH]); translate([-51/2, 0, 7.5 - 3]) cube([51, 9, audioTrayIH]); } for (i = [-1, 1]) { translate([audioTrayIS/2 - 6 + i*20, 16, 0]) union() { translate([6, 0, 7]) rotate([-90, 0, 0]) cylinder(d=12, h=40); translate([0, 0, 7]) cube([12, 40, audioTrayIH]); translate([6, 26, 5]) rotate([-90, 0, 0]) cylinder(d=12, h=14); translate([0, 26, 5]) cube([12, 14, audioTrayIH]); } } } // Show Cross-section // translate([-2, -1, -1]) cube([audioTraySide + 4, 10, audioTrayHeight + 4]); } } module audioTray3() { difference() { audioTrayBlank(s = audioTraySide, h = audioTrayHeight - 1); translate([2*innerWall, (audioTrayIS - 43)/2, innerWall]) cube([43, 43, audioTrayIH]); translate([3*innerWall + 43, (audioTrayIS - 43)/2, innerWall]) cube([12.4, 46, audioTrayIH]); translate([50, 8 + innerWall*2, innerWall]) cylinder(d=16, h=audioTrayIH); } } module usbBitsTray() { difference() { audioTrayBlank(s = audioTraySide, h = audioTrayHeight); translate([innerWall, innerWall, innerWall]) union() { // right-angle connectors (1st variation) translate([innerWall, innerWall, -1]) for (i = [0, 1]) { translate([34*i, 16*i, 0]) rotate([0, 0, 180*i]) union() { // main body cube([22.5, 7, 14]); // usb connector // 1.64 to edge, 4.64 thick translate([1.4, 0, 0]) cube([6, 16, 14]); // release wedge translate([22.5, 0, 0]) rotate([0, 15, 0]) translate([-22, 0, 0]) cube([22, 7, 14]); // fingerway translate([-1, -1, 11]) cube([36, 18, 3]); } } // right-angle connectors (2nd variation) translate([innerWall, innerWall + 18, 5 + 0.1]) for (i = [0, 1]) { translate([30*i, 36*i, 0]) rotate([0, 0, 180*i]) union() { // main body cube([25, 13, 7]); // usb connector // 10.32 wide, 0.73 to edge cube([12, 22, 7]); // release wedge //color("blue") translate([17, 0, 0]) rotate([0, 30, 0]) cube([8, 13, 7]); // finergway translate([25, 6.5, 8]) sphere(d=13); } } // usb A-C converers // 29 x 18 x 9 translate([innerWall + 38, innerWall - 0.5, 3]) for(i = [0,1]) { translate([0, 28.5*2*i, 0]) mirror([0, i, 0]) union() { // main body cube([18, 29, 10]); // release wedge //color("blue") translate([0, 28.5, -4]) rotate([-20, 0, 0]) translate([0, -29, 0]) cube([18, 29, 14]); } } } } } //audioLayer(); //translate([outerBoxWidth + 10, 0, 0]) audioTray1(); translate([outerBoxWidth + 10, 80, 0]) usbBitsTray(); //translate([outerBoxWidth + 10, 160, 0]) audioTray3(); //translate([outerBoxWidth + 10, 240, 0]) audioTray2();