FloppyEmuDiskIIEnclosure/scad/components/main.scad

202 lines
5.4 KiB
OpenSCAD

// Copyright 2022 Thorsten Brehm
// brehmt (at) gmail dot com
// Radius of the corners
Box_Corner_Radius = 3.0*ScalingFactor; // [0: 10]
// Box skin width
SKIN = 1.0; // [1: 0.1: 5]
/* [Hidden] */
// Width (X) of the box
BoxX_Width = 155.5*ScalingFactor; // [60: 145]
// Height (Y) of the box
BoxY_Height = 91*ScalingFactor; // [10: 100]
// Depth (Z) of the box
BoxZ_Depth = 219*ScalingFactor; // [10: 200]
// Width of the ventilation cut
VentilationWidth = 4*ScalingFactor;
VentilationYHeight = 30*ScalingFactor;
VentilationXLength = 15*ScalingFactor;
// Distance of the first ventilation cut from the rear
VentilationZOffset = 17*ScalingFactor;
// Distance between the ventilation cuts
VentilationZDistance = 9.2*ScalingFactor;
// Number of ventilation cuts
VentilationCount = 9;
// Top grooves
TopGrooveXWidth = 110*ScalingFactor;
TopGrooveZLength = 80*ScalingFactor;
TopGrooveYDepth = 2;//*ScalingFactor;
TopGrooveCornerRadius = 6*ScalingFactor;
// Rear wall
RearWallGap = 1.5;
RearWallCableGapHeight = 3;
RearWallCableGapWidth = 27+3; //26mm cable width
RearWallCableGapXOffset = 10+2*ScalingFactor;
RearWallZLedge = 17;
RearWallZOffset = 2.5;
// Strain Relief
CableStrainReliefYOffset = BoxY_Height-20; // distance from the top of the box
// Front panel
FrontPanelGap = 0.5;
FrontPanelZLedge = 10;
FrontPanelZOffset = 2;
// Distance of the gap at the front (from the left/right edge)
FrontGapX = 21;
FrontGapWidth = 0.8;
FrontGapY = FrontPanelZOffset+5;
// Screws
ScrewDiameter = 3;
ScrewPostDiameter = ScrewDiameter+2;
ScrewPostHeight = 5;
ScrewPostFillet = 2;
// Display
DisplayWidth = (LCD == "large") ? 55.01+2 : 30+2; // active area: 29.42
DisplayHeight = (LCD == "large") ? 27.5+2 : 15+3; // active area: 14.7
DisplayXDistance = 15*ScalingFactor; // distance from the left of the panel
DisplayYDistance = 3.5+9*ScalingFactor; // distance from the top of the panel
DisplayCornerRadius = 2;
DisplayPegXDistance = (LCD == "large") ? 72.0 : (31.0-0.2);
DisplayPegYDistance = (LCD == "large") ? 38.8 : 28.5;
DisplayPegYOffset = (LCD == "large") ? 2.64 : 2.25; // from the top. The display mounting ports are not centered, but have an offset (shifted towards the bottom).
// frame around the display opening
DisplayFrameZHeight = 0.5;
// Pegs to hold the display
DisplayPegHeight = 4+1;
DisplayPegDiameter = 3; // 3.5
// SDSlot
SDSlotWidth = 12.5; // 12
SDSlotHeight = 3;
SDSlotCorners = 1;
SDSlotXDistance = BoxX_Width/2-SDSlotWidth/2; // distance from the left of the panel
SDSlotYDistance = 10; // distance from the bottom of the panel to the bottom of the SD slot
// Square Buttons
ButtonYHeight = (ScalingFactor<1) ? 8.5 : 10;
ButtonXWidth = (ScalingFactor<1) ? 8.5 : 10;
ButonZDepth = SKIN*2+1.5;
ButtonCorners = 1;
ButtonLedgeWidth = 2-0.5;
ButtonPegDiameter = 3.5+0.2-0.1;
ButtonPegDepth = 2.5;
ButtonXOfs = 15*ScalingFactor; // distance from the right edge
ButtonYOfs = 9*ScalingFactor;//9*ScalingFactor; // distance from the top
ButtonRaster = 2.54; // 0.01"
ButtonXSpacing = ButtonRaster*5; // multiple of 2.54mm => allow micro switches to be soldered on prototype raster PCBs
ButtonYSpacing = ButtonRaster*5; // multiple of 2.54mm => allow micro switches to be soldered on prototype raster PCBs
ButtonScrewPostHeight = 9-0.5;
// LEDs
LedDiameter = (ScalingFactor<1) ? 3.4-0.1 : 5; // 3.4
LedSocketHeight = 1.5;
LedYDistance = (ScalingFactor<1) ? LedDiameter+3 : LedDiameter+3.5; // distance between the two LEDs
LedXOfs = (ScalingFactor<1) ? 22 : 20+LedDiameter/2; // distance from the left edge
LedYOfs = (ScalingFactor<1) ? 16 : 20;
// FloppyEmu PCB
PcbXWidth = 45-1;
PcbYHeight = 2;
PcbZDepth = 100.0;
PcbXOfs = -0.75+0.5; // from the center. SD Slot on FloppyEmu is not quite centered
PcbYOfs = SDSlotYDistance-PcbYHeight+1;
PcbZOfs = FrontPanelZOffset+SKIN+0.5;
PcbScrewDiameter = 3;
PcbScrewPostDiameter = PcbScrewDiameter+3;
PcbScrewDistance = 2.5; // distance from the PCB edges
include <baseLib.scad>;
include <top_and_bottom.scad>;
include <pcb.scad>;
include <buttons.scad>;
include <rear.scad>;
include <front.scad>;
module main()
{
if (part == "test")
{
intersection()
{
makeTop();
translate([-10,BoxY_Height-22,BoxZ_Depth-32]) cube([40, 40, 32]);
}
}
else
if (part == "button")
{
for (x = [0,1])
for (y = [0,1])
if ((x!=0)||(y!=0))
translate([x*ButtonXSpacing, y*ButtonYSpacing, -ButonZDepth]) button();
else
translate([x*ButtonXSpacing, y*ButtonYSpacing, -ButonZDepth]) resetButton();
translate([-15, 20, 0]) rotate([0,0,90]) makeCableStrainRelief();
translate([30, -15, 0]) makeRearPcbFeet();
}
else
if (part == "rear")
{
makeRear();
}
else
if (part == "front")
{
makeFront();
}
else
if (part == "top") {
makeTop();
}
else
if (part == "topBottom") {
makeTop();
translate([0, -ComponentSeparation, 0 ]) makeBottom();
}
else
if (part == "bottom") {
makeBottom();
}
else
if (part == "all") {
makeTop();
translate([0, -ComponentSeparation, 0 ]) makeBottom();
translate([0, 0, ComponentSeparation ]) makeRear();
translate([0, 0, -ComponentSeparation ]) makeFront();
}
else
if ((part == "noFront")||(part == "noRear")||(part=="noBottom")||(part=="frontBottom"))
{
if (part != "frontBottom") makeTop();
if (part != "noBottom") makeBottom();
if ((part != "noRear")&&(part != "frontBottom")) makeRear();
if (part != "noFront") makeFront();
}
else
{
// nothing!
}
if ((showPcb == "yes")&&(part != "button")) makePcb();
}
main();