From: Jan "Yenya" Kasprzak Date: Tue, 2 Dec 2014 11:43:06 +0000 (+0100) Subject: diffuser.scad: LZZ-186 diffuser as published on thingiverse X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=commitdiff_plain;h=c490739395d4178c1a752997739066c0cfedc21f;p=things.git diffuser.scad: LZZ-186 diffuser as published on thingiverse --- diff --git a/diffuser.scad b/diffuser.scad new file mode 100644 index 0000000..d7a4cab --- /dev/null +++ b/diffuser.scad @@ -0,0 +1,96 @@ +inner_d = 38; +outer_d = 43.5; +wall_thickness = 1.5; +diaphragm_thickness = 0.8; +cable_thickness = 4; + +base_h = 4; +shader_h = 6; +holder_h = 16; + +epsilon = 0.01; + +module diaphragm() { + cylinder(h=diaphragm_thickness, r = outer_d/2 + wall_thickness-epsilon); +}; + +module shader() { + difference() { + cylinder(r=outer_d/2 + wall_thickness, h = shader_h); + translate([0, 0, -epsilon/2]) + cylinder(r1 = outer_d/2+wall_thickness/2, r2=outer_d/2+wall_thickness/2-(2/5)*(outer_d-inner_d), + h = shader_h + epsilon); + }; +}; + +module base() { + difference() { + cylinder(r = outer_d/2 + wall_thickness, h = base_h + epsilon); + translate([0, 0, - epsilon/2]) + cylinder(r = inner_d/2, h = base_h + 2*epsilon); + }; +}; + +module outer_clip() { + difference() { + cylinder(r = outer_d/2 + wall_thickness, h = holder_h-base_h); + translate([0, 0, -epsilon/2]) + cylinder(r = outer_d/2, h = holder_h - base_h + epsilon); + }; + + intersection() { + difference() { + cylinder(r = outer_d/2 + wall_thickness - epsilon, h = holder_h-base_h-epsilon); + translate([-50, -(inner_d-3)/2, -epsilon]) + cube([100, inner_d-3, 100]); + }; + rotate_extrude() + translate([outer_d/2+1.5, holder_h-base_h-1, 0]) + circle(r = 2); + }; +}; + +module belt_clip() { + intersection() { // belt clip arc + difference() { + cylinder(r = outer_d/2 + 2*wall_thickness + cable_thickness, h = shader_h + holder_h); + translate([0, 0, -epsilon/2]) + cylinder(r = outer_d/2 + wall_thickness + cable_thickness, h = shader_h + holder_h + epsilon); + }; + translate([0, -6, 0]) + cube([outer_d + 4*wall_thickness + 2*cable_thickness + epsilon, 12, shader_h + holder_h]); + }; + difference() { // connect the clip to the body + rotate([0, 0, -10]) + translate([outer_d/2-3, 0, 0]) + cylinder(r = cable_thickness + 2*wall_thickness + 3, h = shader_h + holder_h); + translate([0, 0, -epsilon/2]) + cylinder(r = outer_d/2 + wall_thickness - epsilon, h = shader_h + holder_h + epsilon); + translate([0, -4, -epsilon/2]) + cube([outer_d/2 + 2*wall_thickness + cable_thickness + epsilon, 20, holder_h + shader_h + epsilon]); + + }; + intersection() { // hold the cable in position + rotate([0, 0, 10]) + translate([outer_d/2+2*wall_thickness + cable_thickness, 0, 0]) + cylinder(r = 2.75, h = shader_h + holder_h); + translate([0, 0, -epsilon/2]) + cylinder(r = outer_d/2 + 2*wall_thickness + cable_thickness, h = shader_h + holder_h + epsilon); + }; +}; + +module main() { + shader(); + translate([0, 0, shader_h]) + color([1, 0.5, 0.5, 0.2]) diaphragm(); + + translate([0, 0, shader_h-epsilon]) + base(); + + translate([0, 0, shader_h+base_h-2*epsilon]) + outer_clip(); + + belt_clip(); +}; + +main($fn = 128);