Added enclosure for Floppy Emu's DB-19 plug adapter.

This commit is contained in:
ThorstenB 2022-05-22 10:33:01 +02:00
parent 138ccbcd9c
commit 55035129df
12 changed files with 42681 additions and 3 deletions

View File

@ -1,6 +1,8 @@
# FloppyEmu Disk II Enclosure
This project contains OpenSCAD files, STL files, stickers and KiCad PCB to create a 3D-printed custom enclosure for the [Big Mess of Wires - FloppyEmu](https://www.bigmessowires.com/floppy-emu/) - an SD-card based disk drive emulator for the Apple II computer. The custom enclosure is a look-alike of the historic "Disk II" drive, Apple's first and hugely successful original disk drive for the Apple II, introduced in 1978.
As a bonus, this project also contains a housing for the Floppy Emu DB-19 plug adapter - a separate little 3D-print to protect the adapter (see "Bonus" section below).
![Final1](/resources/Final1.jpg?raw=true)
![Final2](/resources/Final2.jpg?raw=true)
@ -158,5 +160,25 @@ But remember: it's not complete... without rubber feet... :)
Done! :)
And btw, check the [sticker](/sticker/) folder for a collection of stickers to decorate your device.
## Stickers
By the way, check the [sticker](/sticker/) folder for a collection of stickers to decorate your device.
Several variants of the rear sticker are provided.
The designs are also available as GIMP image files (.xcf), so you can adapt the text to your needs.
## Bonus: Floppy Emu DB-19 adapter housing
The Floppy Emu DB-19 adapter is provided as a bare PCB only. It is usually connected to the back of your Apple II and rarely touched. However, you should still be careful with the adapter since the pins carry the +5V rail and also the +/- 12V rails. Since Disk II cable has the +/-12V rails connected to pins which are directly next to disk control and read/write signals (TTL/5V logic). A shortcut between these pins could easily damage the disk controller, the Apple II, or FloppyEmu (or all of them):
![PlugAdapter0](/resources/PlugAdapter0.jpg?raw=true)
The 3D-printed plug adapter housing provides proper protection for the adapter. The adapter PCB slides right into the bottom part of the housing:
![PlugAdapter1](/resources/PlugAdapter1.jpg?raw=true)
The top is printed with some notches, so it snaps right into place - and firmly holds the adapter PCB/plug:
![PlugAdapter2](/resources/PlugAdapter2.jpg?raw=true)
![PlugAdapter3](/resources/PlugAdapter3.jpg?raw=true)
The result is a fairly bulky plug, but that's due to the clunky nature of the "_PCB-box header-header plug-ribbon cable_" assembly.

BIN
resources/PlugAdapter0.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
resources/PlugAdapter1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

BIN
resources/PlugAdapter2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

BIN
resources/PlugAdapter3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

View File

@ -55,7 +55,7 @@ module rcube(size=[30, 20, 10], radius=[3, 2, 1], center=true)
y * ( size[1] - 2*radius[1]),
z * ( size[2] - 2*radius[2])])
scale([radius[0], radius[1], radius[2]])
if (quality == "high") sphere(1.0,$fn=4*4*2); else sphere(1.0,$fn=4);
if (QUALITY == "high") sphere(1.0,$fn=4*4*2); else sphere(1.0,$fn=4);
}
}
}

218
scad/plug_adapter.scad Normal file
View File

@ -0,0 +1,218 @@
// 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();

7
stl/Large/README Normal file
View File

@ -0,0 +1,7 @@
This folder contains the full-sized variant of the FloppyEmu Disk II enclosure. It's at 1:1 scale of the original Disk II.
The full-sized box should be used with a 5mm LED and a custom 2.42" LCD display (128x64 pixels, SSD1309).
If you want to use the original 1.7" LCD of FloppyEmu then it's recommended to use the small (60%) box.
TBD: The 1:1 scaled design is currently untested. Hence, STL files are not yet provided. You could still generate the
full-scaled STL by using the SCAD files (OpenSCAD). However, the full-scaled variant of the design will most certainly
still require tweaking. Otherwise come back in a few months or so, to check on the status of the full-scaled variant...

8
stl/PlugAdapter/README Normal file
View File

@ -0,0 +1,8 @@
Housing for Floppy Emu's DB-19 plug adapter.
Hints for printing:
* The models should be printed with their flat side facing downwards.
* Prints without supports.
* There are some bulky volumes to firmly hold the plug. I used Cura's stock infill setting (20%).
* The design printed fine with an Ender 3v2 printer, sliced with Ultimaker Cura using stock settings.
* Priting duration is about 2:10 hours (with Ender 3v2).

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,18 @@
This folder contains the small sized variant of the FloppyEmu Disk II enclosure. It's 60% of the size of the original Disk II.
It's just big enough to hold the FloppyEmu PCB.
The front panel holds the FloppyEmu's orginal LCD, a single 3mm LED (drive status) and the button panel.
The front panel holds the FloppyEmu's orginal 1.7" LCD, a single 3mm LED (drive status) and the button panel.
Hints for printing:
* The models should be printed with their flat side facing downwards.
* Preferably use white or light gray filament for the top shell, base plate, and for the rear panel.
* Use black filament for the front panel and the buttons.
* The models are optimized to reduce 3D "supports", however, the top shell and the front panel still need "supports" to be enabled when printing.
* The buttons/brackets and base-plate print without "supports".
* The infill setting doesn't matter (design does not contain any large filled volumes).
* The design printed fine with an Ender 3v2 printer, sliced with Ultimaker Cura using stock settings.
Printing Duration (estimates for an Ender 3v2):
* Top shell: about 7 hours.
* Front and rear panel: about 1:30 hours.
* Buttons and mounting brackets: about 30 minutes.