mirror of
https://github.com/ThorstenBr/FloppyEmuDiskIIEnclosure.git
synced 2025-01-15 13:32:19 +00:00
219 lines
5.4 KiB
OpenSCAD
219 lines
5.4 KiB
OpenSCAD
// Copyright 2022 Thorsten Brehm
|
|
// brehmt (at) gmail dot com
|
|
|
|
// Enclosure for the Floppy Emu DB-19 Plug Adapter
|
|
|
|
// Which part do you want to see/generate?
|
|
PART = "topBottom"; // [topBottom: Both elements, bottom:Bottom element, top:Top element, test:--Test--, full:Full, mask:Show top mask, pcb:Show PCB, carving:Carved space]
|
|
|
|
/* [Hidden] */
|
|
|
|
// Adapter PCB
|
|
PcbWidthX = 46;
|
|
PcbHeightY = 2;
|
|
PcbDepthZ = 18;
|
|
|
|
// Box Header
|
|
BoxHeaderWidthX = 33.5;
|
|
BoxHeaderHeightY = 14;
|
|
BoxHeaderDepthZ = 11.5;
|
|
|
|
BoxHeaderPositonZ = PcbDepthZ-BoxHeaderDepthZ; // position from the front of the PCB
|
|
|
|
BoxHeaderPinHeightY = 2; // height of the pins on the PCB bottom side
|
|
|
|
// Cable
|
|
CableWidthX = 26;
|
|
CableHeightY = 1.0; // 1.5
|
|
|
|
CablePositionY = -CableHeightY/2;
|
|
|
|
// SUB-D Connector
|
|
SubDWidthX = 33;
|
|
SubDHeightY = 11.5;
|
|
SubDDepthZ = 13;
|
|
|
|
SubDPlateWidthX = 45;
|
|
SubDPlateHeightY = 13;
|
|
SubDPlateDepthZ = 1;
|
|
|
|
SubDPlatePositonZ = 5; // position from the front of the PCB
|
|
|
|
// rear
|
|
RearDepthZ = 6;
|
|
|
|
SKIN = 1.5;
|
|
|
|
SnapNotchX = 0.5;
|
|
SnapNotchY = 0.6;
|
|
|
|
// quality setting
|
|
QUALITY = "high";
|
|
|
|
include <components/baseLib.scad>
|
|
|
|
module imprint(x,y,z, txt, Font = "Liberation Sans:style=Bold")
|
|
{
|
|
FontSize = 3;
|
|
translate([x,y,z])
|
|
rotate([270,0,0])
|
|
{
|
|
linear_extrude(height = 0.4) { text(txt, font = Font, size = FontSize, halign="center", valign="center"); }
|
|
}
|
|
}
|
|
|
|
module makeFilamentSaver()
|
|
{
|
|
translate([-BoxHeaderWidthX/2,0,0]) cube([BoxHeaderWidthX, PcbHeightY+BoxHeaderHeightY, BoxHeaderPositonZ]);
|
|
translate([-PcbWidthX/2, PcbHeightY, SKIN*2]) cube([PcbWidthX-2*SKIN, BoxHeaderHeightY, PcbDepthZ-SKIN*2]);
|
|
|
|
// cable
|
|
translate([-(CableWidthX-2*SKIN)/2, -SubDHeightY/2, 0])
|
|
cube([CableWidthX-2*SKIN, PcbHeightY+BoxHeaderHeightY+SubDHeightY/2, BoxHeaderPositonZ+BoxHeaderDepthZ+RearDepthZ+SKIN]);
|
|
|
|
// Box header pins (below PCB)
|
|
translate([-(PcbWidthX-2*SKIN)/2, -SubDHeightY/2, SKIN]) cube([PcbWidthX-2*SKIN, SubDHeightY/2, BoxHeaderDepthZ+BoxHeaderPositonZ-SKIN]);
|
|
}
|
|
|
|
module makePcb()
|
|
{
|
|
// PCB
|
|
translate([-PcbWidthX/2,0,0]) cube([PcbWidthX, PcbHeightY, PcbDepthZ]);
|
|
|
|
// Box Header
|
|
translate([-BoxHeaderWidthX/2, PcbHeightY, BoxHeaderPositonZ]) cube([BoxHeaderWidthX, BoxHeaderHeightY, BoxHeaderDepthZ]);
|
|
|
|
// Box header pins (below PCB)
|
|
translate([-BoxHeaderWidthX/2, -BoxHeaderPinHeightY, BoxHeaderPositonZ]) cube([BoxHeaderWidthX, BoxHeaderPinHeightY, BoxHeaderDepthZ]);
|
|
|
|
// SUB-D connecor
|
|
translate([-SubDWidthX/2, -SubDHeightY/2, -SubDDepthZ]) cube([SubDWidthX, SubDHeightY, SubDDepthZ+SKIN]);
|
|
// SUB-D connector plate
|
|
translate([-SubDPlateWidthX/2, -SubDPlateHeightY/2, -SubDPlatePositonZ-SubDPlateDepthZ]) cube([SubDPlateWidthX, SubDPlateHeightY, SubDPlateDepthZ]);
|
|
|
|
// cable
|
|
translate([-CableWidthX/2, CablePositionY, BoxHeaderPositonZ+BoxHeaderDepthZ]) cube([CableWidthX, CableHeightY, 20]);
|
|
}
|
|
|
|
module makeBlock()
|
|
{
|
|
translate([-SKIN-PcbWidthX/2, -SKIN-SubDHeightY/2, -SubDPlatePositonZ])
|
|
rcube(size=[2*SKIN + PcbWidthX, 2*SKIN + SubDHeightY/2+PcbHeightY+BoxHeaderHeightY, SKIN*2 + PcbDepthZ+SubDPlatePositonZ],
|
|
radius=[2,2,2], center=false);
|
|
|
|
translate([-SKIN-CableWidthX/2, -SKIN-SubDHeightY/2, PcbDepthZ-1])
|
|
rcube(size=[2*SKIN + CableWidthX, 2*SKIN + SubDHeightY/2+PcbHeightY+BoxHeaderHeightY, SKIN*2 +RearDepthZ+1],
|
|
radius=[2,2,2], center=false);
|
|
}
|
|
|
|
module makeThing()
|
|
{
|
|
difference()
|
|
{
|
|
makeBlock();
|
|
union()
|
|
{
|
|
makePcb();
|
|
makeFilamentSaver();
|
|
}
|
|
}
|
|
imprint(0, -SubDHeightY/2, PcbDepthZ/2, "Floppy Emu DB-19");
|
|
imprint(0, -SubDHeightY/2, PcbDepthZ+RearDepthZ/2+SKIN, "TB 5/22");
|
|
}
|
|
|
|
module makeTopMask()
|
|
{
|
|
// cable
|
|
translate([-CableWidthX/2, CablePositionY+CableHeightY, BoxHeaderPositonZ+BoxHeaderDepthZ])
|
|
cube([CableWidthX, SKIN+BoxHeaderHeightY-CablePositionY+PcbHeightY-CableHeightY, 20]);
|
|
|
|
// PCB area
|
|
translate([-PcbWidthX/2, PcbHeightY, 0])
|
|
cube([PcbWidthX, SKIN+BoxHeaderHeightY, PcbDepthZ]);
|
|
|
|
// subd
|
|
translate([-(SubDWidthX+2*SKIN)/2, SubDHeightY/2, -SubDDepthZ])
|
|
cube([SubDWidthX+2*SKIN, SKIN+PcbHeightY+BoxHeaderHeightY-SubDHeightY/2, SubDDepthZ]);
|
|
|
|
// click notch (cable)
|
|
translate([-CableWidthX/2-SnapNotchX, BoxHeaderHeightY+SKIN+0.5, PcbDepthZ])
|
|
cube([CableWidthX+SnapNotchX*2, SnapNotchY, RearDepthZ+SKIN]);
|
|
translate([-CableWidthX/2-SnapNotchX, CablePositionY+CableHeightY, PcbDepthZ+RearDepthZ+SKIN/2+0.15])
|
|
cube([CableWidthX+SnapNotchX*2, BoxHeaderHeightY-CablePositionY+PcbHeightY-SKIN+0.5, SnapNotchY]);
|
|
|
|
// click notch (PCB)
|
|
translate([-PcbWidthX/2-SnapNotchX, BoxHeaderHeightY+SKIN+0.5, 0])
|
|
cube([PcbWidthX+SnapNotchX*2, SnapNotchY, PcbDepthZ]);
|
|
|
|
// click notch (subd)
|
|
translate([-(SubDWidthX+2*SKIN+SnapNotchX*2)/2, SubDHeightY/2, -SubDPlatePositonZ+SKIN])
|
|
cube([SubDWidthX+2*SKIN+SnapNotchX*2, PcbHeightY+BoxHeaderHeightY-SubDHeightY/2, SnapNotchY]);
|
|
|
|
}
|
|
|
|
module makeTop()
|
|
{
|
|
intersection()
|
|
{
|
|
makeThing();
|
|
makeTopMask();
|
|
}
|
|
}
|
|
|
|
module makeBottom()
|
|
{
|
|
difference()
|
|
{
|
|
makeThing();
|
|
makeTopMask();
|
|
}
|
|
}
|
|
|
|
module main()
|
|
{
|
|
if (PART == "test")
|
|
{
|
|
}
|
|
else
|
|
if (PART == "top")
|
|
{
|
|
makeTop();
|
|
}
|
|
else
|
|
if (PART == "bottom")
|
|
{
|
|
makeBottom();
|
|
}
|
|
else
|
|
if (PART == "full") {
|
|
makeThing();
|
|
}
|
|
else
|
|
if (PART == "mask")
|
|
{
|
|
makeTopMask();
|
|
}
|
|
else
|
|
if (PART == "topBottom")
|
|
{
|
|
translate([0, PcbHeightY+BoxHeaderHeightY+SKIN, 40]) rotate([180,180,0]) makeTop();
|
|
translate([0, SKIN+SubDHeightY/2, 0]) makeBottom();
|
|
}
|
|
else
|
|
if (PART == "carving")
|
|
{
|
|
makePcb();
|
|
makeFilamentSaver();
|
|
}
|
|
else
|
|
if (PART == "pcb") {
|
|
makePcb();
|
|
}
|
|
else
|
|
{
|
|
// nothing!
|
|
}
|
|
}
|
|
|
|
main();
|