sma rigid with possibility of embedded USB sound card
This commit is contained in:
parent
ee74b758d9
commit
320b0aae0f
@ -15,9 +15,8 @@ Also, Python codes are provided for the calibration of the Spherical Microphone
|
|||||||
|
|
||||||
# opensCAD designs
|
# opensCAD designs
|
||||||
The designs are in the `cad` folder:
|
The designs are in the `cad` folder:
|
||||||
- `sma_open.scad` for open SMA configuration with cylindrical shaped microphones,
|
- `sma_open.scad` for open SMA configuration,
|
||||||
- `sma_rigid.scad` for rigid SMA configuration with cylindrical shaped microphones,
|
- `sma_rigid.scad` for rigid SMA configuration,
|
||||||
- `sma_rigid_mchstreamer.scad` for rigid SMA configuration with digital MEMS microphone and embedded USB sound card.
|
|
||||||
|
|
||||||
Examples of SMA configurations are provide in `.json` files.
|
Examples of SMA configurations are provide in `.json` files.
|
||||||
See the documentation in `.scad` files to create or customize a SMA design.
|
See the documentation in `.scad` files to create or customize a SMA design.
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* Rigid SMA design for cylindrical microphone capsules
|
* Rigid SMA design
|
||||||
* Copyright 2023 Pierre Lecomte - sekisushai@gmail.com
|
* Copyright 2023 Pierre Lecomte - sekisushai@gmail.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
include <threads.scad>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The rigid SMA is composed of two hemispherical shells to render separately for 3D printing.
|
The rigid SMA is composed of two hemispherical shells to render separately for 3D printing.
|
||||||
*/
|
*/
|
||||||
@ -19,7 +17,7 @@ res = 32;
|
|||||||
|
|
||||||
/*[ Array parameters ]*/
|
/*[ Array parameters ]*/
|
||||||
// sphere radius (mm):
|
// sphere radius (mm):
|
||||||
r = 60;
|
r = 80;
|
||||||
|
|
||||||
// shell thickness (mm):
|
// shell thickness (mm):
|
||||||
e = 6;
|
e = 6;
|
||||||
@ -30,6 +28,12 @@ theta = [0, 90, 90, 90, 90, 180, 54.7356, 54.7356, 54.7356, 54.7356, 125.264, 12
|
|||||||
// microphone azimuth coordinates (°):
|
// microphone azimuth coordinates (°):
|
||||||
phi = [0, 0, 90, 180, 270, 0, 45, 135, 225, 315, 45, 135, 225, 315];
|
phi = [0, 0, 90, 180, 270, 0, 45, 135, 225, 315, 45, 135, 225, 315];
|
||||||
|
|
||||||
|
// microphone type
|
||||||
|
mic_type = "1/4"; // [1/4:Quarter_Inch, PDM:PDM MEMS]
|
||||||
|
|
||||||
|
// include USB sound card (only for digital MEMS mics)
|
||||||
|
usb_card = true;
|
||||||
|
|
||||||
/* the microphone array can be rotated to be in accordance with the array cut and mic stand position
|
/* the microphone array can be rotated to be in accordance with the array cut and mic stand position
|
||||||
*/
|
*/
|
||||||
// microphones global rotation (°):
|
// microphones global rotation (°):
|
||||||
@ -69,6 +73,7 @@ The mic stand threaded hole should be close to the passing cable hole. It's dire
|
|||||||
dir_thread = [13, 0];
|
dir_thread = [13, 0];
|
||||||
|
|
||||||
// DO NOT EDIT BELOW HERE
|
// DO NOT EDIT BELOW HERE
|
||||||
|
include <threads.scad>
|
||||||
|
|
||||||
// Hollow sphere
|
// Hollow sphere
|
||||||
module hollow(r1=r-e, r2=r, fn1=$fn, fn2=$fn){
|
module hollow(r1=r-e, r2=r, fn1=$fn, fn2=$fn){
|
||||||
@ -78,8 +83,7 @@ module hollow(r1=r-e, r2=r, fn1=$fn, fn2=$fn){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Torus for "joint torique" for B&K 1/4" mics
|
// Torus for O-ring for 1/4" mics
|
||||||
|
|
||||||
module b_k(){
|
module b_k(){
|
||||||
mirror([0,0,-1])
|
mirror([0,0,-1])
|
||||||
rotate_extrude($fn=32){
|
rotate_extrude($fn=32){
|
||||||
@ -91,12 +95,69 @@ square([3.55, 1.1*e]);
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module mics(){
|
// Adafruit PDM MEMS breakout.
|
||||||
|
// https://www.adafruit.com/product/3492
|
||||||
|
module pdm_breakout(l=14-5, w=13-5){
|
||||||
|
$fn=64;
|
||||||
|
|
||||||
|
translate([-l/2,-w/2,-5]){
|
||||||
|
|
||||||
|
// big condo
|
||||||
|
linear_extrude(7){
|
||||||
|
translate([l/2+4.5,w/2,0])
|
||||||
|
square([3,4],center=true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// small condo
|
||||||
|
linear_extrude(5.75){
|
||||||
|
translate([l/2+2.75,w/2,0])
|
||||||
|
square([3,4],center=true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// tiny resistor
|
||||||
|
linear_extrude(5.5){
|
||||||
|
translate([l/2-2.9,w/2+1,0])
|
||||||
|
square([3,2],center=true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// mic
|
||||||
|
linear_extrude(6){
|
||||||
|
translate([l/2,w/2-0.5,0])
|
||||||
|
square([3.5,4.5],center=true);
|
||||||
|
}
|
||||||
|
linear_extrude(50){
|
||||||
|
translate([l/2,w/2,0])
|
||||||
|
circle(d=2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// wires
|
||||||
|
translate([0,0,5])
|
||||||
|
linear_extrude(2){
|
||||||
|
translate([l/2,w,0])
|
||||||
|
square([l+4,2.5],center=true);
|
||||||
|
}
|
||||||
|
|
||||||
|
linear_extrude(5){
|
||||||
|
difference(){
|
||||||
|
minkowski(){
|
||||||
|
square([l,w]);
|
||||||
|
circle(2.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module mics(type){
|
||||||
rotate(mics_rotate)
|
rotate(mics_rotate)
|
||||||
for (i = [0 : len(theta)-1]){
|
for (i = [0 : len(theta)-1]){
|
||||||
rotate([theta[i], 0, phi[i]])
|
rotate([theta[i], 0, phi[i]])
|
||||||
translate([0, 0, r-e+1]){
|
translate([0, 0, r-e+1]){
|
||||||
|
if (type=="1/4")
|
||||||
b_k();
|
b_k();
|
||||||
|
else
|
||||||
|
pdm_breakout();
|
||||||
translate([3,3,e-1.8])
|
translate([3,3,e-1.8])
|
||||||
linear_extrude(3)
|
linear_extrude(3)
|
||||||
text(str(i+1), size=3);
|
text(str(i+1), size=3);
|
||||||
@ -104,6 +165,45 @@ for (i = [0 : len(theta)-1]){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module mchstreamer(){
|
||||||
|
$fn=64;
|
||||||
|
adj = 0.2; // adjustment
|
||||||
|
// usb_cart dimensions
|
||||||
|
w_usb = 40+adj;
|
||||||
|
l_usb = 60+adj;
|
||||||
|
h_usb = 15+adj;
|
||||||
|
attach_l = 20;
|
||||||
|
attach_w = 7.3 + adj;
|
||||||
|
attach_h = 8.2+adj;
|
||||||
|
rotate([0,-90,90])
|
||||||
|
translate([r-l_usb-attach_l/2,-w_usb/2,-h_usb/2])
|
||||||
|
union(){
|
||||||
|
cube(size = [l_usb, w_usb, h_usb], center = false);
|
||||||
|
plug_l = 20;
|
||||||
|
plug_w = 12+adj;
|
||||||
|
plug_h = 10.7+adj;
|
||||||
|
translate([l_usb - plug_l/2, w_usb/2 - plug_w/2, 1.8+adj])
|
||||||
|
cube(size = [1.5*plug_l, plug_w, plug_h], center =false);
|
||||||
|
translate([l_usb - attach_l + 2, 1, 2.4+adj])
|
||||||
|
attach();
|
||||||
|
translate([l_usb - attach_l + 2, w_usb - attach_h -1, 2.4+adj])
|
||||||
|
attach();
|
||||||
|
translate([w_usb + 2, 0, 0])
|
||||||
|
cube(size=[attach_l, w_usb, 2.7]);
|
||||||
|
|
||||||
|
}
|
||||||
|
module attach(){
|
||||||
|
|
||||||
|
rotate([0, 90, 0]){
|
||||||
|
translate([-attach_w/2, attach_h/2, attach_l/2]){
|
||||||
|
union(){
|
||||||
|
cube(size=[attach_w, attach_h, attach_l], center = true);
|
||||||
|
cylinder(r=1.5, h=2*attach_l );
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module bottom_shell(r1= r-e, r2=r-e/2, r3=r, delta=0.2) {
|
module bottom_shell(r1= r-e, r2=r-e/2, r3=r, delta=0.2) {
|
||||||
union(){
|
union(){
|
||||||
difference(){
|
difference(){
|
||||||
@ -155,8 +255,12 @@ cylinder(d=param[1]+0.2, h=param[0]+1, $fn=6);
|
|||||||
}
|
}
|
||||||
|
|
||||||
module attach() {
|
module attach() {
|
||||||
rotate([(angle_min+angle_max)/2,0,hole_phi_offset])
|
rotate([(angle_min+angle_max)/2,0,hole_phi_offset]){
|
||||||
|
if (usb_card==false)
|
||||||
cylinder(d=d_hole, h=100);
|
cylinder(d=d_hole, h=100);
|
||||||
|
else
|
||||||
|
mchstreamer();
|
||||||
|
}
|
||||||
rotate([(angle_min+angle_max)/2 + dir_thread[0],0, hole_phi_offset + dir_thread[1]])
|
rotate([(angle_min+angle_max)/2 + dir_thread[0],0, hole_phi_offset + dir_thread[1]])
|
||||||
translate([0,0,(r-3*e)])
|
translate([0,0,(r-3*e)])
|
||||||
render()
|
render()
|
||||||
@ -181,7 +285,7 @@ difference(){
|
|||||||
bottom_shell();
|
bottom_shell();
|
||||||
attach();
|
attach();
|
||||||
vis_all();
|
vis_all();
|
||||||
mics();
|
mics(mic_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +293,7 @@ module top_shell_all(){
|
|||||||
difference(){
|
difference(){
|
||||||
top_shell();
|
top_shell();
|
||||||
attach();
|
attach();
|
||||||
mics();
|
mics(mic_type);
|
||||||
vis_all();
|
vis_all();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user