]> www.fi.muni.cz Git - bike-lights.git/blob - parts/rearlight-dual.scad
mudflap for dual rearlights
[bike-lights.git] / parts / rearlight-dual.scad
1 // Holder for two Fraen FHS-HEB1-LB01-x lenses for Luxeon LEDs.
2
3 eps = 0.01;
4 infty = 100;
5
6 wall = 1.5;
7 lens_dist = 45;
8 fraen_diam = 30.90 + 0.3;
9 fraen_h = 29.3;
10 pin_diam = 4 + 0.2;
11 pin_offset = 10.35*1.4142;
12 pin_len = 9.2;
13 front_add = 4;
14
15 rear_pin_dist = 9.1;
16 rear_pin_diam = 3.25 + 0.5;
17
18 side_barrier_x_offset = 13;
19 side_barrier_pin_z_offset = 4.2;
20 side_barrier_thickness = 2;
21
22 heatsink_thickness = 2;
23 heatsink_w = 15 + 0.5;
24 heatsink_l = lens_dist + 1.5*heatsink_w;
25 heatsink_z = 1 + wall;
26 heatsink_hole_sep = 2*wall;
27
28 clip_h1 = 27; // front height (on the heatsink side)
29 clip_h2 = 20; // rear height (on the lens side)
30 clip_l  = 28;
31 clip_wall = wall;
32 clip_space = 3.5;
33 clip_bolt1_z = 6;
34 clip_bolt1_x = 19.5;
35 clip_bolt2_z = 22;
36 clip_bolt2_x = 21;
37 clip_angle = 18;
38 clip_top_xoff = clip_l*tan(clip_angle);
39
40 clip_y_off = 34;
41 clip_x_off = 2;
42 clip_x_rot = -3;
43
44 screw_yoff = 12;
45 screw_d = 4;
46 screw_d2 = 12;
47 screw_h = 8;
48 screw_wall = 3*wall;
49
50         // vnitrni prumer kruhu by mel byt 30.75mm
51         // vnejsi prumer aspon 35 mm
52         // pin od stredu 10.35mm na x a y
53         // prumer pinu 4 mm
54         // pin ma od cela do zabrany 4.2mm, celkove by mel mit 9.2mm
55
56         // piny by mely pokracovat jeste tak 4mm pod nulu,
57         // a pak uz muze jit konv.obal do ctverce
58         // vnitrni rozmery ctverce 21.5x21.5, zakulacene rohy prumer 3.5
59         // vrch chladice (s LEDkou) -18.5
60         // konec nozicek -24.5
61
62 front_len = fraen_h + wall;
63 rear_mount_depth = 10;
64 rear_sep = 0.3;
65
66 module front_body() {
67         hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 0]) {
68                 cylinder(r = fraen_diam/2 + pin_diam/2 + wall,
69                         h = front_len + wall);
70         }
71 }
72
73 module front_part() {
74         difference() {
75                 front_body();
76                 for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 0]) {
77                         // front narower ring
78                         translate([0, 0, -eps])
79                                 cylinder(r = fraen_diam/2 - wall, h = wall+2*eps);
80                         // main holes
81                         translate([0, 0, wall])
82                                 cylinder(r = fraen_diam/2 , h = front_len + eps);
83                         // pin holes
84                         for (angle = [0, 90, 180, 270]) {
85                                 rotate([0, 0, angle+45])
86                                         translate([pin_offset, 0, wall])
87                                                 cylinder(r=pin_diam/2,
88                                                         h=front_len + eps);
89                         };
90                 }
91                 // rear mount
92                 difference() {
93                 hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, front_len - rear_mount_depth] ) {
94                         cylinder(r = fraen_diam/2 + pin_diam/2,
95                                 h = wall + rear_mount_depth + eps);
96                 }
97                 for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, front_len])
98                 for (angle = [0, 90, 180, 270]) rotate([0, 0, angle])
99                         translate([rear_pin_dist, rear_pin_dist, 0])
100                                 cylinder(r=rear_pin_diam/2, h = wall);
101                 }
102                 // screw holes
103                 for (y = [-1, 1]) translate([0, y*screw_yoff, -eps])
104                         cylinder(r = screw_d/2,
105                                 h = front_len + wall + 2*eps);
106         }
107 }
108
109 module rear_body() {
110         hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 0] ) {
111                 cylinder(r = fraen_diam/2 + pin_diam/2 - rear_sep,
112                         h = wall + rear_mount_depth);
113         }
114 }
115
116 module rear_part() {
117         difference() {
118                 rear_body();
119                 // pins
120                 for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, wall])
121                 for (angle = [0, 90, 180, 270]) rotate([0, 0, angle])
122                         translate([rear_pin_dist, rear_pin_dist, 0])
123                                 cylinder(r=rear_pin_diam/2, h = rear_mount_depth+wall+eps);
124                 // pins hull
125                 // for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 2*wall]) hull()
126                 // for (angle = [0, 90, 180, 270]) rotate([0, 0, angle])
127                 //      translate([rear_pin_dist, rear_pin_dist, 0])
128                 //              cylinder(r=rear_pin_diam/2, h = rear_mount_depth);
129                 difference() {
130                         // outer wall
131                         hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, heatsink_z + heatsink_thickness] ) {
132                                 cylinder(r = fraen_diam/2 + pin_diam/2 - rear_sep - wall,
133                                         h = rear_mount_depth + wall + eps);
134                         }
135                         // minus screw mounts
136                         for (y = [-1, 1]) translate([0, y*screw_yoff, 0])
137                                 cylinder(r = screw_d/2 + screw_wall,
138                                         h = rear_mount_depth + wall + eps);
139                 }
140                 // screw holes
141                 for (y = [-1, 1]) translate([0, y*screw_yoff, -eps])
142                         cylinder(r = screw_d/2,
143                                 h = rear_mount_depth + wall + 2*eps);
144                 // heatsink
145                 translate([-heatsink_l/2, -heatsink_w/2, heatsink_z])
146                         cube([heatsink_l, heatsink_w, rear_mount_depth]);
147                 // heatsink back hole
148                 translate([-heatsink_l/2 + heatsink_hole_sep,
149                                 -heatsink_w/2 + heatsink_hole_sep, -eps])
150                         cube([heatsink_l-2*heatsink_hole_sep,
151                                 heatsink_w-2*heatsink_hole_sep,
152                                 heatsink_z+2*eps]);
153         }
154 }
155
156 translate([0, fraen_diam *1.5, 0])
157         front_part($fn = 128);
158
159 rear_part($fn = 128);
160