add sma_open
This commit is contained in:
parent
a83fcd74c8
commit
80ea4acde5
265
cad/sma_open.scad
Normal file
265
cad/sma_open.scad
Normal file
@ -0,0 +1,265 @@
|
||||
include <threads.scad>;
|
||||
//$fn=128;
|
||||
|
||||
/*[ Array parameters ]*/
|
||||
// Last parameter is for support attach.
|
||||
|
||||
// sphere radius (mm):
|
||||
r = [150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 270];
|
||||
|
||||
// microphones zenith coordinates (°):
|
||||
theta = [0., 90., 90., 90., 90., 180., 54.7356, 54.7356, 54.7356, 54.7356, 125.264, 125.264, 125.264, 125.264, 45., 45., 45., 45., 90., 90., 90., 90., 135., 135., 135., 135., 180];
|
||||
|
||||
// microphone azimuth coordinates (°):
|
||||
phi = [0., 0., 90., 180., 270., 0., 45., 135., 225., 315., 45., 135., 225., 315., 0., 90., 180., 270., 45., 135., 225., 315., 0., 90., 180., 270., 0];
|
||||
|
||||
// connection matrix
|
||||
neighbors =
|
||||
[
|
||||
[14, 15, 16, 17], //0
|
||||
[14, 21, 22, 18], //1
|
||||
[15, 18, 23, 19], //2
|
||||
[16, 19, 24, 20], //3
|
||||
[17, 21, 25, 20], //4
|
||||
[22, 23, 24, 25], //5
|
||||
[14, 15, 18], //6
|
||||
[15, 16, 19], //7
|
||||
[16, 17, 20], //8
|
||||
[17, 14, 21], //9
|
||||
[22, 23, 18, 26], //10
|
||||
[23, 24, 19, 26], //11
|
||||
[24, 25, 20, 26], //12
|
||||
[21, 22, 25, 26], //13
|
||||
[0, 1, 6, 9], //14
|
||||
[0, 2, 6, 7], //15
|
||||
[0, 3, 7, 8], //16
|
||||
[0, 4, 8, 9], //17
|
||||
[1, 2, 6, 10], //18
|
||||
[2, 3, 7, 11], //19
|
||||
[3, 4, 8, 12], //20
|
||||
[4, 1, 9, 13], //21
|
||||
[1, 5, 10, 13], //22
|
||||
[2, 5, 10, 11], //23
|
||||
[3, 5, 11, 12], //24
|
||||
[4, 5, 12, 13], //25
|
||||
[10, 11, 12, 13], // support
|
||||
];
|
||||
|
||||
module attach(id_mic, rmic=3.82, rstud=1.75, color="yellow"){
|
||||
rtp = [r[id_mic], theta[id_mic], phi[id_mic]];
|
||||
center = sph2cart(rtp);
|
||||
|
||||
difference(){
|
||||
union(){
|
||||
for (i=[0:len(neighbors[id_mic])-1]){
|
||||
neighbor =
|
||||
sph2cart(
|
||||
[
|
||||
r[neighbors[id_mic][i]],
|
||||
theta[neighbors[id_mic][i]],
|
||||
phi[neighbors[id_mic][i]]
|
||||
]
|
||||
);
|
||||
rtp2=cart2sph(neighbor-center);
|
||||
translate(center)
|
||||
rotate([0, rtp2[1], rtp2[2]]){
|
||||
difference(){
|
||||
cylinder(r=rstud+2,h=22);
|
||||
translate([0,0,16])
|
||||
cylinder(r=rstud,h=25);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate(center)
|
||||
rotate([0, rtp[1], rtp[2]]){
|
||||
cylinder(r=rmic+2,h=20,center=true);
|
||||
}
|
||||
}
|
||||
translate(center)
|
||||
{
|
||||
rotate([0, rtp[1], rtp[2]]){
|
||||
cylinder(r=rmic,h=40, center=true);
|
||||
translate([rmic,0,5])
|
||||
rotate([90,0,90])
|
||||
linear_extrude(3)
|
||||
text(str(id_mic+1), size=4, valign="center", halign="center");}}
|
||||
}
|
||||
}
|
||||
|
||||
support();
|
||||
|
||||
// treaded attach
|
||||
module support(stud=1.75){
|
||||
id_mic = len(r)-1;
|
||||
rtp = [r[id_mic], theta[id_mic], phi[id_mic]];
|
||||
center = sph2cart(rtp);
|
||||
difference(){
|
||||
color("red")
|
||||
hull(){
|
||||
for(i=[0:len(neighbors[id_mic])-1]){
|
||||
neighbor =
|
||||
sph2cart(
|
||||
[
|
||||
r[neighbors[id_mic][i]],
|
||||
theta[neighbors[id_mic][i]],
|
||||
phi[neighbors[id_mic][i]]
|
||||
]
|
||||
);
|
||||
rtp2=cart2sph(neighbor-center);
|
||||
translate(center)
|
||||
rotate([0, rtp2[1], rtp2[2]]){
|
||||
cylinder(r=stud+2,h=22);
|
||||
}
|
||||
}
|
||||
translate(center)
|
||||
rotate([0, rtp[1], rtp[2]])
|
||||
translate([0, 0, -10])
|
||||
cylinder(r=6,h=20, center=false);
|
||||
}
|
||||
for(i=[0:len(neighbors[id_mic])-1]){
|
||||
neighbor =
|
||||
sph2cart(
|
||||
[
|
||||
r[neighbors[id_mic][i]],
|
||||
theta[neighbors[id_mic][i]],
|
||||
phi[neighbors[id_mic][i]]
|
||||
]
|
||||
);
|
||||
rtp2=cart2sph(neighbor-center);
|
||||
translate(center)
|
||||
rotate([0, rtp2[1], rtp2[2]]){
|
||||
translate([0,0,16])
|
||||
cylinder(r=stud,h=25);
|
||||
};
|
||||
};
|
||||
translate(center)
|
||||
rotate([0, rtp[1], rtp[2]])
|
||||
translate([0,0,-30])
|
||||
render()
|
||||
english_thread(3/8,16,2,internal=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (i = [0:len(theta)-2]){
|
||||
attach(i);
|
||||
studs(i);
|
||||
};
|
||||
|
||||
module studs(id_mic, rstud=1.75){
|
||||
rtp = [r[id_mic], theta[id_mic], phi[id_mic]];
|
||||
center = sph2cart(rtp);
|
||||
for (i=[0:len(neighbors[id_mic])-1]){
|
||||
neighbor = sph2cart([r[neighbors[id_mic][i]], theta[neighbors[id_mic][i]], phi[neighbors[id_mic][i]]]);
|
||||
rtp2=cart2sph(neighbor-center);
|
||||
translate(center)
|
||||
rotate([0, rtp2[1], rtp2[2]])
|
||||
color("blue")
|
||||
translate([0,0,16])
|
||||
cylinder(r=rstud,h=norm(neighbor-center)-2*16);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function cart2sph(vec)
|
||||
= [norm(vec), acos(vec[2]/norm(vec)), atan2(vec[1],vec[0])];
|
||||
|
||||
function sph2cart(vec)
|
||||
= [vec[0]*sin(vec[1])*cos(vec[2]), vec[0]*sin(vec[1])*sin(vec[2]), vec[0]*cos(vec[1])];
|
||||
|
||||
|
||||
|
||||
// Support for mic stand
|
||||
|
||||
// Mic pointing at center
|
||||
//center = supp;
|
||||
//rtp = cart2sph(center);
|
||||
//echo(rtp);
|
||||
//rotate([0, -rtp[1], 0])
|
||||
//rotate([0, 0,-rtp[2]])
|
||||
//attach(
|
||||
//center=supp,neighbourgs=[
|
||||
//[x[0],y[0],z[0]],
|
||||
//[x[1],y[1],z[1]],
|
||||
//[x[2],y[2],z[2]]
|
||||
//]);
|
||||
|
||||
// Support attach
|
||||
|
||||
//attach3(center = support, neighbourgs=[
|
||||
//[x[1], y[1], z[1]],
|
||||
//[x[2], y[2], z[2]],
|
||||
//[x[3], y[3], z[3]]
|
||||
//]);
|
||||
|
||||
|
||||
// Mic #0
|
||||
//attach(
|
||||
//center=[x[0], y[0], z[0]],neighbourgs=[
|
||||
//supp,
|
||||
//[x[1],y[1],z[1]],
|
||||
//[x[2],y[2],z[2]],
|
||||
//[x[3],y[3],z[3]]
|
||||
//]);
|
||||
|
||||
// Mic #1
|
||||
//center = [x[1],y[1],z[1]];
|
||||
//rtp = cart2sph(center);
|
||||
//echo(rtp);
|
||||
//rotate([0, -rtp[1], 0])
|
||||
//rotate([0, 0,-rtp[2]])
|
||||
//attach(
|
||||
//center=[x[1], y[1], z[1]],neighbourgs=[
|
||||
//supp,
|
||||
//support,
|
||||
//[x[0],y[0],z[0]],
|
||||
//[x[2],y[2],z[2]],
|
||||
//[x[3],y[3],z[3]],
|
||||
//]);
|
||||
|
||||
module dist(i,j){
|
||||
echo(
|
||||
sqrt(
|
||||
pow((x[i]-x[j]),2) +
|
||||
pow((y[i]-y[j]),2) +
|
||||
pow((z[i]-z[j]),2)
|
||||
)
|
||||
- 2 * 16
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Mic #2
|
||||
//center = [x[2],y[2],z[2]];
|
||||
//rtp = cart2sph(center);
|
||||
//echo(rtp);
|
||||
//rotate([0, -rtp[1], 0])
|
||||
//rotate([0, 0,-rtp[2]])
|
||||
//attach(
|
||||
//center=[x[2], y[2], z[2]],neighbourgs=[
|
||||
//support,
|
||||
//supp,
|
||||
//[x[0],y[0],z[0]],
|
||||
//[x[1],y[1],z[1]],
|
||||
//[x[3],y[3],z[3]],
|
||||
//]);
|
||||
|
||||
|
||||
// Mic #3
|
||||
//center = [x[3],y[3],z[3]];
|
||||
//rtp = cart2sph(center);
|
||||
//echo(rtp);
|
||||
//rotate([0, -rtp[1], 0])
|
||||
//rotate([0, 0,-rtp[2]])
|
||||
//attach(
|
||||
//center=[x[3], y[3], z[3]],neighbourgs=[
|
||||
//support,
|
||||
//[x[0],y[0],z[0]],
|
||||
//[x[1],y[1],z[1]],
|
||||
//[x[2],y[2],z[2]],
|
||||
//]);
|
Loading…
Reference in New Issue
Block a user