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;
19 side_barrier_x_offset = 13;
20 side_barrier_pin_z_offset = 4.2;
21 side_barrier_thickness = 2;
23 heatsink_thickness = 2;
25 clip_h1 = 27; // front height (on the heatsink side)
26 clip_h2 = 20; // rear height (on the lens side)
28 clip_wall = wall_thickness;
35 clip_top_xoff = clip_l*tan(clip_angle);
42 module bolt_mount(d, h, w1, w2, fn) {
44 translate([0, 0, -epsilon])
45 cylinder(r1=w2/2, r2=w1/2, h=h+epsilon);
46 translate([0, 0, -2*epsilon])
47 cylinder(r=d/2, h=h+3*epsilon, $fn=fn);
56 translate([0, clip_space/2, 0])
57 cube([clip_h1, clip_wall, epsilon]);
58 translate([clip_top_xoff, clip_space/2, clip_l])
59 cube([clip_h2, clip_wall, epsilon]);
64 translate([0, -clip_space/2-clip_wall, 0])
65 cube([clip_h1, clip_wall, epsilon]);
66 translate([0+clip_top_xoff, -clip_space/2-clip_wall, clip_l])
67 cube([clip_h2, clip_wall, epsilon]);
72 translate([-clip_wall, -clip_space/2-clip_wall, 0])
73 cube([clip_wall+epsilon, 2*clip_wall+clip_space, epsilon]);
74 translate([-clip_wall+clip_top_xoff, -clip_space/2-clip_wall, clip_l])
75 cube([clip_wall+epsilon, 2*clip_wall+clip_space, epsilon]);
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_bolt1_x, -clip_space/2 - clip_wall, clip_bolt1_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);
91 translate([clip_bolt2_x, -clip_space/2 - clip_wall, clip_bolt2_z])
93 bolt_mount(6.5, 2, 7, 12, 32);
96 translate([clip_bolt1_x, infty/2, clip_bolt1_z])
98 cylinder(r=2, h=infty, $fn = 6);
99 translate([clip_bolt2_x, infty/2, clip_bolt2_z])
101 cylinder(r=2, h=infty, $fn = 6);
106 // upper part of the lens holder
107 module round_part() {
109 cylinder(r = fraen_diam/2 + pin_diam/2 + wall_thickness,
110 h = front_add + pin_len);
113 translate([0, 0, -epsilon])
114 cylinder(r = fraen_diam/2,
115 h = pin_len + front_add + 2*epsilon);
116 for (angle = [0, 90, 180, 270]) {
117 rotate([0, 0, angle+45])
118 translate([pin_offset, 0, -epsilon])
119 cylinder(r=pin_diam/2,
125 translate([0, 0, pin_len + 0.5*wall_thickness - epsilon])
126 cylinder(r1 = fraen_diam/2,
127 r2 = (fraen_diam+pin_diam + wall_thickness)/2,
128 h = front_add - 0.5*wall_thickness+ 2*epsilon);
130 for (angle = [0, 90, 180, 270]) {
131 rotate([0, 0, angle+45])
132 translate([pin_offset, 0, epsilon])
133 cylinder(r=pin_diam/2,
139 for (angle = [0, 90, 180]) // omit the bottom one
140 rotate([0, 0, angle])
142 cylinder(r=fraen_diam/2+epsilon, h=infty);
143 translate([-infty/2, side_barrier_x_offset,
144 pin_len - side_barrier_pin_z_offset - side_barrier_thickness ])
145 cube([infty, infty, side_barrier_thickness]);
149 module square_cone() {
152 translate([0, 0, fraen_h - pin_len])
153 cylinder(r = fraen_diam/2 + pin_diam/2 + wall_thickness,
155 for (angle = [0, 90, 180, 270])
156 rotate([0, 0, angle])
157 translate([rear_pin_dist, rear_pin_dist, 0])
158 cylinder(r=wall_thickness+3.75/2, h = epsilon);
161 translate([0, 0, fraen_h - pin_len + epsilon])
162 cylinder(r = fraen_diam/2,
164 for (angle = [0, 90, 180, 270]) {
165 rotate([0, 0, angle])
166 translate([rear_pin_dist, rear_pin_dist, -epsilon])
167 cylinder(r=3.75/2, h = epsilon);
168 rotate([0, 0, angle+45])
169 translate([pin_offset, 0, fraen_h - pin_len + epsilon])
170 cylinder(r=pin_diam/2,
177 rear_spring_w = 2*rear_pin_dist-rear_pin_diam-2;
179 rear_spring_center_w = 4;
182 module rear_spring() {
183 translate([0, 0, wall_thickness/2])
184 cube([rear_spring_center_w, rear_spring_w, wall_thickness],
186 translate([0, rear_spring_w/2-wall_thickness/2,
187 (led_zoff-heatsink_thickness)/2])
188 cube([rear_spring_center_w,
189 wall_thickness, led_zoff-heatsink_thickness],
191 translate([0, -rear_spring_w/2+wall_thickness/2,
192 (led_zoff-heatsink_thickness)/2])
193 cube([rear_spring_center_w,
194 wall_thickness, led_zoff-heatsink_thickness],
197 for (angle=[0, 180]) {
198 rotate([0, 0, angle])
199 translate([5.5, 0, rear_spring_h/2])
201 cube([wall_thickness, 14, rear_spring_h],
207 module heatsink_holder() {
208 for (angle = [0, 180]) {
209 rotate([0, 0, angle])
210 translate([rear_pin_dist+wall_thickness, 0, (led_zoff+wall_thickness)/2])
211 cube([rear_pin_diam/2+wall_thickness, 2*rear_pin_dist-rear_pin_diam-2, led_zoff+wall_thickness], center=true);
215 module lens_holder() {
218 translate([0, 0, fraen_h - pin_len])
223 // 0.5mm hole in the bottom
224 // translate([side_barrier_x_offset-epsilon, -0.25, -epsilon])
225 translate([0, -0.25, (fraen_h - pin_len)/2])
226 cube([infty, 0.5, infty]);
229 translate([rear_pin_dist, 0, 6+3])
233 // side LED hole, 3mm
234 translate([0, 0, fraen_h - pin_len])
236 cylinder(r=rear_pin_diam/2, h=infty, $fn=6);
243 module full_joint() {
249 cylinder(r = fraen_h-pin_len, h = rear_pin_dist + wall_thickness+rear_pin_diam/2);
250 translate([-infty/2, rear_pin_dist + wall_thickness + rear_pin_diam/2 - epsilon, 0])
253 translate([clip_x_off, clip_y_off, 0])
256 translate([(fraen_h-pin_len)*tan(clip_angle)-clip_wall, -clip_space/2-clip_wall+epsilon, 0])
257 rotate([90+clip_x_rot, 0, 0])
259 cylinder(r = fraen_h-pin_len, h = epsilon);
263 translate([0, 0, fraen_h - pin_len + epsilon])
264 cylinder(r = fraen_diam/2 + pin_diam/2 + wall_thickness/2,
266 for (angle = [0, 90, 180, 270])
267 rotate([0, 0, angle])
268 translate([rear_pin_dist, rear_pin_dist, -epsilon])
269 cylinder(r=wall_thickness/2+3.75/2, h = epsilon);
274 module seat_clip_rotated() {
276 translate([clip_space/2+clip_wall, 0, 0])
277 rotate([clip_x_rot, 0, 0])
278 translate([-clip_space/2-clip_wall, 0, sin(clip_x_rot)*(clip_space/2+clip_wall+epsilon)])
280 translate([-infty/2, -infty/2, -infty])
287 translate([clip_x_off, clip_y_off, 0])
295 // scale([1, -1, 1]) main($fn=128);
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