mirror of
https://github.com/DJSundog/NopSCADlib.git
synced 2024-11-23 23:33:50 -05:00
181 lines
7.7 KiB
OpenSCAD
181 lines
7.7 KiB
OpenSCAD
//
|
|
// 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));
|
|
}
|