added washer to accessory tool, added holes to bottom of rack case for feet, updated readme.md

This commit is contained in:
Edward Kisiel
2025-06-01 17:40:00 -04:00
parent 60ca7f47bb
commit 4f42b9a3db
4 changed files with 99 additions and 28 deletions

View File

@@ -2319,7 +2319,21 @@ This area covers specific build notes for specific cases. Hardware used or othe
The panel_nas design can be CNC cut or 3D printed. By changing the top and bottom standoff type to "none" in the *SBC Standoff Global Settings* tabs respectively, only a hole is generated for CNC cutting support. Panels can be exported in DXF or SVG by selecting the *part" view under the *view* tab, then the indivual part and select the *section part* checkbox. After the projection has been generated render it by pressing F7 or by selecting render from the user interface. Exported DXF and SVG file formats are available under the File->Export menu. The panel_nas design can be CNC cut or 3D printed. By changing the top and bottom standoff type to "none" in the *SBC Standoff Global Settings* tabs respectively, only a hole is generated for CNC cutting support. Panels can be exported in DXF or SVG by selecting the *part" view under the *view* tab, then the indivual part and select the *section part* checkbox. After the projection has been generated render it by pressing F7 or by selecting render from the user interface. Exported DXF and SVG file formats are available under the File->Export menu.
### rack Case Design ### rack Case Design
This case is divided into 3 pieces for the 19" cases and 2 pieces for the 10" cases. They can be selected in the *part* view for STL export under the *view* tab by selecting the left, bottom or right individual part. The peices are held together using M2x8mm screws and nuts. The 10 inch cases requires 5 sets of screws and nuts and the 19" rack case takes 10 sets. This case is divided into 3 pieces for the 19" cases and 2 pieces for the 10" cases. They can be selected in the *part* view for STL export under the *view* tab by selecting the left, bottom or right individual part. The peices are held together using M2x8mm screws and nuts.
10” rack case Qty 5 - M2x8mm screws cap or countersunk with nuts.
19” rack case Qty 10 - M2x8mm screws cap or countersunk with nuts.
Appropriate fasteners for all SBC.
For a better fit, prep the edges of the case pieces prior to assembly. Use sand paper or a file to remove any imperfections and true the edge.
Using 2mm thickness for the floor and walls provides for an adequate case in most enclosed applications but a 3mm floor or better is recommended for removable and open front cases.
There are 3mm holes on the left, center and right, both front and rear, to use for feet when deployed as a single bench top case. If using the rack stands, the holes can be used to mount an external standoff to support the rear of a heavy case.
All case bodies can be printed without the use of support. Only the removable bay tray needs support for printing. SBC placement so as to bisect a SBC opening with a case divide, will require print supports.
Varies accessories (1u rack stand, grommets, fan covers, 2.5” drive holder, washers, etc) are available from sbccb_accessory_tool.scad. The table top rack stand is comprised of two interchangeable brackets that can hold 1U-4U rack cases.
## Accuracy ## Accuracy

View File

@@ -21,20 +21,20 @@
/* /*
NAME: fan_cover NAME: m_insert
DESCRIPTION: creates fan covers for fan openings DESCRIPTION: creates brass inserts for models
TODO: none TODO: none
USAGE: m_insert(type="M3", icolor = "#ebdc8b") USAGE: m_insert(type="m3", icolor = "#ebdc8b")
type = "M3" type = "m3"
icolor = color of insert icolor = color of insert
*/ */
module m_insert(type="M3", icolor = "#ebdc8b") { //#f4e6c3, #ebdc8b module m_insert(type="m3", icolor = "#ebdc8b") { //#f4e6c3, #ebdc8b
odiam = type == "M3" ? 4.2 : 3.5; odiam = type == "m3" ? 4.2 : 3.5;
idiam = type == "M3" ? 3 : 2.5; idiam = type == "m3" ? 3 : 2.5;
iheight = 4; iheight = 4;
difference() { difference() {
@@ -46,3 +46,36 @@ module m_insert(type="M3", icolor = "#ebdc8b") { //#f4e6c3, #ebdc8b
cube([.5, .5, 1.5]); cube([.5, .5, 1.5]);
} }
} }
/*
NAME: washer
DESCRIPTION: creates washers
TODO: none
USAGE: washer(type="round", id=3, od=6, iheight=2, sheight=2, countersunk, icolor = "#ebdc8b")
type = "round", "shouldered"
id = inside diameter
od = outside diameter
iheight = washer thickness
sheight = shoulder height
countersunk = true
icolor = color of washer
*/
module washer(type="round", id=3, od=6, iheight=2, sheight=2, countersunk = false, icolor = "#ebdc8b") { //#f4e6c3, #ebdc8b
difference() {
union() {
color(icolor,.6) cylinder(d=od, h=iheight);
if(type == "shouldered") {
color(icolor,.6) cylinder(d=od+4, h=sheight);
}
}
color(icolor,.6) translate([0,0,-1]) cylinder(d=id, h=od+sheight+2);
if(type == "shouldered" && countersunk == true) {
color(icolor,.6) translate([0,0,-.01]) cylinder(d2=id, d1=6, h=sheight);
}
}
}

View File

