include <../lib/rounded-cube.scad> // All units in mm $fn=128; outerWall=4; innerWall=2; layerClearance = 0.5; verStr="v5"; 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; audioTraySide = 64; audioTrayHeight = 15; audioTrayIS = audioTraySide - 2*innerWall; audioTrayIH = audioTrayHeight - innerWall; module audioLayer() { iH = 42; // inner height oL = innerBoxLength - 2*layerClearance; // outer length oW = innerBoxWidth - 2*layerClearance; // outer width iL = oL - 2*innerWall; // inner length iW = oW - 2*innerWall; // inner width handleDia=42; cableDia = 130; translate([innerWall, innerWall, innerWall]) union() { difference() { // main shell translate([-innerWall, -innerWall, -innerWall]) roundedCube([oW, oL, iH], [1, 1, 1]); 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); // screw bits bitL = 112; bitW = 20; translate([(handleDia - bitW) / 2, handleDia / 2, 0]) cube([bitW, bitL + handleDia/2, iH]); // release ramp translate([(handleDia - bitW)/2, handleDia/2 + bitW + bitL + 1, 0]) rotate([-45, 0, 0]) translate([0, -iH, 0]) cube([bitW, iH, iH*2]); // lower-right cubby translate([handleDia + 2*innerWall, 0, 0]) cube([iW - handleDia - 3*innerWall, 150, iH]); // cable cut-out translate([iW/2, iL - cableDia/2 - innerWall, 0]) cylinder(d=cableDia, h=iH); // fingerway cut-outs translate([handleDia*0.6, 70, 0]) cube([24, 36, iH]); } //translate([innerWall, innerWall, innerWall]) cube([iW, iL, iH]); } translate([handleDia*0.916, 69.5, -0.1]) cylinder(d=15, iH - innerWall + 0.1); translate([handleDia*0.916, 105.5, -0.1]) cylinder(d=15, iH - 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 = 15); 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 - 2); 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); } } //audioLayer(); translate([outerBoxWidth + 10, 0, 0]) audioTray1(); //translate([outerBoxWidth + 10, 80, 0]) audioTray2(); //translate([outerBoxWidth + 10, 160, 0]) audioTray3();