1 // Holder for Fraen FHS-HEB1-LB01-x lens for Luxeon LEDs.
2 // I use it for my rear lights.
12 pin_offset = 10.35*1.4142;
16 side_barrier_x_offset = 13;
17 side_barrier_pin_z_offset = 4.2;
18 side_barrier_thickness = 2;
20 heatsink_thickness = 2.5;
22 clip_h1 = 27; // front height (on the heatsink side)
23 clip_h2 = 20; // rear height (on the lens side)
25 clip_wall = wall_thickness;
32 clip_top_xoff = clip_l*tan(clip_angle);
38 module bolt_mount(d, h, w1, w2, fn) {
40 translate([0, 0, -epsilon])
41 cylinder(r1=w2/2, r2=w1/2, h=h+epsilon);
42 translate([0, 0, -2*epsilon])
43 cylinder(r=d/2, h=h+3*epsilon, $fn=fn);
52 translate([0, clip_space/2, 0])
53 cube([clip_h1, clip_wall, epsilon]);
54 translate([clip_top_xoff, clip_space/2, clip_l])
55 cube([clip_h2, clip_wall, epsilon]);
60 translate([0, -clip_space/2-clip_wall, 0])
61 cube([clip_h1, clip_wall, epsilon]);
62 translate([0+clip_top_xoff, -clip_space/2-clip_wall, clip_l])
63 cube([clip_h2, clip_wall, epsilon]);
68 translate([-clip_wall, -clip_space/2-clip_wall, 0])
69 cube([clip_wall+epsilon, 2*clip_wall+clip_space, epsilon]);
70 translate([-clip_wall+clip_top_xoff, -clip_space/2-clip_wall, clip_l])
71 cube([clip_wall+epsilon, 2*clip_wall+clip_space, epsilon]);
75 translate([clip_bolt1_x, clip_space/2 + clip_wall, clip_bolt1_z])
77 bolt_mount(6.5, 2, 7, 12, 32);
79 translate([clip_bolt1_x, -clip_space/2 - clip_wall, clip_bolt1_z])
81 bolt_mount(6.5, 2, 7, 12, 6);
83 translate([clip_bolt2_x, clip_space/2 + clip_wall, clip_bolt2_z])
85 bolt_mount(6.5, 2, 7, 12, 32);
87 translate([clip_bolt2_x, -clip_space/2 - clip_wall, clip_bolt2_z])
89 bolt_mount(6.5, 2, 7, 12, 6);
92 translate([clip_bolt1_x, infty/2, clip_bolt1_z])
94 cylinder(r=2, h=infty, $fn = 6);
95 translate([clip_bolt2_x, infty/2, clip_bolt2_z])
97 cylinder(r=2, h=infty, $fn = 6);
102 // upper part of the lens holder
103 module round_part() {
105 cylinder(r = fraen_diam/2 + pin_diam/2 + wall_thickness,
106 h = front_add + pin_len);
109 translate([0, 0, -epsilon])
110 cylinder(r = fraen_diam/2,
111 h = pin_len + front_add + 2*epsilon);
112 for (angle = [0, 90, 180, 270]) {
113 rotate([0, 0, angle+45])
114 translate([pin_offset, 0, -epsilon])
115 cylinder(r=pin_diam/2,
121 translate([0, 0, pin_len + 0.5*wall_thickness - epsilon])
122 cylinder(r1 = fraen_diam/2,
123 r2 = (fraen_diam+pin_diam + wall_thickness)/2,
124 h = front_add - 0.5*wall_thickness+ 2*epsilon);
126 for (angle = [0, 90, 180, 270]) {
127 rotate([0, 0, angle+45])
128 translate([pin_offset, 0, epsilon])
129 cylinder(r=pin_diam/2,
130 h=pin_len+epsilon, $fn=32);
135 for (angle = [0, 90, 180]) // omit the bottom one
136 rotate([0, 0, angle])
138 cylinder(r=fraen_diam/2+epsilon, h=infty);
139 translate([-infty/2, side_barrier_x_offset,
140 wall_thickness + pin_len - side_barrier_pin_z_offset - side_barrier_thickness ])
141 cube([infty, infty, side_barrier_thickness]);
145 module square_cone() {
148 translate([0, 0, fraen_h - pin_len])
149 cylinder(r = fraen_diam/2 + pin_diam/2 + wall_thickness,
151 for (angle = [0, 90, 180, 270])
152 rotate([0, 0, angle])
153 translate([9.1, 9.1, 0])
154 cylinder(r=wall_thickness+3.75/2, h = epsilon);
157 translate([0, 0, fraen_h - pin_len + epsilon])
158 cylinder(r = fraen_diam/2,
160 for (angle = [0, 90, 180, 270]) {
161 rotate([0, 0, angle])
162 translate([9.1, 9.1, -epsilon])
163 cylinder(r=3.75/2, h = epsilon);
164 rotate([0, 0, angle+45])
165 translate([pin_offset, 0, fraen_h - pin_len + epsilon])
166 cylinder(r=pin_diam/2,
175 module rear_spring() {
176 translate([0, 0, wall_thickness/2])
177 cube([18+2*wall_thickness+3.5, rear_spring_w, wall_thickness], center=true);
180 translate([0, 0, -rear_spring_w/2])
181 cylinder(r=6-heatsink_thickness, h = rear_spring_w);
182 translate([0, 0, -infty/2+epsilon])
183 cube(infty, center=true);
187 module heatsink_holder() {
188 for (angle = [0, 180]) {
189 rotate([0, 0, angle])
190 translate([9.1+wall_thickness, 0, 6/2])
191 cube([3.5/2+wall_thickness, 2*9.1-3.5-0.5, 6], center=true);
195 module lens_holder() {
198 translate([0, 0, fraen_h - pin_len])
203 // 0.5mm hole in the bottom
204 // translate([side_barrier_x_offset-epsilon, -0.25, -epsilon])
205 translate([0, -0.25, (fraen_h - pin_len)/2])
206 cube([infty, 0.5, infty]);
209 translate([9.1, 0, 6+3])
213 // side LED hole, 3mm
214 translate([0, 0, fraen_h - pin_len])
216 cylinder(r=3.5/2, h=infty, $fn=6);
224 lens_holder($fn = 128);
225 translate([clip_x_off, clip_y_off, 0])
229 translate([0, 9.1+3.5/2+epsilon, wall_thickness/2])
230 cube([9.1, epsilon, wall_thickness], center=true);
231 translate([20-clip_wall/2, 40-clip_space/2-clip_wall+epsilon, wall_thickness/2])
232 cube([9.1, epsilon/2, wall_thickness], center=true);
236 translate([0, 9.1+3.5/2+epsilon, wall_thickness/2])
237 cube([2*.259+3.5, epsilon, wall_thickness], center=true);
238 translate([20-clip_wall/2, 40-clip_space/2-clip_wall+epsilon, wall_thickness/2])
239 cube([clip_h1+clip_wall, epsilon/2, wall_thickness], center=true);
242 translate([7.5, 13.3, 0])
243 cube([wall_thickness, 23, fraen_h - pin_len - wall_thickness]);
246 //translate([-infty/2, -infty/2, 8])
252 // vnitrni prumer kruhu by mel byt 30.75mm
253 // vnejsi prumer aspon 35 mm
254 // pin od stredu 10.35mm na x a y
256 // pin ma od cela do zabrany 4.2mm, celkove by mel mit 9.2mm
258 // piny by mely pokracovat jeste tak 4mm pod nulu,
259 // a pak uz muze jit konv.obal do ctverce
260 // vnitrni rozmery ctverce 21.5x21.5, zakulacene rohy prumer 3.5
261 // vrch chladice (s LEDkou) -18.5
262 // konec nozicek -24.5