diff --git a/amt-box.scad b/amt-box.scad new file mode 100644 index 0000000..2e75c0d --- /dev/null +++ b/amt-box.scad @@ -0,0 +1,79 @@ +/** + * Laser cuttable template for building a shelf speaker with + * Dynavox AMT-1 and Wavecor WF145WA05 + */ + +B = 12.7; // Bushing outer diameter +M = 6.35; // Mill diameter +J = 100; // Mill pad +T = 21; // Material thickness +I = 320; // Internal dimension +A = 5; // Alignment pad size +P = 17; // Alignment pad placement +O = I + 2 * T; // Outer dimensions +BD = B - M; // Bushing offset + +W = 200 - 40; // Internal width +H = 350 - 40; // Internal height/depth + +echo("Internal volume", I*I*I/1000000, "L"); + +module sam300d_flush_mount() { + offset(r=BD) square([255, 188], center=true); +} + +// Side panels +translate([I+J/2, 0]) { + difference() { + square([H - BD, H + 100], center=true); + translate([-H/2 + 100 , -H/2 + 60]) circle(d=100, $fn=100); // !!! + offset(r=BD/2) square([80+M,M], center=true); + + + // Alignment squares + translate([O/2,0]) rotate(45) square(A, center=true); + translate([-O/2,0]) rotate(45) square(A, center=true); + translate([0,I/2-P]) rotate(45) square(A, center=true); + translate([0,-I/2+P]) rotate(45) square(A, center=true); + translate([I/2,I/2-P]) rotate(45) square(A, center=true); + translate([I/2,-I/2+P]) rotate(45) square(A, center=true); + translate([-I/2,I/2-P]) rotate(45) square(A, center=true); + translate([-I/2,-I/2+P]) rotate(45) square(A, center=true); + } +} + +// Back face + bottom/top cutout +translate([-I-J/2, 0]) +difference() { + square([W - BD, H + 100], center=true); + offset(r=BD/2) square([93 - BD, 80 - BD], center=true); + translate([0,H/2]) rotate(45) square(A, center=true); + translate([0,-H/2]) rotate(45) square(A, center=true); + translate([-W/2+P,0]) rotate(45) square(A, center=true); + translate([W/2-P,0]) rotate(45) square(A, center=true); + +} + +// Mounting holes +difference() { + square([W, H], center=true); + + // Tweeter + translate([0, H/2-80]) { + circle(d=65 + BD, $fn=100); + translate([-56/2,-56/2]) circle(d=4, $fn=30); + translate([56/2,-56/2]) circle(d=4, $fn=30); + translate([-56/2,56/2]) circle(d=4, $fn=30); + translate([56/2,56/2]) circle(d=4, $fn=30); + + } + + // Woofer + translate([0, H/2-200]) { + circle(d=118 + BD, $fn=100); + for ( i = [45 : 90 : 360] ){ + rotate(i) translate([138/2,0]) circle(d=4, $fn=30); + } + + } +} \ No newline at end of file diff --git a/lia-amt.scad b/lia-amt.scad new file mode 100644 index 0000000..176e82f --- /dev/null +++ b/lia-amt.scad @@ -0,0 +1,140 @@ +B = 19.05; +M = 6.35; + +A = 5; // Alignment pad size + + +BD = B - M; + +W = 250-20-20; // Internal width +H = 450-20-20; // Internal height +D = 275-20; // Internal depth + +WF182_HEIGHT = 165.5; + +AMT1I_WIDTH = 100; +AMT1I_HEIGHT = 130; + +module wf182() { + intersection() { + circle(d=182, $fn=100); + square([182,WF182_HEIGHT], center=true); + } +} + +module amt1i() { + offset(r=BD/2) square([AMT1I_WIDTH, AMT1I_HEIGHT], center=true); +} + +R = 152.5; // WF182_HEIGHT/2 + 4 + AMT1I_HEIGHT/2; + +module alignment() { + for (i=[25+AMT1I_HEIGHT/2, 0, -R, R]) { + translate([110, i]) rotate(45) square(A,center=true); + translate([0, i]) rotate(45) square(A,center=true); + translate([-110, i]) rotate(45) square(A,center=true); + } +} + +// Side panel and tweeter alignment +difference() { + square([275-19-BD, 450+100], center=true); + + // Tweeter cutout + translate([0, 450/2-25-130/2]) { + offset(r=BD/2) square([AMT1I_WIDTH, AMT1I_HEIGHT], center=true); + translate([100, 0]) rotate(45) square(A,center=true); + translate([-100, 0]) rotate(45) square(A,center=true); + } + + // Tweeter flush mount + translate([0,-450/2+25+130/2]) { + offset(r=BD/2) square([AMT1I_WIDTH-20, AMT1I_HEIGHT-10], center=true); + + translate([100, 0]) rotate(45) square(A,center=true); + translate([-100, 0]) rotate(45) square(A,center=true); + } + + translate([0, -450/2]) rotate(45) square(A,center=true); + translate([0, 450/2]) rotate(45) square(A,center=true); + translate([100, 0]) rotate(45) square(A,center=true); + translate([-100, 0]) rotate(45) square(A,center=true); + rotate(45) square(A,center=true); + +} + +// Front face flush mount and back tube cutout +translate([255,0]) +difference() { + square([250, 450], center=true); + + + translate([0, -450/2+207.5]) { + difference() { + offset(r=BD/2) wf182(); + wf182(); + } + rotate(45) square(3,center=true); + translate([220/2, 0]) rotate(45) square(A,center=true); + translate([-220/2, 0]) rotate(45) square(A,center=true); + for ( i = [0 : 60 : 360] ){ + rotate(i) translate([169.5/2,0]) circle(d=4, $fn=50); + } + for ( i = [0,45,135,180,225] ){ + rotate(i) translate([182/2,0]) rotate(45) square(3,center=true); + } + + translate([0,165.5/2]) rotate(45) square(3,center=true); + translate([0,-165.5/2]) rotate(45) square(3,center=true); + + } + translate([0, -420/2]) rotate(45) square(A,center=true); + translate([0, 420/2]) rotate(45) square(A,center=true); + translate([220/2, 0]) rotate(45) square(A,center=true); + translate([-220/2, 0]) rotate(45) square(A,center=true); +} + + +// Front woofer cutout & groove +translate([-255,0]) +difference() { + square([250-20-20-BD, 450-20-20-BD], center=true); + + // Woofer cutout + translate([0, -450/2+207.5]) { + circle(d=152+BD); + for ( i = [0 : 90 : 360] ){ + rotate(i) translate([90,0]) rotate(45) square(A,center=true); + } + } + + translate([0, -180]) rotate(45) square(A,center=true); + translate([0, 180]) rotate(45) square(A,center=true); + translate([-90,0]) rotate(45) square(A,center=true); + translate([90,0]) rotate(45) square(A,center=true); + +} + + +// Back reflex tube and terminal cutout & groove +translate([-500,0]) +difference() { + square([250-20-20-BD, 450-20-20-BD], center=true); + + // Terminal cutout + translate([0, 450/2-(450-207.5)/ 2]) + offset(r=BD/2) square([93 - BD, 80 - BD], center=true); + + // Bass reflex tube + translate([0, -450/2+80]) { + circle(d=97, $fn=100); + } + + // Alignment + translate([0, -180]) rotate(45) square(A,center=true); + translate([0, 180]) rotate(45) square(A,center=true); + translate([-90,0]) rotate(45) square(A,center=true); + translate([90,0]) rotate(45) square(A,center=true); + +} +