summaryrefslogtreecommitdiff
path: root/body/veye_imx287.scad
blob: 0b89873a93abd61ee55ff2e2daa7c938fdae8c78 (plain)
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();