]> www.fi.muni.cz Git - bike-lights.git/blob - parts/statuslights.scad
part/statuslight.scad: holder for AZUB recumbents
[bike-lights.git] / parts / statuslights.scad
1 debug = 1;
2 tube_diam = 25;
3 tube_angle = 35;
4 view_angle = 15;
5
6 wall = 2;
7 led_w = 3;
8 screw_hole = 3.5;
9 screw_head = 5;
10 screw_base = 3;
11 epsilon=0.01;
12
13 module outer_shape() {
14         difference() {
15                 hull() {
16                         translate([-26, 0, 5])
17                         rotate([0, -70, 0])
18                         scale([2, 1, 1])
19                                 cylinder(r=6, h=1);
20
21                         scale([1, 1, 1/2])
22                                 sphere(r=tube_diam/2, center=true);
23                 }
24
25                 translate([0, 0, -100+epsilon])
26                         cube(200, center=true);
27
28                 translate([-25, 0, 0])
29                         rotate([0, -35, 0])
30                         translate([-100, 0, 0])
31                         cube(200, center=true);
32         }
33 }
34
35 module inner_shape() {
36         difference() {
37                 hull() {
38                         translate([-26-epsilon, 0, 5])
39                         rotate([0, -70, 0])
40                         scale([2.5, 1, 1])
41                                 cylinder(r=4, h=1);
42
43                         scale([1, 1, 1/2])
44                                 sphere(r=tube_diam/2 - 4, center=true);
45                 }
46
47                 translate([0, 0, 2+-100+epsilon])
48                         cube(200, center=true);
49
50                 translate([-22, 0, 0])
51                         rotate([0, -35, 0])
52                         translate([-100, 0, 0])
53                         cube(200, center=true);
54         }
55 }
56
57 module screw_hole(d1, d2, z_base) {
58         union() {
59                 // body
60                 translate([0, 0, -epsilon])
61                         cylinder(r=d1/2, h=z_base + 2*epsilon);
62                 // head
63                 translate([0, 0, z_base])
64                         cylinder(r=d2/2, h=20);
65         }
66 }
67
68 module front_hole() {
69         difference() {
70                 inner_shape();
71                 translate([-35, 0, 0])
72                 rotate([0, view_angle + tube_angle, 0])
73                 translate([100, 0, 0]) cube([200, 200, 200], center=true);
74         }
75 }
76
77 module inner_hole() {
78         intersection() {
79                 inner_shape();
80
81                 translate([-32, 0, 0])
82                 rotate([0, view_angle + tube_angle, 0])
83                 translate([100, 0, 0]) cube([200, 200, 200], center=true);
84
85                 translate([-27, 0, 0])
86                 rotate([0, 20, 0])
87                 translate([100, 0, 0]) cube([200, 200, 200], center=true);
88
89                 translate([-108, 0, 0]) cube([200, 200, 200], center=true);
90         }
91 }
92
93 module cable_hole() {
94         translate([-10, 0, -epsilon])
95         difference() {
96                 cylinder(r=6.5, h=3);
97                 translate([12-epsilon, 0, 0]) cube(20, center=true);
98         }
99 }
100
101 module tube() {
102         // presmykacova trubka
103         color("grey") {
104                 rotate([0, -tube_angle, 0])
105                 translate([0, 0, -50])
106                 cylinder(r=tube_diam/2, h=50);
107         }
108 }
109
110 module led(h, w, h1, w1) {
111         union() {
112                 translate([0, 0, h-w/2])
113                         sphere(r=w/2, $fn=64);
114                 cylinder(r=w/2, h=h-w/2, $fn=64);
115                 translate([0, 0, -h1])
116                         cylinder(r=w1/2, h=h1+epsilon, $fn=64);
117         }
118 }
119
120 module illum_led() {
121         translate([-24, 0, 3])
122         rotate([0, 180+tube_angle, 0])
123                 led(h=5,w=3.5,h1=2,w1=4);
124 };
125
126 module status_led() {
127         translate([-21, 0, 8.5])
128         rotate([0, 270+view_angle+tube_angle, 0])
129                 led(h=5,w=3.5,h1=2,w1=4);
130 }
131
132 module main() {
133         difference() {
134                 outer_shape();
135                 screw_hole(d1=4, d2=8, z_base=4);
136                 front_hole();
137                 inner_hole();
138                 cable_hole($fn=8);
139                 status_led();
140                 illum_led();
141         };
142 };
143
144 if (debug == 1) {
145         rotate([0, -tube_angle, 0]) {
146                 difference() {
147                         main($fn=16);
148                         translate([0, -100, 0]) cube([200, 200, 200], center=true);
149                 };
150                 color("red") status_led();
151                 color("deepskyblue") illum_led();
152         };
153         color("gray") tube();
154 } else {
155         main($fn=32);
156 }
157