// // Spherical Harmonics Ear Project (*SpHEAR) // // TinySpHEAR, First Order (B-format) Ambisonics Microphone // Add-on array for H2N with EM200 capsules // // 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 ; include ; // dimensions of the EM200 electret microphone capsule capsule_radius = 14.6 / 2; capsule_height = 4.75; mic_radius = 11; // make triangular legs have the right height connect = 1; leg_thick = capsule_height; // adjust the depth of slots in mount mic_to_mount_fit = -0.7; //// //// render the different assemblies //// facets = 128; //// microphone body and array windscreen_thread_radius = mic_radius * 1.6; windscreen_thread_height = 8; // make winscreen radius and height the same as for the EM200 standalone microphone windscreen_height = 66; windscreen_radius = box_corner_radius + 6.0; // height of the lower windscreen windscreen_lower_height = 25; // render the whole thing difference() { union() { *h2n_ring(h2n_width_m, h2n_depth_m, h2n_depth * 0.425, h2n_band_height, h2n_col_tilt, h2n_side_band_w, h2n_side_band, h2n_band_wall, h2n_band_wall, mount_radius, h2n_col_wall); *h2n_columns(h2n_width_m, h2n_column_height, h2n_band_height, h2n_col_tilt, transition_height, h2n_mount_radius, h2n_col_wall, wall); translate([0, 0, h2n_column_height]) { h2n_bridge((h2n_width_m / 2 + mount_radius - h2n_col_wall - h2n_column_height * tan(h2n_col_tilt)) * 2, h2n_bridge_base_height, h2n_bridge_stalk_height, mount_radius, h2n_col_wall, h2n_stalk_wall, wall, windscreen_thread_radius, windscreen_thread_height); } // capsule array mount rotate([0, 0, -90]) translate([0, 0, 95]) { tetra_capsule_array_mount([-45, 135], mount_radius, wall); } // cylindrical stalk translate([0, 0, 65]) { difference() { cylinder(r = mount_radius + wall, h = 30.0, $fn = facets); cylinder(r = mount_radius, h = 30.0, $fn = facets); } } // conical stalk translate([0, 0, 44]) { difference() { cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth, r2 = mount_radius + wall, h = 21, $fn = facets); cylinder(r1 = windscreen_thread_radius - windscreen_thread_depth - wall, r2 = mount_radius, h = 21, $fn = facets); } } render_sphear_upper_windscreen(37.2 + 23 - 0.5); render_h2n_lower_windscreen(37.2); *translate([0, 0, h2n_column_height]) { h2n_bridge_connector((h2n_width_m / 2 + mount_radius - h2n_col_wall - h2n_column_height * tan(h2n_col_tilt)) * 2, h2n_bridge_base_height, mount_radius, h2n_col_wall, h2n_stalk_wall, wall); } *translate([0, 0, h2n_column_height + 40]) { h2n_connector_to_stalk((h2n_width_m / 2 + mount_radius - h2n_col_wall - h2n_column_height * tan(h2n_col_tilt)) * 2, h2n_xlr_height, h2n_xlr_thread_height, h2n_xlr_thread_diam, h2n_xlr_thread_pitch, h2n_xlr_shoulder, h2n_stalk_wall); } *translate([0, 0, h2n_column_height + h2n_xlr_height + 5 + 40]) { h2n_stalk_to_array_mount((h2n_width_m / 2 + mount_radius - h2n_col_wall - h2n_column_height * tan(h2n_col_tilt)) * 2, h2n_xlr_stalk_height, h2n_stalk_wall); } rotate([0, 0, 90]) { render_tetra_capsule_array(h2n_column_height + h2n_bridge_base_height + h2n_bridge_stalk_height + 46); } translate([0, 0, 100]) { *h2n_wind_screen_vertical_ring(h2n_width_m, 1.6, 10.0); *rotate([0, 0, 180]) h2n_wind_screen_vertical_ring(h2n_width_m, 1.6, 10.0); *h2n_wind_screen_horizontal_ring(h2n_width_m, 1.6); *h2n_wind_screen_vertical_aux_ring(h2n_width_m, 1.6); } *rotate([0, 90, 0]) h2n_wind_screen_vertical_ring(h2n_width_m, 1.6, 10.0); *h2n_wind_screen_horizontal_ring(h2n_width_m, 1.6); *rotate([90, 180, 0]) h2n_wind_screen_vertical_aux_ring(h2n_width_m, 1.6); } *rotate([0, 0, 22.5/2]) translate([-40, -50, 0]) { cube([80, 50, 170]); } } // individual capsule holders *render_tetra_capsule_top(0); *render_tetra_capsule_bot(0); // make sure dimensions are fine *translate([-(h2n_width_m - 0.1) / 2, - 0.5, 0]) { cube([h2n_width_m - 0.1, 1, 1]); } *translate([-0.5, -(h2n_depth_m - 0.1) / 2, 0]) { cube([1, h2n_depth_m - 0.1, 1]); } // some tests with traced profiles *difference() { translate([0, -2.5, 0]) { scale([2.15, 2.15, 1.0]) { H2N_top_up_outline(5.0); } } // scale([1.75, 1.75, 1.0]) { translate([0, -2.4, 0]) { scale([2.02, 2.02, 1.0]) { H2N_top_up_outline(5.0); } } } *scale(1.665) { translate([0, 10, -0]) { rotate([0, 0, 0]) { H2N_front_outline(1.0); } } } *rotate([0, 0, 4]) translate([35, 0, 0]) cube([2, 80, 4]);