Octathingy_EM200.scad 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // Spherical Harmonics Ear Project (*SpHEAR)
  3. //
  4. // Octathingy, Second Order Ambisonics Microphone
  5. //
  6. // based on:
  7. // "A second-order soundfield microphone with improved polar pattern shape"
  8. // by Eric Benjamin, Audio Engineering Society Convention Paper 8728,
  9. // October 2012, San Francisco
  10. //
  11. // Microphone optimized for EM182 capsules and Zapnspark interface
  12. //
  13. // Copyright 2015-2017, Fernando Lopez-Lezcano, All Rights Reserved
  14. // nando@ccrma.stanford.edu
  15. //
  16. // This program is free software: you can redistribute it and/or modify
  17. // it under the terms of the GNU General Public License as published by
  18. // the Free Software Foundation, either version 3 of the License, or
  19. // (at your option) any later version.
  20. //
  21. // This program is distributed in the hope that it will be useful,
  22. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  23. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  24. // GNU General Public License for more details.
  25. //
  26. // You should have received a copy of the GNU General Public License
  27. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  28. //
  29. // 3d Models released under the Creative Commons license as follows:
  30. // Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
  31. // http://creativecommons.org/licenses/by-nc-sa/4.0/
  32. include <Octathingy_common.scad>;
  33. include <SpHEAR_windscreen.scad>;
  34. include <TinySpHEAR_mount_pcb.scad>;
  35. include <Octathingy_mount_pcb.scad>;
  36. // dimensions of the EM200 electret microphone capsule
  37. capsule_radius = 14.55 / 2;
  38. capsule_height = 4.75;
  39. mic_radius = 16.6;
  40. // make triangular legs have the right height
  41. connect = 1;
  42. leg_thick = capsule_height * 0.45;
  43. facets = 128;
  44. ////
  45. //// render the different assemblies
  46. ////
  47. //// microphone body and array parameters
  48. //
  49. // FIXME: for some reason octa_pcb_radius is not being found, changing
  50. // the order of includes above messes up other mode parameters
  51. // for now hardwire this parameter
  52. windscreen_thread_radius = 31.425;
  53. // windscreen_thread_radius = octa_pcb_radius;
  54. windscreen_radius = windscreen_thread_radius + 5.0;
  55. windscreen_thread_height = 8;
  56. windscreen_height = 72;
  57. windscreen_thread_fit = 5 * fit;
  58. *rotate([0, 0, -22.5]) render_octa_capsule_array(206.8);
  59. // windscreen components
  60. *difference() {
  61. union() {
  62. rotate([0, 0, -22.5]) render_octa_capsule_flare(49.2);
  63. *render_sphear_windscreen_thread_cover(64.3);
  64. }
  65. *translate([-60, -60, 0]) {
  66. cube([60, 60, 150]);
  67. }
  68. }
  69. difference() {
  70. union() {
  71. *render_sphear_lower_windscreen(tetra_pcb_mount_height - 10 + 15);
  72. *render_sphear_upper_windscreen(tetra_pcb_mount_height - 10 + 15 + windscreen_height);
  73. }
  74. *translate([-60, -60, 0]) {
  75. cube([60, 60, 120]);
  76. }
  77. }
  78. *rotate([0, 0, -22.5]) render_octa_pcb_mount(0, 0);
  79. *render_octa_cable_flare(0);
  80. *rotate([0, 180, 0]) {
  81. render_octa_connector_flare(0);
  82. }
  83. // db25 flare
  84. *difference() {
  85. rotate([0, 180, 90 - 22.5]) {
  86. conn_offset = 2.0;
  87. translate([0, 0, -mount_lip]) octa_mount_flare_dsub(pcb_low_clear + pcb_low_exp, mount_lip, 20,
  88. octa_pcb_radius,
  89. conn_core_o_diam / 2, conn_core_o_diam + conn_offset);
  90. }
  91. *rotate([0, 0, 0]) translate([-60, -60, -60]) {
  92. cube([60, 60, 120]);
  93. }
  94. }
  95. *translate([0, 0, 4]) {
  96. rotate([0, 0, 22.5]) {
  97. conn_offset = 2.0;
  98. octa_mount_stand(20, mount_lip, 20, octa_pcb_radius, conn_core_o_diam / 2, conn_core_o_diam + conn_offset);
  99. }
  100. }
  101. // the whole body
  102. *render_octa_body(0, 10, 0);
  103. // the whole microphone
  104. // or use render_octa_microphone_cutout(0, 0) for a "transparent" view
  105. //
  106. *render_octa_microphone_cutout(0, 0, 0);
  107. //// microphone shock mount
  108. *difference() {
  109. render_octa_shock_mount_stand(0);
  110. *translate([0, 0, 0])
  111. cube([60, 60, 60]);
  112. }
  113. // shock mount test
  114. *rotate([0, 0, 0]) translate([0, 0, -55/2 - 28]) {
  115. octa_shock_mount_internal_ring(55, octa_pcb_radius, 20, 0, 0);
  116. }
  117. *difference() {
  118. rotate([0, 0, 0]) translate([0, 0, -55/2 - 28]) {
  119. octa_quik_release_stand_mount(30, octa_pcb_radius);
  120. }
  121. *translate([0, -60, -60]) {
  122. cube([60, 60, 60]);
  123. }
  124. }
  125. difference() {
  126. shock_mount_threaded_stand(20, 2, 1);
  127. *translate([0, -60, 0]) {
  128. cube([60, 60, 60]);
  129. }
  130. }
  131. // old code
  132. *translate([0, 0, 28])
  133. render_octa_shock_mount_external_ring(0);
  134. *translate([0, 0, -30])
  135. render_octa_shock_mount_internal_ring_bot(0);
  136. *render_octa_shock_mount_internal_ring_top(0);
  137. *render_octa_shock_mount_ring_connectors(5);
  138. // the full mount
  139. *render_octa_shock_mount(0);
  140. // individual capsule holders
  141. *render_octa_capsule_top(0);
  142. *render_octa_capsule_bot(0);