include include include include include include include include include include module cam_and_lense_new() { lhs = laser_holder_size(); // screw insert diameter id = 4; // cam and lense holder mount plate z size (scanner coords) //calhmpzs = 20; calhmpzs = 8; // cam and lense holder mount plate y height (scanner coords) //calhmpyh = 13; //calhmpyh = 25.714; calhmpyh = 20; // cam and lense holder mount plate z offset (scanner coords) //calhmpzo = 5.07; calhmpzo = -0.93; //tpw = $m12_lense_holder_size; tpw = veye_imx287_pcb_w; //color("pink", 0.6) difference() { union() { //color("green", 0.3) difference() { //color("blue", 0.3) hull() { translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) veye_imx287_mount_plate_outer(); translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) { //color("blue", 0.3) { m12_lense_holder_base(); //color("blue", 0.3) *%m12_lense_holder(); } } } hull() translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) { m12_lense_circle(); translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) veye_imx287_mount_plate_inner(); } translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) scale([1, 2, 1]) m12_lense_holder_screw_holes(); } // top part hull() { // lense holder helper { //color("red", 0.3) translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) //translate([0, -$lenseSensorDistanceMm, 0]) //rotate([$sensorLenseAngleDegrees, 0, 0]) m12_lense_holder_top(); } // cam holder helper { pcb_w = veye_imx287_pcb_w; pcb_h = veye_imx287_pcb_h; //color("yellow", 0.5) translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) //cube([pcb_w + $tiny_padding * 2, 1, 1]); veye_imx287_mount_plate_outer_top(); } // wall near body { //color("orange", 0.3) translate([-pcb_w / 2, -$sbfwo, 116]) rotate([90, 0, 0]) cube([pcb_w, 14, 1]); } } } translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) veye_imx287_mount_holes(); } } module cam_and_lense() { lhs = laser_holder_size(); // screw insert diameter id = 4; // cam and lense holder mount plate z size (scanner coords) calhmpzs = 20; // cam and lense holder mount plate y height (scanner coords) calhmpyh = 13; // cam and lense holder mount plate z offset (scanner coords) calhmpzo = 5.07; //tpw = $m12_lense_holder_size; tpw = veye_imx287_pcb_w; translate([0, 0, $lenseYPosMm]) %rotate([-$opticalAxisAngleDegrees, 0, 0]) { //color("orange", 0.6) m12_lense_holder(); %m12_lense(); //color("red", 0.3) //%m12_lense_circle(); translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) { //color("yellow", 0.3) veye_imx287_natural(); } color("green", 0.5) *difference() { // outer area //color("blue", 0.8) //color("blue") hull() { m12_lense_holder_base(); { translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) veye_imx287_mount_plate_outer(); } } //m12_lense_circle(); // inner area to cut //color("red", 0.3) hull() { m12_lense_circle(); translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) veye_imx287_mount_plate_inner(); } } } color("green", 0.3) *hull() { translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) { color("green", 0.3) { m12_lense_holder_base(); { translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) veye_imx287_mount_plate_outer(); } } } // cam and lense mount plate color("red", 0.5) translate([ 0, calhmpzo, //0, -$tiny_padding - lhs[2] / 2 + main_frame_height_y]) cube([ //veye_imx287_pcb_h / 2, tpw, //calhmpzs, //tpw / 2, $tiny_padding, $tiny_padding ], center = true); } color("green", 0.3) *hull() { color("red", 0.5) translate([ 0, calhmpzo, //0, -$tiny_padding - lhs[2] / 2 + main_frame_height_y]) cube([ //veye_imx287_pcb_h / 2, tpw, //calhmpzs, //tpw / 2, $tiny_padding, $tiny_padding ], center = true); } // AAAAAAAAAAAAA //union() color("blue", 0.3) hull() { translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) veye_imx287_mount_plate_outer(); translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) { color("blue", 0.3) { m12_lense_holder_base(); } } // second top plate height stph = 5; translate([ 0, //-4.917, -3.85, //0, -$tiny_padding - lhs[2] / 2 + main_frame_height_y -stph / 2 ]) *cube([ veye_imx287_pcb_h,// - veye_imx287_mount_plate_corner_radius * 2, //tpw, //calhmpzs, //tpw / 2, $tiny_padding, //$tiny_padding stph ], center = true); } { // cam and lense mount plate color("orange", 0.5) translate([ 0, calhmpzo, //0, -$tiny_padding - lhs[2] / 2 + main_frame_height_y - calhmpyh / 2]) cube([ //veye_imx287_pcb_h / 2, tpw, //calhmpzs, //tpw / 2, //10, 10 calhmpzs, //$tiny_padding, //$tiny_padding calhmpyh ], center = true); translate([0, 0, $lenseYPosMm]) rotate([-$opticalAxisAngleDegrees, 0, 0]) { color("red", 0.3) { m12_lense_holder_base(); } } } // cam and lense holder screw holes *union() { // multipliers are in scanner coords for (x_mult = [-1, 1], z = [0, -16]) { /*translate([ -lhs[0] * 1 / 3 * x_mult, //-lhs[1] / 2 * z_mult +- 4, z, -lhs[2] / 2]) */ translate([ veye_imx287_pcb_h / 3 * x_mult, //calhmpzs / 2, calhmpzo, -lhs[2] / 2 + main_frame_height_y]) screw_hole( m = m2, id = id, il = hole_insert_height * 2, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_top); } } } module cam_and_lense_holder() { color("red", 0.3) m12_lense_circle(); } module camera_hole() { // TODO: calc Y (scanner coords) offset instead of // hardcoding it y_offset = 100; translate([0, 0, y_offset]) // move to the front border of scanner body translate([0, $wawt, 0]) front_glass_hole(gw = 26.6, gh = 19.6, gt = 2, gcr = 1); } module laser_glass_hole() { // TODO: calc Y (scanner coords) offset instead of // hardcoding it y_offset = 0; translate([0, 0, y_offset]) // move to the front border of scanner body translate([0, $wawt, 0]) front_glass_hole(gw = 14, gh = 6, gt = 2, gcr = 1); } module laser_holder_screw_holes() { lzo = -$laserZOffsetMm; ll = $laserBodyLengthMm; lhs = laser_holder_size(); id = 4; // multipliers are in scanner coords for (x_mult = [-1, 1], z = [0, -16]) { translate([ -lhs[0] * 1 / 3 * x_mult, //-lhs[1] / 2 * z_mult +- 4, z, -lhs[2] / 2]) screw_hole( m = m2, id = id, il = hole_insert_height * 2, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_bottom); } } module cam_lense_holder_screw_holes() { id = 4; // scanner coords x_offset = 10; y_center = 123; y_offset = 3; for (x = [x_offset, -x_offset], yo = [y_offset, -y_offset]) { translate([x, -wzo, y_center + yo]) screw_hole( m = m2, id = id, il = hole_insert_height, hd = m2_head_diameter, hh = m2_head_height, hs = hole_side_front); } } module visualize_yz_range() { lenseY = $lenseYPosMm; zBase = $actualZBaseMm + $wawt; farZ = zBase + $actualZRangeMm; color("red", 0.3) rotate([0, -90, 0]) %polygon([ [lenseY, 0], [0, zBase], [0, farZ], ]); } module visualize_xz_range() { zBase = $actualZBaseMm + $wawt; farZ = zBase + $actualZRangeMm; color("red", 0.3) %polygon( [[$actualXStartMm / 2, zBase], [-$actualXStartMm / 2, zBase], [-$actualXEndMm / 2, farZ], [$actualXEndMm / 2, farZ],]); } module visualize_range() { lenseY = $lenseYPosMm; zBase = $actualZBaseMm + $wawt; // TODO: use `zEnd` name instead of `farZ`? farZ = zBase + $actualZRangeMm; xs = $actualXStartMm; xe = $actualXEndMm; // lense center lc = [0, 0, lenseY]; // x start left xsl = [-xs / 2, zBase, 0]; xsr = [xs / 2, zBase, 0]; xel = [-xe / 2, farZ, 0]; xer = [xe / 2, farZ, 0]; // 0 1 2 3 4 points = [lc, xsl, xsr, xel, xer]; // front (top?) face // ff = [lc, xel, xer]; ff = [0, 3, 4]; // right face // rf = [xer, lc, xsr]; rf = [4, 0, 2]; // back (ass) face // bkf = [xsr, lc, xsl]; bkf = [2, 0, 1]; // left face // lf = [xsl, lc, xel]; lf = [1, 0, 3]; // bottom face // bmf = [xel, xer, xsr, xsl]; bmf = [3, 4, 2, 1]; faces = [ff, rf, bkf, lf, bmf]; //faces = [ff]; //polyhedron(points, faces); color("red", 0.4) polyhedron( [lc, xsl, xsr, xel, xer], //[ff, rf, bkf] faces ); } // main frame module scanner_main_frame() { lhs = laser_holder_size(); // inner height, width, depth and radius ih = main_frame_height_y; iw = main_frame_width_x; id = main_frame_depth_z; ir = wt; // now try to cut body with rounded corners to simplify // cnc manufacturing // TODO: move this shit to a module difference() { hull() { // outer cylinders union() { for (yd = [0, -id], zd = [0, ih]) { translate([0, -wzo + yd, -lhs[2] / 2 + zd]) rotate([0, 90, 0]) cylinder($fn = dToFn(ir * 2), r = ir, h = iw, center = true); } } } // inner cylinders hull() { union() { for (yd = [0 - ir, -id + ir], zd = [0 + ir, ih - ir]) { translate([0, -wzo + yd, -lhs[2] / 2 + zd]) rotate([0, 90, 0]) // scale by x a bit to fully cut cylinder($fn = dToFn(ir * 2), r = ir, h = iw * 1.1, center = true); } } } } // back wall, bottom translate([0, bwo, 10]) hole_holder_hot_inserts(hs = hole_side_back); // back wall, top translate([0, bwo, 120]) hole_holder_hot_inserts(hs = hole_side_back); // top wall translate([0, 0, two]) hole_holder_hot_inserts(hs = hole_side_top); // front wall, bottom translate([0, fwo, 12]) hole_holder_hot_inserts(hs = hole_side_front); // front wall, top translate([0, fwo, 83]) hole_holder_hot_inserts(hs = hole_side_front); // TODO: and now add some stands for screwing left/right covers // TODO: simplify inner cut cube after implementing this: // rounded corners won't be needed anymore // chinese fan //translate([0, -$scannerBodyFrontWallOffsetMm, 40]) *translate([0, bwo, fan_y_offset]) ld3007ms(); } // s - scale module m12_connectors(s = [1, 1, 1]) { // inner height, width, depth and radius (scanner coords) ih = main_frame_height_y; iw = main_frame_width_x; id = main_frame_depth_z; ir = wt; // scanner coords bottom_connector_y = 28; bcy = bottom_connector_y; m12tpd = m12_male_conn_body_thick_part_d; { // add outer m12 connectors //scale([1.05, 1, 1.05]) // scale([1.1, 1, 1.1]) translate([0, bwo + $tiny_padding, bcy + m12tpd + 5]) scale(s) m12_female_connector(); translate([0, bwo + $tiny_padding, bcy]) scale(s) m12_male_connector(); } } module m12_connectors_to_cut() { //translate([0, $tiny_padding * 50, 0]) m12_connectors([1.05, 1, 1.05]); } module laser_with_holder() { translate([0, -$laserZOffsetMm, 0]) { %laser_body(); laser_holder(); } } module body_fan_holes() { id = main_frame_depth_z; translate([0, fwo, fan_y_offset]) ld3007ms_holes(); } module radxa() { translate([0, 0, 20]) translate([0, fwo - 13, radxa_zero_3e_pcb_h - 5]) rotate([90, 0, 0]) //radxa_zero_3e_with_protoboard(); { radxa_zero_3e_with_protoboard_and_connectors(); %radxa_zero_3e_mount_plate_with_holes(); } } module radxa_body_cutter() { translate([0, 0, 20]) translate([0, fwo - 13, radxa_zero_3e_pcb_h - 5]) rotate([90, 0, 0]) radxa_zero_3e_mount_plate_holes(); translate([0, 0, 20]) translate([0, fwo, radxa_zero_3e_pcb_h - 5]) rotate([90, 0, 0]) radxa_zero_3e_mount_plate_outer_holes(); } module other() { //cam_and_lense(); difference() { cam_and_lense_new(); //translate([-$tiny_padding*100, 0, 0]) translate([0, $tiny_padding, 0]) cam_lense_holder_screw_holes(); } //visualize_yz_range(); //visualize_xz_range(); visualize_range(); laser_with_holder(); %radxa(); } // visual block // visualize camera *union() { translate([0, 0, $lenseYPosMm]) %rotate([-$opticalAxisAngleDegrees, 0, 0]) { //color("orange", 0.6) m12_lense_holder(); %m12_lense(); //color("red", 0.3) //%m12_lense_circle(); translate([0, -$lenseSensorDistanceMm, 0]) rotate([$sensorLenseAngleDegrees, 0, 0]) { //color("yellow", 0.3) veye_imx287_natural(); } } } union() { other(); *cam_lense_holder_screw_holes(); color("green", 0.1) difference() { scanner_main_frame(); camera_hole(); laser_glass_hole(); laser_holder_screw_holes(); m12_connectors_to_cut(); //m12_connectors_to_cut(); cam_lense_holder_screw_holes(); //body_fan_holes(); radxa_body_cutter(); } %m12_connectors(); //m12_connectors_to_cut(); } // printing cam/lense holder *union() { difference() { cam_and_lense_new(); //translate([-$tiny_padding*100, 0, 0]) translate([0, $tiny_padding, 0]) cam_lense_holder_screw_holes(); } } // printing body *difference() { scanner_main_frame(); camera_hole(); laser_glass_hole(); laser_holder_screw_holes(); //m12_connectors(); m12_connectors_to_cut(); //body_fan_holes(); radxa_body_cutter(); } *translate([0, -$laserZOffsetMm, 0]) { %laser_body(); laser_holder(); } //m12_connectors(); //m12_connectors_to_cut(); //radxa_body_cutter();