//
// Spherical Harmonics Ear Project (*SpHEAR)
//
// Octathingy, Second Order Ambisonics Microphone
//
// based on:
// "A second-order soundfield microphone with improved polar pattern shape"
// by Eric Benjamin, Audio Engineering Society Convention Paper 8728,
// October 2012, San Francisco
//
// Microphone optimized for EM182 capsules and Zapnspark interface
//
// Copyright 2015-2017, Fernando Lopez-Lezcano, All Rights Reserved
// nando@ccrma.stanford.edu
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
// 3d Models released under the Creative Commons license as follows:
// Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// http://creativecommons.org/licenses/by-nc-sa/4.0/
include ;
include ;
include ;
include ;
// dimensions of the EM200 electret microphone capsule
capsule_radius = 14.55 / 2;
capsule_height = 4.75;
mic_radius = 16.6;
// make triangular legs have the right height
connect = 1;
leg_thick = capsule_height * 0.45;
facets = 128;
////
//// render the different assemblies
////
//// microphone body and array parameters
//
// FIXME: for some reason octa_pcb_radius is not being found, changing
// the order of includes above messes up other mode parameters
// for now hardwire this parameter
windscreen_thread_radius = 31.425;
// windscreen_thread_radius = octa_pcb_radius;
windscreen_radius = windscreen_thread_radius + 5.0;
windscreen_thread_height = 8;
windscreen_height = 72;
windscreen_thread_fit = 5 * fit;
*rotate([0, 0, -22.5]) render_octa_capsule_array(206.8);
// windscreen components
*difference() {
union() {
rotate([0, 0, -22.5]) render_octa_capsule_flare(49.2);
*render_sphear_windscreen_thread_cover(64.3);
}
*translate([-60, -60, 0]) {
cube([60, 60, 150]);
}
}
difference() {
union() {
*render_sphear_lower_windscreen(tetra_pcb_mount_height - 10 + 15);
*render_sphear_upper_windscreen(tetra_pcb_mount_height - 10 + 15 + windscreen_height);
}
*translate([-60, -60, 0]) {
cube([60, 60, 120]);
}
}
*rotate([0, 0, -22.5]) render_octa_pcb_mount(0, 0);
*render_octa_cable_flare(0);
*rotate([0, 180, 0]) {
render_octa_connector_flare(0);
}
// db25 flare
*difference() {
rotate([0, 180, 90 - 22.5]) {
conn_offset = 2.0;
translate([0, 0, -mount_lip]) octa_mount_flare_dsub(pcb_low_clear + pcb_low_exp, mount_lip, 20,
octa_pcb_radius,
conn_core_o_diam / 2, conn_core_o_diam + conn_offset);
}
*rotate([0, 0, 0]) translate([-60, -60, -60]) {
cube([60, 60, 120]);
}
}
*translate([0, 0, 4]) {
rotate([0, 0, 22.5]) {
conn_offset = 2.0;
octa_mount_stand(20, mount_lip, 20, octa_pcb_radius, conn_core_o_diam / 2, conn_core_o_diam + conn_offset);
}
}
// the whole body
*render_octa_body(0, 10, 0);
// the whole microphone
// or use render_octa_microphone_cutout(0, 0) for a "transparent" view
//
*render_octa_microphone_cutout(0, 0, 0);
//// microphone shock mount
*difference() {
render_octa_shock_mount_stand(0);
*translate([0, 0, 0])
cube([60, 60, 60]);
}
// shock mount test
*rotate([0, 0, 0]) translate([0, 0, -55/2 - 28]) {
octa_shock_mount_internal_ring(55, octa_pcb_radius, 20, 0, 0);
}
*difference() {
rotate([0, 0, 0]) translate([0, 0, -55/2 - 28]) {
octa_quik_release_stand_mount(30, octa_pcb_radius);
}
*translate([0, -60, -60]) {
cube([60, 60, 60]);
}
}
difference() {
shock_mount_threaded_stand(20, 2, 1);
*translate([0, -60, 0]) {
cube([60, 60, 60]);
}
}
// old code
*translate([0, 0, 28])
render_octa_shock_mount_external_ring(0);
*translate([0, 0, -30])
render_octa_shock_mount_internal_ring_bot(0);
*render_octa_shock_mount_internal_ring_top(0);
*render_octa_shock_mount_ring_connectors(5);
// the full mount
*render_octa_shock_mount(0);
// individual capsule holders
*render_octa_capsule_top(0);
*render_octa_capsule_bot(0);