summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--body/body.scad14
-rw-r--r--body/design.scad32
-rw-r--r--body/laser.scad26
-rw-r--r--body/stand.scad224
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