/
Raspberry Pi 3 Backshield.scad
127 lines (102 loc) · 4.1 KB
/
Raspberry Pi 3 Backshield.scad
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
$fn = 30;
bracket_depth = 1;
board_length = 85.0;
board_width = 56.0;
board_clearance = 2.0;
board_depth = 1.25;
board_hole_spacing = 49.0;
board_hole_diameter = 2.5;
board_leg_overlap = board_width - board_hole_spacing;
board_leg_latch_depth = 1.0;
board_leg_latch_overlap = 0.75;
sd_cutout_diameter = 30;
sd_cutout_clearance = 4.0;
bracket_z_offset = board_clearance + board_depth + board_leg_latch_depth + board_hole_diameter / 2;
module generic_leg_latch(hole_diameter, hole_length, vertical_overlap, horizontal_overlap) {
// Leg
color("cyan")
translate([0, 0, vertical_overlap + hole_diameter / 2])
difference() {
cylinder(h = hole_length, d = hole_diameter);
translate([-horizontal_overlap / 2, -hole_diameter / 2, 0])
cube([horizontal_overlap, hole_diameter, hole_length]);
}
// Latch
translate([0, 0, hole_diameter / 2])
difference() {
union() {
color("yellow")
cylinder(h = vertical_overlap, d = hole_diameter);
translate([horizontal_overlap / 3, 0, 0])
color("red")
sphere(d = hole_diameter);
translate([-horizontal_overlap / 3, 0, 0])
color("red")
sphere(d = hole_diameter);
}
translate([-horizontal_overlap / 2, -hole_diameter / 2, -hole_diameter / 2])
cube([horizontal_overlap, hole_diameter, 2 * vertical_overlap + hole_diameter / 2]);
}
// Connector
translate([0, 0, hole_length + hole_diameter / 2 + vertical_overlap])
color("green")
sphere(d = hole_diameter);
}
module bracket() {
// Leg portion
translate([(board_width - board_hole_spacing) / 2, 0, bracket_z_offset])
cube([board_hole_spacing, board_leg_overlap, bracket_depth]);
// Board portion
translate([0, (board_width - board_hole_spacing) / 2, bracket_z_offset])
cube([board_hole_spacing + board_leg_overlap, board_length - board_leg_overlap, bracket_depth]);
// Back portion
translate([(board_width - board_hole_spacing) / 2, board_length - board_leg_overlap, bracket_z_offset])
cube([board_hole_spacing, board_leg_overlap, bracket_depth]);
translate([board_leg_overlap / 2, board_length - board_leg_overlap / 2, bracket_z_offset])
cylinder(h = bracket_depth, d = board_leg_overlap);
translate([board_width - board_leg_overlap / 2, board_length - board_leg_overlap / 2, bracket_z_offset])
cylinder(h = bracket_depth, d = board_leg_overlap);
}
module sd_cutout() {
translate([board_width / 2, -sd_cutout_diameter / 2 + sd_cutout_clearance, bracket_z_offset])
cylinder(h = bracket_depth, d = sd_cutout_diameter, $fn = 100);
}
module board_leg() {
cylinder(h = board_clearance + bracket_depth, d = board_leg_overlap);
}
module board_legs() {
translate([(board_width - board_hole_spacing) / 2, board_leg_overlap / 2, board_depth + board_leg_latch_depth + board_hole_diameter / 2])
board_leg();
translate([board_width - (board_width - board_hole_spacing) / 2, board_leg_overlap / 2, board_depth + board_leg_latch_depth + board_hole_diameter / 2])
board_leg();
}
module board_latch() {
generic_leg_latch(
hole_diameter = board_hole_diameter,
hole_length = board_depth,
vertical_overlap = board_leg_latch_depth,
horizontal_overlap = board_leg_latch_overlap
);
}
module board_latches() {
translate([(board_width - board_hole_spacing) / 2, board_leg_overlap / 2, 0])
board_latch();
translate([board_width - (board_width - board_hole_spacing) / 2, board_leg_overlap / 2, 0])
board_latch();
}
module build() {
union() {
difference() {
bracket();
sd_cutout();
}
board_legs();
board_latches();
}
}
module build_for_printing() {
translate([0, 0, board_clearance + board_leg_latch_depth + board_hole_diameter + bracket_depth])
rotate([180, 0, 0])
build();
}
build_for_printing();