//
// TinySpHEAR, Tiny Spherical Harmonics Ear,
// First Order (B-format) Ambisonics Microphone
//
// Copyright 2015-2016, 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 ;
////
//// model parameters
// dimensions of the electret microphone capsule
capsule_radius = 5;
capsule_height = 4.5;
// distance between the face of a capsule and the center of array
//
// for a 10mm capsule: with vertical legs -> 10.5mm min radius
// with horizontal legs -> 10mm min radius
mic_radius = 9.6;
// dimensions of the capsule holder connection legs
// a width of 4mm is too thin, 5mm prints better
leg_width = 5;
leg_thick = 1.75;
// wall thickness of the capsule holder
wall = 1;
// width of the ridge that connects to the mount
// measured: ridge = 2.20mm, slot = 2.0 .. 2.35mm
ridge_width = 2.0;
ridge_slot_width = 2.0;
// add to the thickness of ridges
ridge_wfit = 0.1;
ridge_hfit = 3;
// dimensions of microphone mount
mount_radius = 3.5;
mount_wall = 0.75;
// height and eccentricity of top connector
mount_top_height = 15.0;
mount_top_eccentricity = 1.3;
// height of mount
mount_height = 40;
// microphone stand mount
//
// diameter of existing shielded wires (x 4)
mic_wire_diam = 1.5;
mic_wire_hole_radius = 3.0;
mic_wire_hole_offset = 5;
// standard microphone stand
// measured diameter = 13.5, inside diameter of sleeve = 13.79 (
mic_mount_radius = 13.50 / 2;
// add this to inside diameter
mic_mount_fit = 0.1;
mic_mount_slot_height = 11.5;
mic_mount_slot_width = 4.25;
mic_mount_slot_radius = 6.25 / 2;
mic_mount_wall = 1.5;
mic_mount_height = 35.0 + mic_wire_hole_offset + mic_wire_hole_radius + 2 * mic_mount_wall;
//// end of model parameters
////
//// rendering control
// what to render:
// 0 -> ready to print
// set = 0 -> one capsule, set = 1 -> four capsules
// 1 -> the whole microhone with four capsules
rendermic = 1;
renderset = 0;
// what type of connection to use between capsule holders:
// 0 -> original cylindrical angled legs
// 1 -> interlocking horizontal legs
// 2 -> interlocking vertical legs
connect = 1;
// how many mount ridges to create
// 0 -> no ridges
// 1 -> 1 ridge
// 2 -> 2 ridges
ridges = 1;
//// end of rendering control
////
// adjustment for the inner radius of the capsule holder
// measured inside diameter of a trial print was around 7.5 to 8.2
// instead of 10, capsule diameter was 9.99)
fudge = 0.08;
// adjustment for fit of slots in connection legs and mount
// 0.1: initial setting
// 0.1 ->0.2: Ultimaker 2 + Extended plus APL (2016.06.10)
fit = 0.15;
// number of facets for rendering cylinders
facets = 64;
// render capsule holders with better resolution
cfacets = 128;
// render a complete microphone
if (rendermic == 1) {
// all four capsules
capsule(45, elev_angle, leg_angles_top, 60, 0, 0.0, 0.0, 0);
capsule(-135, elev_angle, leg_angles_top, 60, 0, 0.0, 0.0, 0);
capsule(-45, -elev_angle, leg_angles_bot, 0, 1, 0.0, 0.0, 0);
capsule(135, -elev_angle, leg_angles_bot, 0, 1, 0.0, 0.0, 0);
// the mount
mount([-45, 135], mount_wall, mic_mount_wall, mic_mount_height + mount_top_height + mount_height + capsule_bottom);
}
// print all the parts separately
if (rendermic == 0) {
if (connect == 1) {
part_rot = 90;
part_height = 0;
part_sep = capsule_radius * 2.5;
// #3
*translate([part_sep, -part_sep, part_height]) { capsule(0, part_rot, leg_angles_top, 60, 0); }
if (renderset != 0) {
// #4
translate([part_sep, part_sep, part_height]) { capsule(0, part_rot, leg_angles_top, 60, 0); }
// #2
*translate([-part_sep, part_sep, part_height]) { capsule(0, part_rot, leg_angles_bot, -90, 1); }
// #1
*translate([-part_sep, -part_sep, part_height]) { capsule(0, part_rot, leg_angles_bot, 90, 1); }
// mount body
*translate([0, 0, 0]) { mount([-45, 135], mount_wall, mic_mount_wall, 0); }
// add connecting ridges to make it all one part
*difference() {
for (rot_a = [-45, 45]) {
rotate([0, 0, rot_a]) {
translate([-wall / 2, -part_sep, 0]) {
cube([wall, part_sep * 2, wall / 2]);
}
}
}
// remove them in the inside of the mount
*cylinder(r = mount_radius + wall / 2, h = wall / 2);
}
}
} else {
// connect == 2
part_rot = -90;
part_height = capsule_height;
part_sep = capsule_radius * 2;
// #3
translate([part_sep, -part_sep, part_height]) { capsule(0, part_rot, leg_angles_top, 0, 0); }
if (renderset != 0) {
// #4
translate([part_sep, part_sep, part_height]) { capsule(0, part_rot, leg_angles_top, 0, 0); }
// #2
translate([-part_sep, part_sep, part_height]) { capsule(0, part_rot, leg_angles_bot, -90, 1); }
// #1
translate([-part_sep, -part_sep, part_height]) { capsule(0, part_rot, leg_angles_bot, 90, 1); }
// stand mount
*translate([0, 0, 0]) {
mount_to_stand([-45, 135], mount_wall, mic_mount_wall, 0);
}
// add connecting ridges to make it all one part
difference() {
for (rot_a = [-45, 45]) {
rotate([0, 0, rot_a]) {
translate([-wall / 2, -part_sep * 0.85, 0]) {
cube([wall, part_sep * 1.75, wall / 2]);
}
}
}
// remove them in the inside of the mount
*cylinder(r = mic_mount_radius + mount_wall / 2, h = wall / 2);
}
}
}
}