diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2026-01-07 02:09:00 +0100 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2026-01-07 02:09:00 +0100 |
| commit | 8afef3bc72c8b73244cb5fe083e16fc3d9066fa6 (patch) | |
| tree | 1af5b753786a33f1177f22602e335e5c99e05f15 /body/veye_imx287.scad | |
| parent | e69aa61989896a6dfd65acb7753377eb69630203 (diff) | |
add cam pcbs, laser and laser holder, updated m12 lense holder
Diffstat (limited to 'body/veye_imx287.scad')
| -rw-r--r-- | body/veye_imx287.scad | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/body/veye_imx287.scad b/body/veye_imx287.scad new file mode 100644 index 0000000..c9f0f70 --- /dev/null +++ b/body/veye_imx287.scad @@ -0,0 +1,104 @@ +include <design.scad> +include <helpers.scad> + +veye_imx287_pcb_w = 29; +veye_imx287_pcb_h = 29; +veye_imx287_pcb_thickness = 1.6; +veye_imx287_pcb_stack_h = 11; +imx287_thickness = 1.3; + +module veye_imx287_wo_holes() +{ + pcb_w = veye_imx287_pcb_w; + pcb_h = veye_imx287_pcb_h; + pcb_stack_h = veye_imx287_pcb_stack_h; + + // connector size + conn_w = 23; + conn_h = 8; + conn_d = 19; + + translate([0, -pcb_stack_h / 2, 0]) + cube([pcb_w, pcb_stack_h, pcb_h], center = true); + + translate([0, -conn_d / 2 - pcb_stack_h, -conn_h / 2 + pcb_h / 2]) + cube([conn_w, conn_d, conn_h], center = true); +} + +module veye_imx287() +{ + hole_d = 2.05; + center_to_hole_dist = 12.5; + pcb_stack_h = veye_imx287_pcb_stack_h; + + difference() + { + veye_imx287_wo_holes(); + union() + for (x_mult = [-1, 1], z_mult = [-1, 1]) + { + dx = center_to_hole_dist * x_mult; + dy = $tiny_padding; + dz = center_to_hole_dist * z_mult; + + translate([dx, dy, dz]) + rotate([90, 0, 0]) + cylinder($fn = diameterToFn(hole_d), d = hole_d, h = pcb_stack_h + $tiny_padding * 2); + } + } +} + +module veye_imx287_stl_front() +{ + pcb_w = veye_imx287_pcb_w; + pcb_h = veye_imx287_pcb_h; + + rotate([90, 0, 0]) + translate([-pcb_w / 2, -pcb_h / 2, veye_imx287_pcb_thickness]) + import("PCB-RAW-IMX287-V11-0105-3D.stl"); +} + +module veye_imx287_stl_back(with_connector = true) +{ + pcb_w = veye_imx287_pcb_w; + pcb_h = veye_imx287_pcb_h; + + rotate([90, 90, 0]) + translate([-pcb_w / 2, -pcb_h / 2, -veye_imx287_pcb_thickness]) + // fix not-centered source model + //rotate([0, 0, 90]) + translate([-50, 121 + pcb_h]) + import("ADP-MV1-STEP.stl"); + + if (with_connector) + { + // connector size + conn_w = 23; + conn_h = 8; + conn_d = 19; + + // a bit of hardcode for connector + cyl_d = 6; + cyl_z_offset = -2; + + translate([0, -conn_d + cyl_d / 2, veye_imx287_pcb_h / 2 - cyl_d / 2 + cyl_z_offset]) + rotate([0, 90, 0]) + cylinder($fn = diameterToFn(cyl_d), d = cyl_d, h = conn_w, center = true); + } +} + +*#veye_imx287(); + +// centered in senser center +module veye_imx287_natural() +{ + translate([0, -imx287_thickness, 0]) + union() + { + veye_imx287_stl_front(); + translate([0, -veye_imx287_pcb_stack_h, 0]) + veye_imx287_stl_back(); + } +} + +veye_imx287_natural();
\ No newline at end of file |
