]> www.fi.muni.cz Git - bike-lights.git/blob - parts/speedometer.scad
Speedometer illumination
[bike-lights.git] / parts / speedometer.scad
1 infty = 200;
2 eps = 0.05;
3
4 tube_d = 31.8;
5 tube_d1 = 28;
6 body_w = 10;
7 body_h = 30;
8
9 wall = 2;
10
11 led_d = 3 + 0.5;
12
13 zip_w = 3.5;
14 zip_h = 2.5;
15
16 top_w = 6+2*wall;
17 top_led_h = body_h-9;
18
19 cable_w = 6;
20 cable_h = 3;
21
22 module body() {
23         hull() {
24                 cylinder(r = tube_d/2 + wall, h = body_w);
25                 translate([body_h + tube_d/2, 0, 0])
26                         scale([0.75, 1, 1])
27                         cylinder(r = top_w/2, h = body_w);
28         }
29 }
30
31 module chamber() {
32 /*
33         intersection() {
34                 hull() {
35                         translate([0, -tube_d/2, wall])
36                                 cube([eps, infty, infty]);
37                         translate([tube_d/2+body_h-eps, -top_w/2+wall, wall])
38                                 cube([eps, infty, infty]);
39                 }
40                 translate([tube_d/2 + 2*wall, -tube_d/2, 0])
41                         cube([body_h-3*wall-5, tube_d+2*wall, body_w+eps]);
42         }
43 */
44         difference() {
45                 hull() {
46                         translate([0, 0, wall])
47                                 cylinder(r = tube_d/2, h = body_w);
48                         translate([tube_d/2+body_h-eps, 0, wall])
49                                 scale([0.75, 1, 1])
50                                 cylinder(r = top_w/2-wall, h = body_w);
51                 }
52                 // bottom part
53                 translate([0, -tube_d/2-wall-eps, 0])
54                         cube([tube_d/2+wall+zip_h/2, tube_d+2*wall, body_w+2*wall]);
55                 // top covered part
56                 translate([top_led_h + tube_d/2, -tube_d/2, body_w-wall])
57                         cube([infty, tube_d, 2*wall]);
58                 // wall with hole for LED
59                 translate([top_led_h + tube_d/2, 1, wall])
60                         cube([wall, infty, infty]);
61         }
62 }
63
64 module holder() {
65         difference() {
66                 body();
67                 // cut off the bottom part
68                 translate([-infty+tube_d/4, -infty/2, -infty/2]) cube(infty);
69                 // main tube
70                 translate([0, 0, -eps])
71                         cylinder(r1 = tube_d1/2, r2 = tube_d/2, h = body_w + 2*eps);
72                 // zip tie hole
73                 scale([1, 1.05, 1])
74                 translate([0, 0, body_w/2 - zip_w/2])
75                         rotate_extrude(convexity = 10) {
76                                 translate([tube_d/2 + wall, 0, 0])
77                                 square(size = [zip_h, zip_w]);
78                         }
79                 chamber();
80                 // front hole
81                 translate([tube_d/2 + wall + zip_h/2, 0, wall])
82                         cube([top_led_h - wall - zip_h/2, tube_d, body_h]);
83                 // LED hole
84                 translate([tube_d/2+top_led_h+2*wall,1.5*wall, body_w/2-0.5])
85                         rotate([-15, -65, 0])
86                         cylinder(r = led_d/2, h = 10);
87                 // cable hole
88                 hull() {
89                         translate([tube_d/2 + wall + zip_h/2, -10,
90                                 body_w/2-zip_w/2])
91                                 cube([cable_h, cable_w, eps]);
92                         translate([tube_d/2, -10, -eps])
93                                 cube([cable_h, cable_w, eps]);
94                 }
95         }
96 }
97
98 holder();
99