diff --git a/backpack-organization/main-box.scad b/backpack-organization/main-box.scad new file mode 100644 index 0000000..0a5509f --- /dev/null +++ b/backpack-organization/main-box.scad @@ -0,0 +1,246 @@ +include <../lib/rounded-cube.scad> + +// All units in mm +$fn=128; +outerWall=4; +innerWall=2; +layerClearance = 0.5; +verStr="v3"; +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 = 14); + + translate([(audioTrayIS - 52)/2, innerWall, innerWall]) + union() { + + for (i = [0, 1]) { + translate([i*(14), 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([28.5 + i*(14), 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, 6]) cube([12, 16, audioTrayIH]); + + translate([6, 15.5, 7]) + rotate([-90, 0, 0]) cylinder(d=7, h=32.5); + translate([2.5, 15.5, 6]) cube([7, 32.5, audioTrayIH]); + + translate([6, 36, 4]) + rotate([-90, 0, 0]) cylinder(d=7, h=12); + translate([2.5, 36, 3.5]) cube([7, 12, audioTrayIH]); + + translate([6, 43, 11]) + sphere(d=13); + } + } + } + + // Show Cross-section + //translate([-2, -1, -1]) cube([audioTraySide + 4, 10, 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();