add sma_open

This commit is contained in:
Pierre Lecomte 2023-05-24 13:40:40 +02:00
parent a83fcd74c8
commit 80ea4acde5

265
cad/sma_open.scad Normal file
View 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]],
//]);