1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-01-17 05:28:14 +01:00
NopSCADlib/vitamins/green_terminal.scad
Chris 74293b6c22 Added axial diodes, radial transistors, discs and modules.
Verboard and perboard components get solder menisci added automatically.
Radial leads now made by bezier curves rather than straights and arcs.
2023-07-28 10:39:07 +01:00

183 lines
7.8 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>
use <../utils/pcb_utils.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
solder();
}
}
for(i = [0: ways - 1])
translate([0, i * pitch - width / 2 + pitch / 2])
single(in(skip, i));
}