3d/steffis_frontleuchte2.scad

194 lines
4.7 KiB
OpenSCAD
Raw Normal View History

2022-10-02 20:06:53 +02:00
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);
}