Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/mikroatx #2

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
1d414a2
motherboard: Adds support for Micro-ATX based boards
Nov 21, 2018
95c62d7
mini-itx.scad: Fixes broken variables renamed in motherboard.scad
Nov 21, 2018
5e6b1ae
micro-atx.scad: Adds new case-level file to generate micro-ATX based …
Nov 21, 2018
c054b2b
renames uatx holes to start with "Datum B" as indicated by the docume…
Nov 23, 2018
3114325
renames mobo_back_edge information to indicate mini-itx version
Nov 23, 2018
691ebdc
adds micro-atx motherboard_back_edge information for back panel IO cu…
Nov 24, 2018
2ea38ee
uatx: user micro atx back panel information for cutout placement
Nov 24, 2018
a6c7ac1
eyeball cpu-socket (and holes) position and use them for uatx board
Nov 24, 2018
088225f
microatx: clarify size to be precise 243.84mm by 243.84mm
Nov 25, 2018
620c03a
microATX: Fixes naming of PCIe naming an positioning
Nov 25, 2018
19760d4
gpu: fixes whitespace errors
Jan 6, 2019
7afc4bf
gpu: adds initial support for GTX970 with aftermarket "Accelero Mono …
Jan 6, 2019
f671430
heatsinks: adds "be quiet! Shadow Rock LP" cooler
Jan 9, 2019
cc74b04
gpu: introduces height into parameter list for dual_gpu()
Jan 13, 2019
05ffa05
gpu: adds GT730_1G(fanless) and necessary supporting elements
Jan 13, 2019
0c6b46e
gpu: minor cleanups
Jan 13, 2019
c1f396e
implements switchable GPU support.
Jan 15, 2019
6de371f
motherboard: deactivate the visualisation keepout and mounting hole m…
Jan 16, 2019
17ad088
updates mini-itx example (and README) incorporate gpu_selection mode
Jan 16, 2019
44e221f
gpu: adds quad-PCIe cutout to be used with micro-ATX
Jan 23, 2019
c83e9e6
uATX: use loop to cut the four(4) holes for PCIe cards to screw into
Jan 23, 2019
aa412ea
uATX: adds support for GPU choice to case generation
Jan 23, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,21 @@ If you happen to own the same components as I do (Noctua NH-L12s, Zotac 1080 Min
use the example stl files directly.

## Parameters to edit
In mini-itx.scad, you'll need to choose the power supply type (psu_type of "sfx", "sfx-l", or "flexatx), the CPU heatsink
(heatsink_type of "aio", "noctua_nh_l12s", "noctua_nh_u9s", "cryorig_c7", or create your own), and probably measure
your GPU if you don't happen to own the Zotac 1080 Mini like I do.
In mini-itx.scad, you'll need to choose
* the power supply type (psu_type) from: "sfx", "sfx-l", or "flexatx
* the CPU heatsink (heatsink_type) from: "aio", "noctua_nh_l12s", "noctua_nh_u9s", "cryorig_c7", "bequiet_shadowrock_lp", or create your own),
* your GPU (gpu_type) from: "zotac_1080_mini", "accelero_970", or "gt730_1g"
If you don't happen to own any of the parts mentioned before, you probably need to measure and input your own.

traditional(show_body = true, show_lid = false, show_internals = false, heatsink_type = "noctua_nh_l12s", psu_type = "sfx");
traditional(show_body = true, show_lid = false, show_internals = false, heatsink_type = "noctua_nh_l12s", psu_type = "sfx", gpu_type = "zotac_1080_mini");

Beyond that, there are a range of optional items you can adjust.
* The front fan with case_fan_size and case_fan_thickness
* Ventilation for the m2 slot on your motherboard with m2_location
* Extra clearance for your gpu power plug if needed with gpu_power_height
* Airflow clearance for your heatsink if you want more than the default 5mm with cpu_fan_clearance
* Thickness of all walls with wall in defaults.scad

## Printing
You'll need to print the body and the lid one at a time. Note that the case is likely going to push up to or past
the size limits of many consumer 3d printers. I've been printing them pretty successfully on a Prusa i3 MK3.
Expand Down
177 changes: 159 additions & 18 deletions gpu.scad
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,56 @@ pci_e_spacing = 47.29-26.97;
// Transform from pci e card datum to bracket datum
pci_e_to_bracket = [-64.13, 2.84-pcb_thickness, 100.36];

