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