Prototyping 3D Printable Fully Parametric Case

Discussion in 'Custom Cases & Projects' started by nrp, Sep 8, 2018.

  1. nrp

    nrp Trash Compacter
    Thread Starter

    #1 nrp, Sep 8, 2018
    Last edited: Oct 28, 2018
    This is now ready for the first release, with a fully customizable, 3d printable traditional shoebox layout. Other layouts may come later.

    The layout below (that I have personally printed and am using) is 7.15L with a Noctua NH-L12S, an SFX PSU, a 140mm intake fan, and a Zotac 1080 Mini. There are other power supply and cooling options to choose from (including an AIO). The case will automatically resize to match the chosen components. Everything else in the case is fully customizable too with more effort using OpenSCAD.

    Full instructions and files for download are up on GitHub. The license is 2-clause BSD (a common open source software license): https://github.com/eclecticc/ParametricCase


    [​IMG]

    [​IMG]

    Original Post

    [​IMG]
    I've kicked off a project to build a parametric 3D printed Mini-ITX case. The goal is to create a couple of architectures that are programmatic to the point that CPU cooler height and GPU length can be input as numbers, and a case to fit those perfectly is outputted.

    I'm holding a few constraints for this project:
    1. I want the entire case (minus side panels and some accessory pieces) to be printable in one print on the 3D printer I have. This is a Prusa i3 MK3 with a 250x210x210 print volume. Parameters larger than that can still be used if you have access to a bigger printer, but the architectures I'm picking are designed within these bounds.
    2. I'm architecting for the 250mm axis to be along the length of the video card. This again constrains the possible layouts, and you can adjust the parameters differently if you choose to.
    3. The PSU is going in the case with AC in. This means either FlexATX in the architecture shown above, or trading off against CPU cooler height in an architecture with it above the motherboard and using SFX or SFX-L.
    The image shown above is the one I'm most interested in trying first. It allows for separate zones for the CPU, GPU, and PSU, and since the case is parametric to fit the components, all three of them can take air intake directly from outside.

    I'm doing this using OpenSCAD, which is a fully parametric CAD program where you create models basically by writing code. As an example, here is a Mini-ITX motherboard with keepouts:
    Code:
    // Base PCB dimensions
    miniitx = [170, 170, 1.57];
    
    // Motherboard mounting hold diameter and offsets (relative to hole c)
    miniitx_hole = 3.96;
    miniitx_hole_c = [10.16, 6.35];
    miniitx_hole_f = [22.86, 157.48];
    miniitx_hole_h = [154.94, 0];
    miniitx_hole_j = [154.94, 157.48];
    extra = 1.0;
    
    // Keepouts on top and bottom of board
    miniitx_bottom_keepout = 0.25 * 25.4;
    
    module motherboard(keepouts) {
        area_a_keepout = [27, 15, 170-27-30, 170-15, 57];
        area_b_keepout = [0, 0, 170, 15, 16];
        area_c_keepout = [170-30, 15, 30, 170-15, 38];
        area_d_keepout = [0, 15, 27, 170-15, 39];
     
        color("Green", 1.0) {
            difference() {
                cube(miniitx);
                translate([miniitx_hole_c[0], miniitx_hole_c[1], -extra/2]) {
                    cylinder(r = miniitx_hole/2, h = miniitx[2]+extra);
                    for (hole = [miniitx_hole_f, miniitx_hole_h, miniitx_hole_j]) {
                        translate([hole[0], hole[1], 0]) cylinder(r = miniitx_hole/2, h = miniitx[2]+extra);
                    }
                }
            }
        }
        color("GreenYellow", 0.25) {
            if (keepouts == true) {
                translate([0, 0, -miniitx_bottom_keepout]) cube([miniitx[0], miniitx[1], miniitx_bottom_keepout]);
          
                for (keepout = [area_a_keepout, area_b_keepout, area_c_keepout, area_d_keepout]) {
                    translate([keepout[0], keepout[1], miniitx[2]]) {
                        cube([keepout[2], keepout[3], keepout[4]]);
                    }
                }
            }
        }
    }
     
  2. nrp

    nrp Trash Compacter
    Thread Starter

    A progress update with correct dimensions on the GPU. Most of the effort went into parametric modeling of the PCI-e bracket. Also, you can't really see it in this view, but the heatsink fins are also parametrically generated.
    [​IMG]
     
    Biowarejak likes this.
  3. duke00

    duke00 Average Stuffer

    Rotate the psu 90degree on the left side and use an 92mm tower cooler and an front fan. This should be so much better airflow.
     
    Biowarejak and nrp like this.
  4. nrp

    nrp Trash Compacter
    Thread Starter

    I played around with this a bit. I'm not sure there are 92mm tower coolers narrow enough to fit unless I push the PSU another 12mm or so past the edge of the motherboard.
     
    Biowarejak likes this.
  5. Biowarejak

    Biowarejak Maker of Awesome | User 1615
    Silver Supporter

    I like this idea, I think there was a similar project in the past but I'm not certain how far it got :)
     
  6. nrp

    nrp Trash Compacter
    Thread Starter

    [​IMG]

    I'm not getting much time to work on this, but starting to rough out parts of the actual case around the motherboard.
     
    Soul_Est and Biowarejak like this.
  7. nrp

    nrp Trash Compacter
    Thread Starter

    [​IMG]
    Starting to build actual structure. The goal is to get the right parameters first, then account for cooling and wire routing, then make it assemble-able, and lastly make it look good.
     
    Soul_Est and Biowarejak like this.
  8. Windfall

    Windfall King of Cable Management

    So you program the model? Interesting....
     
    Biowarejak likes this.
  9. nrp

    nrp Trash Compacter
    Thread Starter

    Yep, the model shown in my last screenshot was about 350 lines of code.
     
    Soul_Est likes this.
  10. NateDawg72

    NateDawg72 SFF Lingo Aficionado

    Ah I missed that it was OpenSCAD the first time I glanced through this thread! That makes this all much more interesting
     
    Soul_Est and Biowarejak like this.
  11. CC Ricers

    CC Ricers SFF Guru
    Silver Supporter

    As a programmer this software looks interesting to me. At least I hope I am able to do boolean shape operations much more painlessly than Sketchup Make (which is lacking in the free version).
     
    Soul_Est and Biowarejak like this.
  12. nrp

    nrp Trash Compacter
    Thread Starter

    [​IMG]
    Now up to about 450 lines of code with all 6 sides in place.

    I thought it would be neat to automatically generate the case volume and emboss it into one of the sides. Right now I have it at 6.4L for a Mini-ITX spec compliant traditional layout with a Zotac 1080 Mini, though I'll probably need to grow it a bit to account for wiring and assembly.
     
    Soul_Est, el01 and Biowarejak like this.
  13. nrp

    nrp Trash Compacter
    Thread Starter

    Also, right now my plan is to print this thing as a "bucket" with the four sides and the bottom as one part and just the top removeable. This leverages the advantages of 3D printing vs what makes sense with sheet metal.
     
    Soul_Est, el01 and Biowarejak like this.
  14. nrp

    nrp Trash Compacter
    Thread Starter

    As an example of why parametric CAD is great, you can change one number and go from a 120mm intake fan to a 92mm intake fan:
    [​IMG]
    [​IMG]
     
    Solo and Biowarejak like this.
  15. Biowarejak

    Biowarejak Maker of Awesome | User 1615
    Silver Supporter

    Okay, yeah, I'm kinda sold on the idea of that. :)
     
    el01 likes this.
  16. el01

    el01 King of Cable Management

    I think that modular side panels would be great and more sustainable, since if you fail one part of the printing, everything goes downhill. Also, it would be easier to add fan holes. Finally, it would make the case more modular and more adaptable. Just my two cents.
     
    Biowarejak likes this.
  17. nrp

    nrp Trash Compacter
    Thread Starter

    That is true, and probably something I'll do at a later stage. Designing this case for modular assembly will end up adding a decent amount of overall volume though, so I'm going to try to go the bucket route first. I've done 24+ hour prints, so I'm not worried about that. The fan grids will be challenging though. Especially the giant one for the GPU:
    [​IMG]
     
    el01 and Biowarejak like this.
  18. el01

    el01 King of Cable Management

    Or, you could ask users to buy a tube of superglue and some duct tape ;)
     
    Biowarejak likes this.
  19. nrp

    nrp Trash Compacter
    Thread Starter

    [​IMG]

    It doesn't look like there are a lot of great options for FlexATX PSUs out there, so I'm also putting together an option that can take an SFX or SFX-L PSU. This results in insufficient height for a conventional CPU cooler, but a 120mm AIO fits really well (with some added length to the case).
     
  20. nrp

    nrp Trash Compacter
    Thread Starter

    The model is now basically fully built out as parametric. I can specify the heatsink and power supply type and the case is automatically generated to the right size to fit the largest component dimensions:
    Code:
    traditional(show_internals = true, heatsink_type = "noctua_nh_l12s", psu_type = "flexatx");
    //traditional(show_internals = true, heatsink_type = "aio", psu_type = "sfx");
    [​IMG]
    [​IMG]