diff options
| -rw-r--r-- | body/body.scad | 14 | ||||
| -rw-r--r-- | body/design.scad | 32 | ||||
| -rw-r--r-- | body/laser.scad | 26 | ||||
| -rw-r--r-- | body/stand.scad | 224 |
4 files changed, 246 insertions, 50 deletions
diff --git a/body/body.scad b/body/body.scad index 580e107..6381a44 100644 --- a/body/body.scad +++ b/body/body.scad @@ -586,11 +586,13 @@ module m12_connectors(s = [1, 1, 1]) bcy = bottom_connector_y; m12tpd = m12_male_conn_body_thick_part_d; + echo("m12tpd: ", m12tpd); { // add outer m12 connectors //scale([1.05, 1, 1.05]) // scale([1.1, 1, 1.1]) + //translate([0, bwo + $tiny_padding, bcy + m12tpd + 5]) translate([0, bwo + $tiny_padding, bcy + m12tpd + 5]) scale(s) m12_female_connector(); @@ -665,7 +667,7 @@ module other() visualize_range(); laser_with_holder(); - %radxa(); + *radxa(); } module body_to_print() @@ -707,7 +709,7 @@ module body_to_print() } } -*union() +union() { other(); @@ -737,8 +739,10 @@ module body_to_print() laser_holder(); } -//m12_connectors(); -//m12_connectors_to_cut(); +color("blue", 0.5) +m12_connectors(); +color("green", 0.2) +m12_connectors_to_cut(); //radxa_body_cutter(); @@ -756,4 +760,4 @@ translate(back_bottom_side_hole_offset) hs = hole_side_left); color("yellow", 0.1) -*body_to_print();
\ No newline at end of file +body_to_print();
\ No newline at end of file diff --git a/body/design.scad b/body/design.scad index 1b931f7..459274e 100644 --- a/body/design.scad +++ b/body/design.scad @@ -1,6 +1,6 @@ -$actualZBaseText = "144.51 (120.51)"; -$opticalAxisAngleDegrees = 27.3; -$lenseYPosMm = 110; +$actualZBaseText = "148.84 (91.84)"; +$opticalAxisAngleDegrees = 30; +$lenseYPosMm = 125; $focalDistanceMm = 10; $backFocalDistanceMm = 7.3; $lenseAperture = 25; @@ -13,21 +13,21 @@ $sensorCellHeightUm = 6.9; $sensorVerticalOffsetMm = 0; $sensorPixelsHeight = 720; $sensorPixelsWidth = 544; -$zBaseMm = 150; +$zBaseMm = 89; $zRangeMm = 200; $laserBodyDiameterMm = 14; $laserBodyLengthMm = 45; $laserAngleDegrees = 45; -$laserZOffsetMm = -16; +$laserZOffsetMm = -50; $scannerBodyWallThicknessMm = 4; -$scannerBodyFrontWallOffsetMm = -20; -$sensorLenseAngleDegrees = 4.818540784876802; -$vFoVDegrees = 20.253496381793383; -$actualZBaseMm = 144.51352361628923; -$actualZRangeMm = 214.7427126579903; -$actualXStartMm = 84.0965918983382; -$actualXEndMm = 179.1269812757088; -$lenseSensorDistanceMm = 10.435095633007263; -$frontSharpDistanceMm = 239.24171139230918; -$backSharpDistanceMm = 240.4302923381752; -$depthOfFieldMm = 1.188580945866022; +$scannerBodyFrontWallOffsetMm = -53; +$sensorLenseAngleDegrees = 4.127810304512707; +$vFoVDegrees = 20.306181003537034; +$actualZBaseMm = 148.83926713609307; +$actualZRangeMm = 199.91850083089554; +$actualXStartMm = 90.3364960374123; +$actualXEndMm = 176.55747723962452; +$lenseSensorDistanceMm = 10.41666666666674; +$frontSharpDistanceMm = 249.35479446926757; +$backSharpDistanceMm = 250.64855313118355; +$depthOfFieldMm = 1.293758661915973; diff --git a/body/laser.scad b/body/laser.scad index 32658e9..e2b3bb9 100644 --- a/body/laser.scad +++ b/body/laser.scad @@ -2,14 +2,30 @@ include <design.scad> include <helpers.scad> include <body_config.scad> +// TODO: create 2 kinds of functions: zero-centered and +// globally positioned (respecting optical design and/or +// other variables) + // up to 0.7 inside measurement range, but can be bigger outside. // non-ideal printing/manufacturing is also possible laser_ray_thickness = 1; +module laser_beam(z_range = ($actualZBaseMm + $actualZRangeMm) * 2) +{ + x = tan($laserAngleDegrees / 2) * z_range; + + color("red", 0.1) + polygon([ + [0, 0], + [x, z_range], + [-x, z_range] + ]); +} + // create a body of laser with diameter `d` and // length `l`. // the ray starts at the origin -module laser_body(d = default_laser_d, l = default_laser_l) +module laser_body(d = default_laser_d, l = default_laser_l, show_beam=true) { rotate([-90, 0, 0]) translate([0, 0, -l]) @@ -34,6 +50,12 @@ module laser_body(d = default_laser_d, l = default_laser_l) [-$actualXStartMm / 2, zBase], [-$actualXEndMm / 2, farZ], [$actualXEndMm / 2, farZ],]); + + if (show_beam) + { + laser_beam(); + } } -*laser_body();
\ No newline at end of file +*laser_body(); +*laser_beam();
\ No newline at end of file diff --git a/body/stand.scad b/body/stand.scad index c583ec5..ea450b4 100644 --- a/body/stand.scad +++ b/body/stand.scad @@ -1,4 +1,5 @@ include <body.scad> +include <body_config.scad> include <helpers.scad> include <holes.scad> @@ -28,15 +29,120 @@ sws = side_wall_s; limit_switch_pcb_s = [40, 17, 1.6]; ls_pcb_s = limit_switch_pcb_s; +carriage_s = [80, 50, 32]; +// scanner coords +carriage_top_y_offset = 56; +carriage_z_pos = 240; + module profile_20x20x50() { - scale([1, 1, 2]) + scale([1, 1, 10]) translate([-0.06, -61, -10]) import("Modular profile 20x20 - 973094/files/Profilo_20x20_L50.stl"); } -// hot inserts for m4 are not needed -module m4_screw_hole(hole_side) +module calibration_template() +{ + zo = 5; + cs = carriage_s; + // TODO: create a global var for this + lhs = laser_holder_size(); + + top_s = [bshs[0] + bwt * 2, sws[1], wt * 2]; + cut_s = [main_frame_width_x, sws[1] * 2, wt + $tiny_padding * 2]; + + // decrease if there are some reflections + adjustment_z = -0; + + translate([0, carriage_z_pos + carriage_s[1] - 5, lhs[2] / 2]) + translate([0, top_s[1] / 2, cut_s[2] / 2 + bshs[2] + bwt + wt]) + // arranged: should switch from triangles to surface + // by rotating by 180 around scanner z axis + translate([0, 0, adjustment_z]) + union() + { + // centered + rotate([0, 180, 0]) + { + color("green", 0.3) + translate([-125, 0, zo]) + translate([85, -50, -5.8]) + rotate([-90, 0, 0]) + rotate([0, 90, 0]) + import("calibration_template.stl"); + } + + { + color("blue", 0.3) + translate([-125, 0, zo]) + translate([85, -54, -5.8]) + rotate([-90, 0, 0]) + rotate([0, 90, 0]) + import("calibration_template.stl"); + } + + color("blue") + { + x_offsets = [-30, 0, 30]; + y_offsets = [0, 4]; + + for (xo = x_offsets, yo = y_offsets) + { + translate([xo, -cs[1] + 0.45 + yo, 0]) + cylinder($fn = dToFn(m3), d = m3, h = 100, center = true); + } + } + } +} + +module calibration_template_holder() +{ + cs = carriage_s; + + calibration_template_holder_s = [cs[0], cs[1], 8]; + cths = calibration_template_holder_s; + + yo = cs[1] / 2 + carriage_z_pos; + //zo = -cs[2] / 2 - 20 + carriage_top_y_offset;// + cs[2]; + zo = - 20 + carriage_top_y_offset + cths[2] / 2; + + + difference() + { + translate([0, yo, zo]) + { + color("orange", 0.5) + cube(cths, center = true); + + top_cube_s = [cths[0], 13, 10.5]; + tcs = top_cube_s; + + color("red", 0.5) + translate([-tcs[0] / 2, -3, 4]) + cube(tcs); + } + + //color("red") + translate([0, 0, cths[2] / 2]) + carriage_screw_holes(); + } +} + +module calibration_template_holder_to_print() +{ + difference() + { + calibration_template_holder(); + calibration_template(); + } +} + + +// hot inserts for m4 are not needed; +// d_padding - diameter delta. can be set to 0 +// if cutting a thread with a screw is needed, and +// to 0.5 for just a screw hole +module m4_screw_hole(hole_side, d_padding = 0.5) { screw_hole( m = m4 + 0.2, @@ -79,6 +185,53 @@ ls_pcb_h_delta_long = 1.3; ls_pcb_h_delta_short = 1.1; ls_pcb_h_delta_btw_holes = 19; +// 56 +// w 80 d 50 h 32 + +module carriage_screw_holes(d_padding) +{ + cs = carriage_s; + yo = cs[1] / 2 + carriage_z_pos; + zo = -cs[2] / 2 - 20 + carriage_top_y_offset; + + // scanner coords + distance_between_holes_x = 60; + distance_between_holes_z = 30; + dbhx = distance_between_holes_x; + dbhz = distance_between_holes_z; + + translate([0, yo, zo]) + { + for (xo = [-dbhx / 2, dbhx / 2], yo = [-dbhz / 2, dbhz / 2]) + { + translate([xo, yo, cs[2] / 2]) + m4_screw_hole(hole_side_top, d_padding = d_padding); + } + } +} + +module carriage() +{ + +// carriage_top_z_offset + cs = carriage_s; + yo = cs[1] / 2 + carriage_z_pos; + zo = -cs[2] / 2 - 20 + carriage_top_y_offset; + + + difference() + { + translate([0, yo, zo]) + { + color("grey", 0.5) + cube(carriage_s, center = true); + } + + //color("red") + carriage_screw_holes(); + } +} + // limit switch designed by makerbot.com // instructions: www.bigtree-tech.com // license: GPLv3 @@ -137,7 +290,6 @@ module limit_switch() module base() { - // base color("orange", 0.4) { @@ -292,17 +444,6 @@ module scanner_holder() } } -*stand(); - -*union() -{ - base(); - translate([0, sws[1], -20 + sws[2]]) - limit_switch(); - base_side_screw_holes(); - stand_top_m3_holes(); -} - module scanner_holder_to_print() { difference() @@ -312,20 +453,49 @@ module scanner_holder_to_print() } } -*translate([0, -back_wall_offset + wt, -20 + sws[2] + bwt + wt]) -translate([0, 0, laser_holder_size()[2] / 2 + wt]) +module visualize_stand() { - scanner_side_hole_cutters(); + carriage(); - color("yellow", 0.2) - body_to_print(); -} + calibration_template(); + calibration_template_holder(); + *calibration_template_holder_to_print(); -//stand_top_m3_holes(); -//stand_top_m3_screw_holes(); + stand(); -color("grey", 0.6) -*base_to_print(); + union() + { + base(); + translate([0, sws[1], -20 + sws[2]]) + limit_switch(); + base_side_screw_holes(); + stand_top_m3_holes(); + } + + + + translate([0, -back_wall_offset + wt, -20 + sws[2] + bwt + wt]) + translate([0, 0, laser_holder_size()[2] / 2 + wt]) + { + scanner_side_hole_cutters(); + + color("yellow", 0.2) + body_to_print(); + color("green", 0.3) + + visualize_range(); + visualize_xz_range(); + + } + + //stand_top_m3_holes(); + //stand_top_m3_screw_holes(); + + color("grey", 0.6) + base_to_print(); + + //scanner_holder(); + scanner_holder_to_print(); +} -//scanner_holder(); -scanner_holder_to_print();
\ No newline at end of file +visualize_stand();
\ No newline at end of file |