@@ -723,7 +723,16 @@ if(case_design == "rack" && side == "bottom") {
slab([width-(2*wallthick),depth-(2*wallthick),2+adj],corner_fillet); slab([width-(2*wallthick),depth-(2*wallthick),2+adj],corner_fillet);
translate([-gap-wallthick-adj,-gap-wallthick,case_z-floorthick]) translate([-gap-wallthick-adj,-gap-wallthick,case_z-floorthick])
slab([width,depth+adj,20],corner_fillet); slab([width,depth+adj,20],corner_fillet);
// case exterior support holes
translate([-gap-wallthick+10,depth-2*(wallthick+gap)-5,-adj]) cylinder(d=3, h=floorthick+(2*adj));
translate([450/2-gap-wallthick,depth-2*(wallthick+gap)-5,-adj]) cylinder(d=3, h=floorthick+(2*adj));
translate([450-gap-wallthick-10,depth-2*(wallthick+gap)-5,-adj]) cylinder(d=3, h=floorthick+(2*adj));
translate([-gap-wallthick+10,5,-adj]) cylinder(d=3, h=floorthick+(2*adj));
translate([450/2-gap-wallthick,5,-adj]) cylinder(d=3, h=floorthick+(2*adj));
translate([450-gap-wallthick-10,5,-adj]) cylinder(d=3, h=floorthick+(2*adj));
} }
// additive accessories // additive accessories
if(accessory_name != "none") { if(accessory_name != "none") {
for (i=[1:11:len(accessory_data[a[0]])-1]) { for (i=[1:11:len(accessory_data[a[0]])-1]) {

View File

@@ -26,9 +26,18 @@
individual_part = "bottom"; // [top, bottom, right, left, front, rear, io_shield, accessories] individual_part = "bottom"; // [top, bottom, right, left, front, rear, io_shield, accessories]
// section individual parts for panel cases // section individual parts for panel cases
section_part = false; // [true,false] section_part = false; // [true,false]
accessory = "grommet"; // ["fan cover", "grommet", "hd25 holder", "1u rack stand"] accessory = "grommet"; // ["1u rack stand", "2.5 drive holder", "fan cover", "grommet", "washer"]
/* [Fan Cover] */ /* [1U Rack Stand] */
rack_width = 19; // [10, 19]
rack_1u = 4; // [1 : 4]
rack_fasteners = "nut"; // ["none", "nut", "insert"]
/* [2.5" Drive Holder] */
holder_length = 110; // [110, 145]
holder_width = 101.6; // [101.6 : .1 : 150]
/* [Fan Cover] */
fan_style = "fan_hex"; // ["fan_open", "fan_1", "fan_2", "fan_hex"] fan_style = "fan_hex"; // ["fan_open", "fan_1", "fan_2", "fan_hex"]
fan_size = 40; // [25, 30, 40, 50, 60, 80, 92, 120] fan_size = 40; // [25, 30, 40, 50, 60, 80, 92, 120]
fan_cover_thickness = 2; // [2 : .25 : 5] fan_cover_thickness = 2; // [2 : .25 : 5]
@@ -39,14 +48,13 @@
grommet_id = 6; // [2 : .25 : 20] grommet_id = 6; // [2 : .25 : 20]
installation_wall_thickness = 2; // [2 : .25 : 5] installation_wall_thickness = 2; // [2 : .25 : 5]
/* [2.5" HD Holder] */ /* [Washer] */
holder_length = 110; // [110, 145] washer_style = "flat"; // ["flat", "shouldered"]
holder_width = 101.6; // [101.6 : .1 : 150] washer_od = 5; // [3 : .25 : 20]
washer_id = 3; // [2 : .25 : 20]
/* [1U Rack Stand] */ washer_thickness = 2; // [1 : .25 : 8]
rack_width = 19; // [10, 19] shoulder_height = 3; // [1 : .25 : 4]
rack_1u = 4; // [1 : 4] shoulder_countersunk = false; // [true,false]
rack_fasteners = "nut"; // ["none", "nut", "insert"]
/* [Hidden] */ /* [Hidden] */
mask = [true, 10, 2, "default"]; mask = [true, 10, 2, "default"];
@@ -58,23 +66,32 @@
// model view // model view
if (view == "model") { if (view == "model") {
if(accessory == "1u rack stand") {
rack_stand(rack_1u);
}
if(accessory == "2.5 drive holder") {
hd35_25holder(holder_length, holder_width);
}
if(accessory == "fan cover") { if(accessory == "fan cover") {
fan_cover(fan_size, fan_cover_thickness, fan_style); fan_cover(fan_size, fan_cover_thickness, fan_style);
} }
if(accessory == "grommet") { if(accessory == "grommet") {
grommet("front", grommet_style, grommet_od, grommet_id, installation_wall_thickness, true, nmask); grommet("front", grommet_style, grommet_od, grommet_id, installation_wall_thickness, true, nmask);
} }
if(accessory == "hd25 holder") { if(accessory == "washer") {
hd35_25holder(holder_length, holder_width); washer(washer_style, washer_id, washer_od, washer_thickness, shoulder_height, shoulder_countersunk, "silver");;
}
if(accessory == "1u rack stand") {
rack_stand(rack_1u);
} }
} }
// platter view // platter view
if (view == "platter") { if (view == "platter") {
if(accessory == "1u rack stand") {
rotate([0,270,0]) rack_stand(rack_1u);
}
if(accessory == "2.5 drive holder") {
hd35_25holder(holder_length, holder_width);
}
if(accessory == "fan cover") { if(accessory == "fan cover") {
fan_cover(fan_size, fan_cover_thickness, fan_style); fan_cover(fan_size, fan_cover_thickness, fan_style);
} }
@@ -90,10 +107,8 @@
translate([0,-20,0]) translate([0,-20,0])
grommet_clip(grommet_style, grommet_od, grommet_id, installation_wall_thickness); grommet_clip(grommet_style, grommet_od, grommet_id, installation_wall_thickness);
} }
if(accessory == "hd25 holder") { if(accessory == "washer") {
hd35_25holder(holder_length, holder_width); washer(washer_style, washer_id, washer_od, washer_thickness,
} shoulder_height, shoulder_countersunk, "silver");
if(accessory == "1u rack stand") {
rotate([0,270,0]) rack_stand(rack_1u);
} }
} }