112 lines
2.5 KiB
OpenSCAD
112 lines
2.5 KiB
OpenSCAD
include <../helper/math.scad>
|
|
include <../misc/magnet.scad>
|
|
include <../helper/common.scad>
|
|
|
|
connectorTaperStartHeight = 2;
|
|
connectorRectWidth = 10;
|
|
connectorRectDepth = 10;
|
|
|
|
connectorTotalHeight = 5;
|
|
|
|
connectorRectPlugSlack = -0.1;
|
|
connectorRectSocketSlack = 0.1;
|
|
|
|
connectorSocketMagnetExtrudeHeight = 1;
|
|
|
|
module stackConnectorBase(rectSlack) {
|
|
|
|
_wSlacked = connectorRectWidth + rectSlack;
|
|
_dSlacked = connectorRectDepth + rectSlack;
|
|
|
|
module connRect() {
|
|
linear_extrude(height=eps)
|
|
square(size = [_wSlacked, _dSlacked]);
|
|
}
|
|
|
|
module connMagnetMount() {
|
|
linear_extrude(height=eps)
|
|
circle(r=magnetRSlacked);
|
|
}
|
|
|
|
hull() {
|
|
connRect();
|
|
|
|
translate(v=[0,0,connectorTaperStartHeight])
|
|
connRect();
|
|
}
|
|
|
|
hull() {
|
|
translate(v = [0, 0, connectorTaperStartHeight])
|
|
connRect();
|
|
|
|
translate(v=[_wSlacked/2, _dSlacked/2, connectorTotalHeight])
|
|
connMagnetMount();
|
|
}
|
|
}
|
|
|
|
module stackConnectorPlug() {
|
|
assert(magnetHSlacked > connectorSocketMagnetExtrudeHeight);
|
|
|
|
_wSlacked = connectorRectWidth + connectorRectPlugSlack;
|
|
_dSlacked = connectorRectDepth + connectorRectPlugSlack;
|
|
|
|
magnetLevelHeight = connectorTotalHeight - (magnetHSlacked - connectorSocketMagnetExtrudeHeight);
|
|
|
|
difference() {
|
|
|
|
intersection() {
|
|
stackConnectorBase(connectorRectPlugSlack);
|
|
cube(size=[_dSlacked, _wSlacked, magnetLevelHeight]);
|
|
}
|
|
|
|
translate(v = [_wSlacked/2, _dSlacked/2, magnetLevelHeight - magnetHSlacked])
|
|
cylinder(r = magnetRSlacked, h = magnetHSlacked);
|
|
|
|
}
|
|
}
|
|
|
|
module stackConnectorSocket_N() {
|
|
|
|
_wSlacked = connectorRectWidth + connectorRectSocketSlack;
|
|
_dSlacked = connectorRectDepth + connectorRectSocketSlack;
|
|
|
|
_bevelSlack = 0.5;
|
|
_bevelR = _wSlacked + _bevelSlack;
|
|
_bevelW = _dSlacked + _bevelSlack;
|
|
_bevelH = 0.5;
|
|
|
|
|
|
stackConnectorBase(connectorRectSocketSlack);
|
|
|
|
translate(v=[_wSlacked/2, _wSlacked/2, connectorTotalHeight - connectorSocketMagnetExtrudeHeight])
|
|
cylinder(r=magnetRSlacked, h=magnetHSlacked);
|
|
|
|
// bevel at the lip of the socket to guide the plug, as well as mitigate elephant foot during 3d printing
|
|
hull() {
|
|
translate(v=[0,0,_bevelH])
|
|
linear_extrude(height=eps)
|
|
square(size = [_wSlacked, _dSlacked]);
|
|
|
|
translate(v=[-_bevelSlack/2, -_bevelSlack/2, 0])
|
|
linear_extrude(height=eps)
|
|
square(size = [_bevelR, _bevelW]);
|
|
}
|
|
}
|
|
|
|
module test() {
|
|
difference() {
|
|
union() {
|
|
translate(v = [-2.5, -2.5, 0])
|
|
cube(size = [15, 15, 10]);
|
|
|
|
translate(v = [0, 0, 10])
|
|
stackConnectorPlug();
|
|
}
|
|
|
|
stackConnectorSocket_N();
|
|
}
|
|
}
|
|
|
|
*test();
|
|
|