forked from nophead/NopSCADlib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
green_terminal.scad
180 lines (157 loc) · 7.74 KB
/
green_terminal.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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
//
// NopSCADlib Copyright Chris Palmer 2018
// nop.head@gmail.com
// hydraraptor.blogspot.com
//
// This file is part of NopSCADlib.
//
// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
// GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
//
//! Parametric green terminal blocks
//
include <../utils/core/core.scad>
use <../utils/tube.scad>
function gt_pitch(type) = type[1]; //! Pitch between terminals
function gt_depth(type) = type[2]; //! Total front to back depth
function gt_height(type) = type[3]; //! Height of the flat top
function gt_top(type) = type[4]; //! Depth at the top
function gt_front_height(type) = type[5]; //! Height at the front
function gt_front_depth(type) = type[6]; //! Front ledge depth
function gt_back_height(type) = type[7]; //! Height at the back
function gt_back_depth(type) = type[8]; //! Back ledge depth
function gt_screw_r(type) = type[9]; //! Screw head radius
function gt_front_t(type) = type[10]; //! Thickness of frame around the front aperture
function gt_box_w(type) = type[11]; //! Width inside the cable entry box
function gt_box_h(type) = type[12]; //! Height of the cable entry box
function gt_box_setback(type) = type[13]; //! How far the contact box is set back from the front
function gt_y_offset(type) = type[14]; //! Offset of the pins from centre of the depth
function gt_y_offset2(type) = type[15]; //! Offset of the pins from the screws
function gt_tube_h(type) = type[16]; //! Height of optional tubes around the screws
module green_terminal(type, ways, skip = [], colour = "lime") { //! Draw green terminal blocks, skip can be used to remove pins.
pitch = gt_pitch(type);
imperial = str(pitch / inch(1));
vitamin(str("green_terminal(", type[0], ", ", ways, "): Terminal block ", ways, " way ", len(imperial) < 5 ? str(pitch / inch(1), "\"") : str(pitch, "mm")));
width = ways * pitch;
depth = gt_depth(type);
height = gt_height(type);
ledge_height = gt_front_height(type);
ledge_depth = gt_front_depth(type);
top = gt_top(type);
back = gt_back_height(type);
back_ledge = gt_back_depth(type);
tube_h = gt_tube_h(type);
module single(skip = false) {
screw_r = gt_screw_r(type);
box_w1 = pitch - 2 * gt_front_t(type);
box_h1 = ledge_height - 2 * gt_front_t(type);
box_w2 = gt_box_w(type);
box_h2 = gt_box_h(type);
y = gt_y_offset(type);
y2 = gt_y_offset2(type);
box_front = y + depth / 2 - gt_box_setback(type);
box_back = y - depth / 2 + 1;
module horizontal_section()
difference() {
translate([y, 0])
square([depth, pitch], center = true);
translate([y + 1, 0])
square([depth, box_w2], center = true);
translate([y + depth / 2, 0])
hull() {
square([1, box_w1], center = true);
square([4, box_w2], center = true);
}
}
color(colour) {
rotate([90, 0, 0])
linear_extrude(pitch, center = true, convexity = 5)
polygon(points = [ // Vertical section
[y + depth / 2, 0],
[y + depth / 2, ledge_height / 2 - box_h1 / 2],
[y + depth / 2 - 0.5, ledge_height / 2 - box_h1 / 2],
[box_front, ledge_height / 2 - box_h2 / 2],
[box_back, ledge_height / 2 - box_h2 / 2],
[box_back, ledge_height / 2 + box_h2 / 2],
[box_front, ledge_height / 2 + box_h2 / 2],
[y + depth / 2 - 0.5, ledge_height / 2 + box_h1 / 2],
[y + depth / 2, ledge_height / 2 + box_h1 / 2],
[y + depth / 2, ledge_height],
[y + depth / 2 - ledge_depth, ledge_height],
[y2 + top / 2, height],
[y2 + screw_r + eps, height],
[y2 + screw_r + eps, ledge_height / 2 + box_h2 / 2],
[y2 - screw_r - eps, ledge_height / 2 + box_h2 / 2],
[y2 - screw_r - eps, height],
[y2 -top / 2, height],
[y - depth / 2 + back_ledge, back],
[y - depth / 2, back],
[y - depth / 2, 0],
]);
translate([y2, 0, ledge_height / 2 + box_h2 / 2]) // Screw socket
linear_extrude(height - ledge_height / 2 - box_h2 / 2)
difference() {
square([screw_r * 2 + 0.1, pitch], center = true);
circle(screw_r);
}
linear_extrude(ledge_height)
intersection() {
horizontal_section();
translate([0, -5])
square([10, 10]);
}
linear_extrude(back)
intersection() {
horizontal_section();
translate([-10, -5])
square([10, 10]);
}
if(tube_h)
translate([y2, 0, height])
linear_extrude(tube_h - height)
intersection() {
ring(or = top / 2, ir = screw_r);
square([10, pitch], center = true);
}
}
if(!skip)
color("silver") {
slot_depth = 1;
screw_top = height - 0.5;
pin_l = 3.3;
translate([y2, 0]) {
translate_z(screw_top - 2 * slot_depth) // screw head
cylinder(r = screw_r, h = slot_depth);
translate_z(screw_top - slot_depth) // screw head
linear_extrude(slot_depth)
difference() {
circle(screw_r);
square([10, screw_r / 4], center = true);
}
}
translate([box_back, 0, ledge_height / 2]) {
rotate([0, 90, 0])
linear_extrude(box_front - box_back)
difference() {
square([box_h2, box_w2], center = true);
square([box_h2 - 0.1, box_w2 - 0.1], center = true);
}
cube([1, box_w2, box_h2], center = true); // terminal back
}
translate_z(-pin_l / 2)
cube([0.44, 0.75, pin_l], center = true); // pin
}
}
for(i = [0: ways - 1])
translate([0, i * pitch - width / 2 + pitch / 2])
single(in(skip, i));
}