-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathled_caps.scad
96 lines (83 loc) · 2.65 KB
/
led_caps.scad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
pcb_thickness = 1.2;
cap_thickness = 0.5; //will be doubled
cutout_diameter = 5;
cap_overlap = 1;
module diffuser() {
difference() {
linear_extrude(pcb_thickness)
union() {
circle(d=cutout_diameter, $fn =64);
translate([0,-0.5]) square([cutout_diameter,1], center = true);
}
translate([0,-1.66,0]) cube([cutout_diameter+1,2,pcb_thickness*2+0.5], center = true);
}
translate([0,0,-cap_thickness]) {
linear_extrude(cap_thickness)
difference() {
circle(d=cutout_diameter+cap_overlap*2, $fn =64);
translate([0,-2.25 -cap_overlap]) square(cutout_diameter+cap_overlap*2, center = true);
}
}
translate([0,0,-cap_thickness]) {
rotate([0,180,0]) {
linear_extrude(cap_thickness, scale = 0.9)
difference() {
circle(d=cutout_diameter+cap_overlap*2, $fn =64);
translate([0,-2.25 -cap_overlap]) square(cutout_diameter+cap_overlap*2, center = true);
}
}
}
translate([0,0,pcb_thickness+cap_thickness]) {
linear_extrude(cap_thickness, scale = 0.9)
difference() {
circle(d=cutout_diameter+cap_overlap*2, $fn =64);
translate([0,-2.25 -cap_overlap]) square(cutout_diameter+cap_overlap*2, center = true);
}
}
translate([0,0,pcb_thickness]) {
linear_extrude(cap_thickness)
difference() {
circle(d=cutout_diameter+cap_overlap*2, $fn =64);
translate([0,-2.25 -cap_overlap]) square(cutout_diameter+cap_overlap*2, center = true);
}
}
}
module torus(r1=1, r2=2, angle=360, endstops=0, $fn=50){
if(angle < 360){
intersection(){
rotate_extrude(convexity=10, $fn=$fn)
translate([r2, 0, 0])
circle(r=r1, $fn=$fn);
color("blue")
wedge(h=r1*3, r=r2*2, a=angle);
}
}else{
rotate_extrude(convexity=10, $fn=$fn)
translate([r2, 0, 0])
circle(r=r1, $fn=$fn);
}
if(endstops && angle < 360){
rotate([0,0,angle/2])
translate([0,r2,0])
sphere(r=r1);
rotate([0,0,-angle/2])
translate([0,r2,0])
sphere(r=r1);
}
}
module diffuser_cluster() {
torus(0.5,24,$fn=128);
for ( i = [0 : 18] ){
rotate([0, 0, 360/18*i])
translate([0,-21.5,-0.6]) {
translate([0,0,0.6]) rotate([90,0,0]) cylinder(2.5, d = 1, $fn=32);
diffuser();
}
}
}
union() {
rotate([-4, 0, 0]) diffuser_cluster();
rotate([4, 0, 0]) translate([0, -48,3.35]) diffuser_cluster();
rotate([-4, 0, 0]) translate([-48, 0,0]) diffuser_cluster();
rotate([4, 0, 0]) translate([-48, -48,3.35]) diffuser_cluster();
}