module dual_gpu(length) {
module dual_gpu( length, height) {
// Using the bottom center of the notch as the datum
color("Green", 1.0) {
difference() {
translate([pci_e_front_edge, -pcb_thickness/2, 0]) cube([length, pcb_thickness, 111.15]);
translate([pci_e_front_edge, -pcb_thickness/2, 0]) cube([length, pcb_thickness, height]);
translate([pci_e_front_edge-extra, -pcb_thickness/2-extra/2, 0-extra]) cube([-pci_e_front_edge+extra-12.15, pcb_thickness+extra, pci_e_cutout_height]);
translate([72.15, -pcb_thickness/2-extra/2, 0-extra]) cube([length-72.15+extra, pcb_thickness+extra, pci_e_cutout_height]);
}
}

translate(pci_e_to_bracket) {
pci_bracket();
translate([0, -pci_e_spacing, 0]) pci_bracket();
}
}

module single_bracket_gpu( length, height) {
// Using the bottom center of the notch as the datum
color("Green", 1.0) {
difference() {
translate([pci_e_front_edge, -pcb_thickness/2, 0]) cube([length, pcb_thickness, height]);
translate([pci_e_front_edge-extra, -pcb_thickness/2-extra/2, 0-extra]) cube([-pci_e_front_edge+extra-12.15, pcb_thickness+extra, pci_e_cutout_height]);
translate([72.15, -pcb_thickness/2-extra/2, 0-extra]) cube([length-72.15+extra, pcb_thickness+extra, pci_e_cutout_height]);
}
}

translate(pci_e_to_bracket) {
pci_bracket();
}
}

module quad_gpu_cutout() {
slot_extra = 0.1;

translate(pci_e_to_bracket) {
pci_bracket_cutout();
translate([0, -pci_e_spacing, 0]) pci_bracket_cutout();
translate([0, -pci_e_spacing*2, 0]) pci_bracket_cutout();
translate([0, -pci_e_spacing*3, 0]) pci_bracket_cutout();
// Handle the gap between the two brackets, typically one piece on dual slot GPUs
/* translate([-(11.43-5.08), -pci_e_spacing, 0]) cube([11.43, pci_e_spacing, 40]); */
/* translate([-(11.43-5.08), -pci_e_spacing*2, 0]) cube([11.43, pci_e_spacing, 40]); */
/* translate([-(11.43-5.08), -pci_e_spacing*3, 0]) cube([11.43, pci_e_spacing, 40]); */
}

}

module dual_gpu_cutout() {
slot_extra = 0.1;

translate(pci_e_to_bracket) {
pci_bracket_cutout();
translate([0, -pci_e_spacing, 0]) pci_bracket_cutout();
Expand All @@ -43,43 +74,55 @@ module dual_gpu_cutout() {
}
}

module single_bracket_gpu_cutout() {
slot_extra = 0.1;

translate(pci_e_to_bracket) {
pci_bracket_cutout();
}
}


zotac_1080_mini_pcb = [172.48, 110];
zotac_1080_thickness = 41.9;
zotac_1080_mini_length = 36+zotac_1080_mini_pcb[0]; // TODO: Needs measurement
zotac_1080_front_fan = 100;
zotac_1080_back_fan = 90;
zotac_1080_fan_thickness = 15;

zotac_1080_mini_size = [zotac_1080_mini_length, zotac_1080_mini_pcb[1], zotac_1080_thickness];

module zotac_1080_mini() {
// Brackets and PCB
dual_gpu(zotac_1080_mini_pcb[0]);
fan_thickness = 15;
dual_gpu(zotac_1080_mini_pcb[0], 111.15);



// Body
color("DimGray", 1.0) {
translate([pci_e_front_edge, -(zotac_1080_thickness-3)+fan_thickness, pci_e_cutout_height]) {
cube([zotac_1080_mini_length, zotac_1080_thickness-fan_thickness, zotac_1080_mini_pcb[1]]);
translate([pci_e_front_edge, -(zotac_1080_thickness-3)+zotac_1080_fan_thickness, pci_e_cutout_height]) {
cube([zotac_1080_mini_length, zotac_1080_thickness-zotac_1080_fan_thickness, zotac_1080_mini_pcb[1]]);
}
}

// Add the fans
translate([pci_e_front_edge, -(zotac_1080_thickness-3), pci_e_cutout_height+zotac_1080_mini_pcb[1]/2]) {
translate([zotac_1080_back_fan/2, 0, 0]) rotate([-90, 0, 0]) fan(zotac_1080_back_fan, fan_thickness, 9);
translate([zotac_1080_back_fan+zotac_1080_front_fan/2, 0, 0]) rotate([-90, 0, 0]) fan(zotac_1080_front_fan, fan_thickness, 8);

translate([zotac_1080_back_fan/2, 0, 0]) rotate([-90, 0, 0]) fan(zotac_1080_back_fan, zotac_1080_fan_thickness, 9);
translate([zotac_1080_back_fan+zotac_1080_front_fan/2, 0, 0]) rotate([-90, 0, 0]) fan(zotac_1080_front_fan, zotac_1080_fan_thickness, 8);
}
}

module zotac_1080_mini_cutout() {
dual_gpu_cutout();

// Side panel fan cutouts
translate([pci_e_front_edge+(zotac_1080_back_fan+zotac_1080_front_fan)/2, -(zotac_1080_thickness-3), pci_e_cutout_height+zotac_1080_mini_pcb[1]/2]) {
rotate([90, 0, 0]) {
vent_rectangular([zotac_1080_back_fan+zotac_1080_front_fan, zotac_1080_front_fan], 10, 2.0);
}
}

// Front panel cutout
translate([pci_e_front_edge+zotac_1080_mini_length, -(zotac_1080_thickness-3)/2+wall, pci_e_cutout_height+zotac_1080_mini_pcb[1]/2]) {
rotate([0, 90, 0]) {
Expand All @@ -88,5 +131,103 @@ module zotac_1080_mini_cutout() {
}
}

//zotac_1080_mini();
//% zotac_1080_mini_cutout();
//
accelero_970_pcb = [172.48, 110];
accelero_970_thickness = 40;
accelero_970_main_fan = 120;
accelero_fan_thickness = 20;

accelero_970_length = 36+accelero_970_pcb[0]; // TODO: Needs measurement
accelero_970_height = accelero_970_pcb[1] + 50;
accelero_970_depth = accelero_970_thickness + accelero_fan_thickness + 5;

accelero_970_size = [accelero_970_length, accelero_970_height, accelero_970_depth];

module accelero_970() {
// Brackets and PCB
dual_gpu(accelero_970_pcb[0], 111.15);



// Body
color("DimGray", 1.0) {
translate([pci_e_front_edge, -(accelero_970_thickness/2), pci_e_cutout_height]) {
union(){
translate([accelero_970_length-160, -accelero_970_thickness/2, 10]){
cube([138, accelero_970_thickness, 136]);
}
}
}
}

// Add the fan
translate([pci_e_front_edge, -(accelero_970_thickness/2), pci_e_cutout_height+accelero_970_pcb[1]/2]) {
translate([accelero_970_length-90, -accelero_970_thickness, 20]) rotate([-90, 0, 0]) fan(accelero_970_main_fan, accelero_fan_thickness, 9);
}
}

module accelero_970_cutout() {
dual_gpu_cutout();

// Side panel fan cutouts
translate([pci_e_front_edge+(accelero_970_main_fan), -(accelero_970_thickness)-40, pci_e_cutout_height+accelero_970_pcb[1]/2 + 20]) {
rotate([90, 0, 0]) {
vent_rectangular([accelero_970_main_fan, accelero_970_main_fan], 10, 2.0);
}
}
}

// sizes for GT730
gt730_1G_pcb = [114, 69];
gt730_1G_thickness = 33;
//gt730_1G_length = gt730_1G_pcb[0]; // TODO: Needs measurement
//gt730_1G_height = gt730_1G_pcb[1];
gt730_1G_depth = gt730_1G_thickness + 5;

gt730_1G_size = [gt730_1G_pcb[0], gt730_1G_pcb[1], gt730_1G_depth];

module gt730_1G() {
// Brackets and PCB
single_bracket_gpu(gt730_1G_pcb[0], gt730_1G_pcb[1]);

// Body
color("DimGray", 1.0) {
translate([pci_e_front_edge, -(gt730_1G_thickness/2), -gt730_1G_pcb[1]/2 ]) {
union(){
translate([73, gt730_1G_thickness/2, gt730_1G_pcb[1]+7]) {
rotate([90, 0, 0]) { heatsink([76, 55, gt730_1G_thickness], 3, 11); }
}
}
}
}
}

module gt730_1G_cutout() {
// @todo: clean this up
dual_gpu_cutout();
//single_bracket_gpu_cutout();
}



_gpus=[
["zotac_1080_mini", zotac_1080_mini_size],
["accelero_970", accelero_970_size],
//["gt730_1g", [gt730_1G_pcb[0], gt730_1G_pcb[1], gt730_1G_thickness+5]],
["gt730_1g", gt730_1G_size],
];

// Return the height of the GPU by name
function gpu_size(gpu) = _gpus[search([gpu], _gpus, 1, 0)[0]][1];

/************ place for testing the elements above ****************/

// zotac_1080_mini();
// %zotac_1080_mini_cutout();

// translate ([300, 0, 0]){
// accelero_970();
// %accelero_970_cutout();
// }

//gt730_1G();
40 changes: 34 additions & 6 deletions heatsink.scad
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ module cryorig_c7() {
}

noctua_nh_l12s_size = [146, 128, 70];

module noctua_nh_l12s() {
translate([noctua_nh_l12s_size[0]/2-66, 0, noctua_nh_l12s_size[2]-20]) heatsink([noctua_nh_l12s_size[0], noctua_nh_l12s_size[1], 20], 0, 80);
translate([noctua_nh_l12s_size[0]/2-66, 0, noctua_nh_l12s_size[2]-15-20]) fan(120, 15, 9);
Expand All @@ -50,13 +49,38 @@ module noctua_nh_l12s() {
}

noctua_nh_u9s_size = [95, 95, 125];

module noctua_nh_u9s() {
color("Gainsboro") {
translate([-noctua_nh_u9s_size[0]/2, -noctua_nh_u9s_size[1]/2, 0]) cube(noctua_nh_u9s_size);
}
}


bequiet_shadowrock_lp_size = [122, 134.21, 75.4];
module bequiet_shadowrock_lp() {
rotate([0,0,-90]){
// cpu-block
color("Gainsboro") {
translate([-20, -20, 0]) { cube([40, 40, 15]); }
}
// middle heatsink
translate([0, -10, 19.9]) {
heatsink([76, 76, 31.7-19.9], 0, 80);
}
//upper heatsink
translate([bequiet_shadowrock_lp_size[0]/2-66, 20, 31.7]) {
//rotate([0,0, 90])
heatsink([bequiet_shadowrock_lp_size[0], bequiet_shadowrock_lp_size[1], 50-31.7], 0, 80);
}

// fan
translate([bequiet_shadowrock_lp_size[0]/2-66, 20, 50]){
fan(120, 25, 9);
}
}
}


// Dimensions including stock fan
corsair_h60_size = [27+25, 152, 120];
corsair_h60_fan = [120, 25];
Expand All @@ -68,7 +92,7 @@ module corsair_h60() {
color("DarkSlateGray", 1.0) {
translate([fan_thickness, 0, 0]) {
cube([corsair_h60_size[0]-fan_thickness, corsair_h60_size[1], corsair_h60_size[2]]);

// Add placeholders for the tubes
tube_r = 6; // TODO: measure this
translate([0, corsair_h60_size[1]-tube_r, corsair_h60_size[2]/4]) {
Expand All @@ -77,7 +101,7 @@ module corsair_h60() {
}
}
}

translate([0, corsair_h60_size[1]/2-corsair_h60_fan_offset, corsair_h60_fan[0]/2]) rotate([0, 90, 0]) fan(corsair_h60_fan[0], fan_thickness, 7);
}

Expand All @@ -89,17 +113,20 @@ module heatsink_type(type) {
noctua_nh_l12s();
} else if (type == "noctua_nh_u9s") {
noctua_nh_u9s();
} else if (type == "bequiet_shadowrock_lp") {
bequiet_shadowrock_lp();
} else if (type == "aio") {
aio_pump();
} else {
echo("Unknown heatsink ", type);
}
}

_heatsinks=[
["cryorig_c7", cryorig_c7_size[2]],
_heatsinks=[
["cryorig_c7", cryorig_c7_size[2]],
["noctua_nh_l12s", noctua_nh_l12s_size[2]],
["noctua_nh_u9s", noctua_nh_u9s_size[2]],
["bequiet_shadowrock_lp", bequiet_shadowrock_lp_size[2]],
["aio", aio_pump_size[2]]
];

Expand All @@ -110,4 +137,5 @@ function heatsink_height(heatsink) = _heatsinks[search([heatsink], _heatsinks, 1

//cryorig_c7();
//noctua_nh_l12s();
//bequiet_shadowrock_lp();
//corsair_h60();
Loading