use ; use ; $fn=100; gap = 0.24; mgap = 1.5*gap; thickness=2.4; screw_dia = 3; screw_gap = 0.6; screwhead_dia = 6; screwhead_hei = 3; screwhold_hei = 7.5; nutholder_dia = 5; nutholder_hei = 5; screwpos = 11.6; inner_front_diameter = 2*16+2*gap; front_diameter = inner_front_diameter+2*thickness; pipe_diameter = 22; inner_pipe_diameter = 20; angle = 140; function ease_in(v) = v^2; function ease_out(v) = 1 - v^2; function ease_inout(v) = (1-v^2)^4; module screwhole( d, l, cut=0, cutlen=undef, headlen=0) { cutlen = is_undef(cutlen) ? (cut-d)/2 : cutlen; cylinder( d=d, h=l, center=true); c = (cut-d-headlen)/2; translate( [0, 0, (l - cutlen - headlen)/2]) cylinder( d1=d, d2=cut, h=cutlen, center=true); translate( [0, 0, (l - headlen)/2]) cylinder( d=cut, h=headlen, center=true); } module led( diameter, height) { niph = 0.5; nipd = 1; cylinder( d=diameter-nipd, h=height, center=true); translate( [0, 0, -height/2+niph/2]) cylinder( d=diameter, h=niph, center=true); } //color( "#444444") { *difference() { union() { cylinder( r=15, h=thickness); translate( [0, 0, thickness]) cylinder( d=8, h=4); } translate( [0, 0, -1]) { for( i = [0 : (360/7) : 360]) rotate( [0, 0, i]) translate( [7, 0, 0]) tht_led_5mm(); for( i = [0 : (360/8) : 360]) rotate( [0, 0, i]) translate( [14, 0, 0]) tht_led_5mm(); } translate( [0, 0, -0.1]) cylinder( d=screw_dia+screw_gap, h=8+thickness+0.2); translate( [0, 0, -0.1]) cylinder( d=screwhead_dia+screw_gap, h=screwhead_hei+0.1); } translate( [0, 40, -thickness]) union() { difference() { union() { cylinder( r=16, h=thickness); mirror( [0, 0, 1]) intersection() { cylinder( r=16, h=thickness+screwhold_hei); union() { for( i = [0 : (360/2) : 360]) rotate( [0, 0, i]) translate( [screwpos, 0, 0]) cylinder( d=8, h=screwhold_hei); for( i = [90 : (360/2) : 360]) rotate( [0, 0, i]) translate( [screwpos+2, 0, 0]) cylinder( d=6, h=screwhold_hei); } } } rotate( [0, 0, 90]) { translate( [0, 0, -1]) { tht_led_5mm(); for( i = [0 : 360/6 : 360]) rotate( [0, 0, i]) translate( [6, 0, 0]) tht_led_5mm(); for( i = [0, 1]) mirror( [i, 0]) for( j = [0, 1]) mirror( [0, j]) translate( [6, 0, 0]) rotate( [0, 0, 60]) translate( [6, 0, 0]) { tht_led_5mm(); mirror( [0, 0, 1]) cylinder( d=6, h=10); } } *for( i = [0 : 360/4 : 360]) //if( i%(3*360/12) != 0) rotate( [0, 0, 45+i]) translate( [12, 0, 0]) { tht_led_5mm(); mirror( [0, 0, 1]) cylinder( d=6, h=10); } } for( i = [0, 1]) mirror( [0, 0, 1]) mirror( [i, 0]) translate( [screwpos, 0, -thickness]) { translate( [0, 0, -0.1]) cylinder( d=screw_dia+screw_gap, h=screwhold_hei+thickness+0.2); translate( [0, 0, -0.1]) cylinder( d=screwhead_dia+screw_gap, h=screwhead_hei+0.1); } *for( i = [0 : 360/4 : 360]) mirror( [0, 0, 1]) rotate( [0, 0, i]) translate( [screwpos, 0, -thickness]) { translate( [0, 0, -0.1]) cylinder( d=screw_dia+screw_gap, h=screwhold_hei+thickness+0.2); translate( [0, 0, -0.1]) cylinder( d=screwhead_dia+screw_gap, h=screwhead_hei+0.1); } } } translate( [0,0, -screwhold_hei-thickness-0.1]) difference() { N = 150; p = front_diameter-pipe_diameter; union() { translate( [-14-p, 0, 0]) { for( i = [0 : N-1]) { in = i+1; e = ease_inout( i/N); en = ease_inout( in/N); x = e*p; xn = en*p; d = pipe_diameter+x; dn = pipe_diameter+xn; hull() { rotate( [0, i * angle/N, 0]) translate( [14+x, 0]) linear_extrude(0.1) circle( d=d); rotate( [0, (in) * angle/N, 0]) translate( [14+xn, 0]) linear_extrude(0.1) circle( d=dn); } } rotate( [0, angle, 0]) translate( [14, 0, -inner_pipe_diameter/2-2]) spreizkonus( "top", d=inner_pipe_diameter, sd=3+2*gap, mount=2.1); } difference() { cylinder( d=front_diameter, 10); translate([0,0,0.1]) cylinder( d=inner_front_diameter+0.1, h=thickness+screwhold_hei+gap); } } translate([-14-p,0,-1]) rotate( [0, angle, 0]) translate( [14, 0, -1]) cylinder(d=5,h=100); for(i=[0:360/2:360]) rotate( [0,0,i]) translate( [screwpos, 0, -nutholder_hei+0.2]) cylinder( d=nutholder_dia, h=nutholder_hei+0.2); } translate( [-40, 40, -(inner_pipe_diameter)/2-1]) mirror( [0,0,1]) spreizkonus( "bottom", d=inner_pipe_diameter, sd=3+2*gap, bottom=1); }