mirror of
https://github.com/ThorstenBr/FloppyEmuDiskIIEnclosure.git
synced 2024-11-23 19:30:57 +00:00
Added enclosure for Floppy Emu's DB-19 plug adapter.
This commit is contained in:
parent
138ccbcd9c
commit
55035129df
24
README.md
24
README.md
@ -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
BIN
resources/PlugAdapter0.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 236 KiB |
BIN
resources/PlugAdapter1.jpg
Normal file
BIN
resources/PlugAdapter1.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 215 KiB |
BIN
resources/PlugAdapter2.jpg
Normal file
BIN
resources/PlugAdapter2.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 192 KiB |
BIN
resources/PlugAdapter3.jpg
Normal file
BIN
resources/PlugAdapter3.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 171 KiB |
@ -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
218
scad/plug_adapter.scad
Normal 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
7
stl/Large/README
Normal 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
8
stl/PlugAdapter/README
Normal 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).
|
42408
stl/PlugAdapter/plug_adapter.stl
Normal file
42408
stl/PlugAdapter/plug_adapter.stl
Normal file
File diff suppressed because it is too large
Load Diff
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user