1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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();
|