// // 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);