3D-printable Expansion Card Holder

Since we have a bunch of Expansion Card prototypes floating around, I made a simple Expansion Card holder to organize them on my desk. The attached .stl file is easy to 3D print on any home 3D printer or 3D printing service like Shapeways. You can also use OpenSCAD to modify the .scad file to extend it support to more or fewer cards.

expansion_card_holder.stl (110.0 KB) expansion_card_holder.scad (1.6 KB)


That’s awesome :grin: totally trying that.

openscad is very cool, hoping you release those for all your models.

1 Like

I wonder if we can make a lid and take all extension cards to go.

So, I did a little edit of the .scad file as a mini-project since I’ve been wanting to learn OpenSCAD for a while. I moved some variables around and created a new module for a top. It doesn’t have any latching mechanism right now, but I’ve got a staycation next week and besides playing Valheim won’t have much else to do so I’ll work on that (hopefully). My first print was something of a test, came up 2mm short for the top because I did my math wrong. These files have been fixed so the gap pictured (shouldn’t?) be there.

expansion_card_holder (edit).scad (2.4 KB)
expansion_card_holder (edit).stl (88.0 KB)


Stumbled on this thread by chance, but glad I did. 3D printed the holder and it turned out great! A straightforward minimalist option for DIYers, love it.

Hi @JP_Powers ,
I have used the “fixed” STL, but the gap still exists, it’s around 1mm.


That’s strange. I’ve re-rendered it and I’m attaching a new copy. However, before trying it, to maybe save you some time, I did redownload my earlier version, and checked the Z height in PrusaSlicer again. It shows as 26mm to me. Same as the re-rendered version attached here. I used my digital calibers to check the one I printed (photo below) and it also shows as 26mm.

The reason I’m suggesting this is it does look like the STL I uploaded is the same I printed, and mine is very accurate. I wonder if your slicer is configured incorrectly or your printer is not dimensionally accurate in the Z axis? I can’t imagine how it could be so far misconfigured or inaccurate, it’s clearly a large gap that I can’t explain otherwise, but it’s the only explanation I can think of assuming there isn’t some error else where, such as on my side. Could be the earlier upload isn’t right but my browser is caching it as my updated version or something.

Anyways, check the Z height of the original file in your slicer, measure your print if you can, and if they are not within the Z accuracy of your printer you may have something wrong, else check the updated version below and let me know.

expansion_card_holder (edit).stl (88.0 KB)

1 Like

It shows 26mm to me as well. Both in slicer and on my caliper’s screen for printed detail. The printer is really calibrated, sometimes I’m making money with commercial prints. :slight_smile:
There is one difference – I’m using Cura 4.8 instead of Prusa Slicer. But the printed detail outer geometry is correct – the same as calculated by Cura.
I have figured out the root cause. The difference in number of layers of the bottom and top( their thickness). I’ve set it to 1.2mm each.And it looks like Cura generates code that consumes this space from the inner space, raising the expansion card in its slot.
What are your settings for walls width and top/bottom thickness?

Aaahh, good ol’ Cura silliness. Welp. Luckily I saved a PrusaSlicer project file so I can refer back to my exact settings.

Nozzle: 0.4mm
Layer height: 0.2mm
Extrusion Width: 0.42mm first layer, 0.4mm top solid infill, 0.45mm all else
Perimeters: 3
Top Solid layers: 5
Bottom Solid layers: 4
Infill: 15% / Gyroid (not much empty space with 3 perimeters, infill percentage won’t really matter much)
Ironing enabled on all top surfaces (PrusaSlicer’s finish with ironing is fantastic)

It’s been ages since I’ve used Cura so I’m not comfy providing exact “Slic3r says X, Cura says Y” comparisons, but I think in Cura terms that’s 1.35mm walls, 0.8mm bottom, and 1mm tops.

Anyways, I’m guessing this means the bottom (@nrp’s original) and my top are both ending up with the “walls” of the model being too thick, so the inner dimensions, specifically what is “above” or “below” the expansion card, is smaller than it should be? Which would likely mean, and would be difficult to see, the plug cutouts in the bottom are not fully encompassing the expansion card’s USB C plug? If both the top and bottom are doing that, it’d explain the gap.

That’s strange, because the slicer should be focusing on generating accurate dimensions and forgoing the strict “do this many thing”, in this case thing being solid top/bottom layers. I know Cura is quirky, but it generally should be better than that… wonder if it’s a bug in the 4.8 version?

I don’t like telling people to change their slicers, I bet you have Cura dialed in and switching to PrusaSlicer could be a real hassle just for one print. Even if it’d just be for that one print, it could require a lot fiddling about. So, instead, if you already have OpenSCAD, you can just play with the wall variable, the 2 here:

usr_var = [
    2, // wall
    0.5, // gap, Adjust to make the cards tighter or looser
    7, // plug length

Just changing the 2 to another number will make all the “walls” of the object larger, which might work around Cura’s … I’m gonna say obstinance because that feels appropriate. Note, I’m calling it “walls” in quotes because it’s the same word Cura uses, but I’m using it a bit differently. You probably know that, so more for anyone that doesn’t who happens to be reading. It’ll make the whole thing larger, but it’ll be more likely to succeed. If it’d be too bulky, as an alternative, you can change a specific value in the math. Very end of the cube creation body of the top section, change the 24 to… 25 or 26 I guess:

        // Body of the top
        cube([ec[0]+usr_var[1]*2+usr_var[0]*2, (ec[2]+usr_var[1]*2+usr_var[0])*num_cards+usr_var[0], usr_var[0]+24]);

That should just make the top taller, which would work but might not help if the plugs aren’t fully in the plug cutouts. Not a huge deal, but it’ll rattle more.


Updated version is now available. It now has cutouts for 4 magnets on each part (8 total), chamfers for the edges to make it easier to open and hold, and I went through and redefined a number of variables and added appropriate comments so the OpenSCAD customizer window should provide some guidance and (hopefully) be very easy to use.

If you are looking to use the SCAD, ensure you get the Chamfer.scad file as well, which contains the Chamfer functions. It came from https://github.com/SebiTimeWaster/Chamfers-for-OpenSCAD/blob/master/Chamfer.scad

Chamfer.scad (8.1 KB)
expansion_card_holder w- magnets.scad (4.8 KB)

I used Gorilla Super Glue Brush & Nozzle, which has a brush just a touch too big, which left a some super glue residue around the top edges of my print, and a not so nice looking dried white surrounding the magnets. I just Sharpie’d the whole of card openings and their companion chamfers to cover it up and I actually like the end result.

It’s a bit bigger in the X and Y dimensions but not by as much as I feared when working with it in OpenSCAD.

@nrp Checking with you as the original is your work, are you ok with me publishing this on Thingiverse? Hoping to do this specifically so it can use their OpenSCAD web customizer to generate the STLs for people.


What kind of filament did you wind up using?

@nrp Thank you for posting this. Ordered one from Shapeways and it’s on the way.