You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
4.7 KiB
194 lines
4.7 KiB
use <tht-leds/tht-leds.scad>;
|
|
use <spreizkonus.scad>;
|
|
|
|
$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);
|
|
} |