1 // Holder for Fraen FHS-HEB1-LB01-x lens for Luxeon LEDs.
2 // I use it for my rear lights.
8 heatsink_thickness = 2.5;
9 heatsink_width = 18-3.4;
12 module bolt_mount(d, h, w1, w2, fn) {
14 translate([0, 0, -epsilon])
15 cylinder(r1=w2/2, r2=w1/2, h=h+epsilon);
16 translate([0, 0, -2*epsilon])
17 cylinder(r=d/2, h=h+3*epsilon, $fn=fn);
21 clip_h1 = 25; // inner height
22 clip_h2 = 18; // inner height
29 module clip_top_circle() {
32 translate([-clip_space/2, 0, 0])
33 cylinder(r=clip_wall, h = epsilon, $fn=32);
34 translate([-infty/2, clip_wall/2-epsilon, -epsilon])
36 translate([clip_wall+epsilon, -infty/2, -epsilon])
44 [-clip_wall-clip_space/2, 0, clip_h1/2+clip_wall],
45 [-clip_wall-clip_space/2, clip_l, clip_h2/2+clip_wall],
46 [-clip_wall-clip_space/2, clip_l, -clip_h2/2],
47 [-clip_wall-clip_space/2, 0, -clip_h1/2],
48 [ clip_wall+clip_space/2, 0, clip_h1/2+clip_wall],
49 [ clip_wall+clip_space/2, clip_l, clip_h2/2+clip_wall],
50 [ clip_wall+clip_space/2, clip_l, -clip_h2/2],
51 [ clip_wall+clip_space/2, 0, -clip_h1/2],
53 [0, 2, 1], [3, 2, 0], [4, 5, 6], [6, 7, 4],
54 [0, 1, 5], [5, 4, 0], [2, 3, 7], [7, 6, 2],
55 [1, 2, 6], [6, 5, 1], [0, 7, 3], [7, 0, 4],
58 [-clip_space/2, -epsilon, clip_h1/2],
59 [-clip_space/2, clip_l+epsilon, clip_h2/2],
60 [-clip_space/2, clip_l+epsilon, -clip_h2/2-epsilon],
61 [-clip_space/2, -epsilon, -clip_h1/2-epsilon],
62 [ clip_space/2, -epsilon, clip_h1/2],
63 [ clip_space/2, clip_l+epsilon, clip_h2/2],
64 [ clip_space/2, clip_l+epsilon, -clip_h2/2-epsilon],
65 [ clip_space/2, -epsilon, -clip_h1/2-epsilon],
67 [0, 2, 1], [3, 2, 0], [4, 5, 6], [6, 7, 4],
68 [0, 1, 5], [5, 4, 0], [2, 3, 7], [7, 6, 2],
69 [1, 2, 6], [6, 5, 1], [0, 7, 3], [7, 0, 4],
72 translate([0, clip_bolt1_x, 0])
74 translate([0, 0, -clip_wall-clip_space/2-epsilon])
75 cylinder(r=2, h=2*clip_wall+clip_space+2*epsilon,
77 translate([0, clip_bolt2_x, 0])
79 translate([0, 0, -clip_wall-clip_space/2-epsilon])
80 cylinder(r=2, h=2*clip_wall+clip_space+2*epsilon,
84 translate([-clip_space, clip_bolt1_x, 0])
86 bolt_mount(6, 3, 7, 14, 6);
88 translate([-clip_space, clip_bolt2_x, 0])
90 bolt_mount(6, 3, 7, 14, 6);
92 translate([clip_space, clip_bolt1_x, 0])
94 bolt_mount(6, 3, 7, 14, 128);
96 translate([clip_space, clip_bolt2_x, 0])
98 bolt_mount(6, 3, 7, 14, 128);
107 translate([40, epsilon, 2])
112 translate([40, 0, 25])
114 cylinder(r=34/2, h=clip_l);
117 translate([clip_space/2+epsilon, 0, 0])
118 cube([clip_wall-epsilon, clip_wall, clip_h1/2+2*clip_wall-epsilon]);
119 translate([40, 0, 14+epsilon])
120 cube([clip_wall-epsilon, clip_wall, 34/2]);
123 translate([40, 6, 25])
124 rotate([-90, 0, 0]) {
125 cylinder(r=31/2, h=clip_l);
132 wall_thickness = 1.5;
136 pin_offset = 10.35*1.4142;
140 side_barrier_x_offset = 13;
141 side_barrier_pin_z_offset = 4.2;
142 side_barrier_thickness = 2;
144 module round_part() {
146 cylinder(r = fraen_diam/2 + pin_diam/2 + wall_thickness,
147 h = front_add + pin_len);
150 translate([0, 0, -epsilon])
151 cylinder(r = fraen_diam/2,
152 h = pin_len + front_add + 2*epsilon);
153 for (angle = [0, 90, 180, 270]) {
154 rotate([0, 0, angle+45])
155 translate([pin_offset, 0, -epsilon])
156 cylinder(r=pin_diam/2,
162 translate([0, 0, pin_len + 0.5*wall_thickness - epsilon])
163 cylinder(r1 = fraen_diam/2,
164 r2 = (fraen_diam+pin_diam + wall_thickness)/2,
165 h = front_add + 2*epsilon);
167 for (angle = [0, 90, 180, 270]) {
168 rotate([0, 0, angle+45])
169 translate([pin_offset, 0, epsilon])
170 cylinder(r=pin_diam/2,
171 h=pin_len+epsilon, $fn=32);
176 for (angle = [0, 90, 180]) // omit the bottom one
177 rotate([0, 0, angle])
179 cylinder(r=fraen_diam/2+epsilon, h=infty);
180 translate([-infty/2, side_barrier_x_offset,
181 wall_thickness + pin_len - side_barrier_pin_z_offset - side_barrier_thickness ])
182 cube([infty, infty, side_barrier_thickness]);
186 module square_cone() {
189 translate([0, 0, fraen_h - pin_len])
190 cylinder(r = fraen_diam/2 + pin_diam/2 + wall_thickness,
192 for (angle = [0, 90, 180, 270])
193 rotate([0, 0, angle])
194 translate([9.1, 9.1, 0])
195 cylinder(r=wall_thickness+3.75/2, h = epsilon);
198 translate([0, 0, fraen_h - pin_len + epsilon])
199 cylinder(r = fraen_diam/2,
201 for (angle = [0, 90, 180, 270]) {
202 rotate([0, 0, angle])
203 translate([9.1, 9.1, -epsilon])
204 cylinder(r=3.75/2, h = epsilon);
205 rotate([0, 0, angle+45])
206 translate([pin_offset, 0, fraen_h - pin_len + epsilon])
207 cylinder(r=pin_diam/2,
216 module rear_spring() {
217 translate([0, 0, wall_thickness/2])
218 cube([18+2*wall_thickness+3.5, rear_spring_w, wall_thickness], center=true);
221 translate([0, 0, -rear_spring_w/2])
222 cylinder(r=6-heatsink_thickness, h = rear_spring_w);
223 translate([0, 0, -infty/2+epsilon])
224 cube(infty, center=true);
228 module heatsink_holder() {
229 for (angle = [0, 180]) {
230 rotate([0, 0, angle])
231 translate([9.1+wall_thickness, 0, 6/2])
232 cube([3.5/2+wall_thickness, 2*9.1-3.5-0.5, 6], center=true);
236 module lens_holder() {
239 translate([0, 0, fraen_h - pin_len])
244 // 0.5mm hole in the bottom
245 // translate([side_barrier_x_offset-epsilon, -0.25, -epsilon])
246 translate([0, -0.25, (fraen_h - pin_len)/2])
247 cube([infty, 0.5, infty]);
250 translate([9.1, 0, 6+3])
254 // side LED hole, 3mm
255 translate([0, 0, fraen_h - pin_len])
257 cylinder(r=3.5/2, h=infty, $fn=6);
266 lens_holder($fn = 128);
268 translate([20, 40, 0])
270 seat_clip(, $fn=128);
273 translate([0, 9.1+3.5/2+epsilon, wall_thickness/2])
274 cube([9.1, epsilon, wall_thickness], center=true);
275 translate([20-clip_wall/2, 40-clip_space/2-clip_wall+epsilon, wall_thickness/2])
276 cube([9.1, epsilon/2, wall_thickness], center=true);
280 translate([0, 9.1+3.5/2+epsilon, wall_thickness/2])
281 cube([2*.259+3.5, epsilon, wall_thickness], center=true);
282 translate([20-clip_wall/2, 40-clip_space/2-clip_wall+epsilon, wall_thickness/2])
283 cube([clip_h1+clip_wall, epsilon/2, wall_thickness], center=true);
286 translate([7.5, 13.3, 0])
287 cube([wall_thickness, 23, fraen_h - pin_len - wall_thickness]);
291 translate([-infty/2, -infty/2, 8])
297 // vnitrni prumer kruhu by mel byt 30.75mm
298 // vnejsi prumer aspon 35 mm
299 // pin od stredu 10.35mm na x a y
301 // pin ma od cela do zabrany 4.2mm, celkove by mel mit 9.2mm
303 // piny by mely pokracovat jeste tak 4mm pod nulu,
304 // a pak uz muze jit konv.obal do ctverce
305 // vnitrni rozmery ctverce 21.5x21.5, zakulacene rohy prumer 3.5
306 // vrch chladice (s LEDkou) -18.5
307 // konec nozicek -24.5