// Holder for two Fraen FHS-HEB1-LB01-x lenses for Luxeon LEDs. eps = 0.01; infty = 100; wall = 1.5; lens_dist = 45; fraen_diam = 30.90 + 0.3; fraen_h = 29.3; pin_diam = 4 + 0.2; pin_offset = 10.35*1.4142; pin_len = 9.2; front_add = 4; rear_pin_dist = 9.1; rear_pin_diam = 3.25 + 0.5; side_barrier_x_offset = 13; side_barrier_pin_z_offset = 4.2; side_barrier_thickness = 2; heatsink_thickness = 2; heatsink_w = 15 + 0.5; heatsink_l = lens_dist + 1.5*heatsink_w; heatsink_z = 1 + wall; heatsink_hole_sep = 2*wall; clip_h1 = 27; // front height (on the heatsink side) clip_h2 = 20; // rear height (on the lens side) clip_l = 28; clip_wall = wall; clip_space = 3.5; clip_bolt1_z = 6; clip_bolt1_x = 19.5; clip_bolt2_z = 22; clip_bolt2_x = 21; clip_angle = 18; clip_top_xoff = clip_l*tan(clip_angle); clip_y_off = 34; clip_x_off = 2; clip_x_rot = -3; screw_yoff = 12; screw_d = 4; screw_d2 = 12; screw_h = 8; screw_wall = 3*wall; // vnitrni prumer kruhu by mel byt 30.75mm // vnejsi prumer aspon 35 mm // pin od stredu 10.35mm na x a y // prumer pinu 4 mm // pin ma od cela do zabrany 4.2mm, celkove by mel mit 9.2mm // piny by mely pokracovat jeste tak 4mm pod nulu, // a pak uz muze jit konv.obal do ctverce // vnitrni rozmery ctverce 21.5x21.5, zakulacene rohy prumer 3.5 // vrch chladice (s LEDkou) -18.5 // konec nozicek -24.5 front_len = fraen_h + wall; rear_mount_depth = 10; rear_sep = 0.3; module front_body() { hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 0]) { cylinder(r = fraen_diam/2 + pin_diam/2 + wall, h = front_len + wall); } } module front_part() { difference() { front_body(); for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 0]) { // front narower ring translate([0, 0, -eps]) cylinder(r = fraen_diam/2 - wall, h = wall+2*eps); // main holes translate([0, 0, wall]) cylinder(r = fraen_diam/2 , h = front_len + eps); // pin holes for (angle = [0, 90, 180, 270]) { rotate([0, 0, angle+45]) translate([pin_offset, 0, wall]) cylinder(r=pin_diam/2, h=front_len + eps); }; } // rear mount difference() { hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, front_len - rear_mount_depth] ) { cylinder(r = fraen_diam/2 + pin_diam/2, h = wall + rear_mount_depth + eps); } for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, front_len]) for (angle = [0, 90, 180, 270]) rotate([0, 0, angle]) translate([rear_pin_dist, rear_pin_dist, 0]) cylinder(r=rear_pin_diam/2, h = wall); } // screw holes for (y = [-1, 1]) translate([0, y*screw_yoff, -eps]) cylinder(r = screw_d/2, h = front_len + wall + 2*eps); } } module rear_body() { hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 0] ) { cylinder(r = fraen_diam/2 + pin_diam/2 - rear_sep, h = wall + rear_mount_depth); } } module rear_part() { difference() { rear_body(); // pins for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, wall]) for (angle = [0, 90, 180, 270]) rotate([0, 0, angle]) translate([rear_pin_dist, rear_pin_dist, 0]) cylinder(r=rear_pin_diam/2, h = rear_mount_depth+wall+eps); // pins hull // for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, 2*wall]) hull() // for (angle = [0, 90, 180, 270]) rotate([0, 0, angle]) // translate([rear_pin_dist, rear_pin_dist, 0]) // cylinder(r=rear_pin_diam/2, h = rear_mount_depth); difference() { // outer wall hull() for (x = [-1, 1]) scale([x, 1, 1]) translate([lens_dist/2, 0, heatsink_z + heatsink_thickness] ) { cylinder(r = fraen_diam/2 + pin_diam/2 - rear_sep - wall, h = rear_mount_depth + wall + eps); } // minus screw mounts for (y = [-1, 1]) translate([0, y*screw_yoff, 0]) cylinder(r = screw_d/2 + screw_wall, h = rear_mount_depth + wall + eps); } // screw holes for (y = [-1, 1]) translate([0, y*screw_yoff, -eps]) cylinder(r = screw_d/2, h = rear_mount_depth + wall + 2*eps); // heatsink translate([-heatsink_l/2, -heatsink_w/2, heatsink_z]) cube([heatsink_l, heatsink_w, rear_mount_depth]); // heatsink back hole translate([-heatsink_l/2 + heatsink_hole_sep, -heatsink_w/2 + heatsink_hole_sep, -eps]) cube([heatsink_l-2*heatsink_hole_sep, heatsink_w-2*heatsink_hole_sep, heatsink_z+2*eps]); } } translate([0, fraen_diam *1.5, 0]) front_part($fn = 128); rear_part($fn = 128);