diff --git a/README.md b/README.md index 6618049..85d147d 100644 --- a/README.md +++ b/README.md @@ -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. ### 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 diff --git a/lib/fastener.scad b/lib/fastener.scad index 354a9f4..e3dd2a5 100644 --- a/lib/fastener.scad +++ b/lib/fastener.scad @@ -21,20 +21,20 @@ /* - NAME: fan_cover - DESCRIPTION: creates fan covers for fan openings + NAME: m_insert + DESCRIPTION: creates brass inserts for models TODO: none - USAGE: m_insert(type="M3", icolor = "#ebdc8b") + USAGE: m_insert(type="m3", icolor = "#ebdc8b") - type = "M3" + type = "m3" 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; - idiam = type == "M3" ? 3 : 2.5; + odiam = type == "m3" ? 4.2 : 3.5; + idiam = type == "m3" ? 3 : 2.5; iheight = 4; difference() { @@ -46,3 +46,36 @@ module m_insert(type="M3", icolor = "#ebdc8b") { //#f4e6c3, #ebdc8b 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); + } + } +} diff --git a/mod/case_rack.scad b/mod/case_rack.scad index 38fbb22..7013d74 100644 --- a/mod/case_rack.scad +++ b/mod/case_rack.scad @@ -723,7 +723,16 @@ if(case_design == "rack" && side == "bottom") { slab([width-(2*wallthick),depth-(2*wallthick),2+adj],corner_fillet); translate([-gap-wallthick-adj,-gap-wallthick,case_z-floorthick]) 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 if(accessory_name != "none") { for (i=[1:11:len(accessory_data[a[0]])-1]) { diff --git a/sbccb_accessory_tool.scad b/sbccb_accessory_tool.scad index a847e2e..601612e 100644 --- a/sbccb_accessory_tool.scad +++ b/sbccb_accessory_tool.scad @@ -26,9 +26,18 @@ individual_part = "bottom"; // [top, bottom, right, left, front, rear, io_shield, accessories] // section individual parts for panel cases 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_size = 40; // [25, 30, 40, 50, 60, 80, 92, 120] fan_cover_thickness = 2; // [2 : .25 : 5] @@ -39,14 +48,13 @@ grommet_id = 6; // [2 : .25 : 20] installation_wall_thickness = 2; // [2 : .25 : 5] - /* [2.5" HD Holder] */ - holder_length = 110; // [110, 145] - holder_width = 101.6; // [101.6 : .1 : 150] - - /* [1U Rack Stand] */ - rack_width = 19; // [10, 19] - rack_1u = 4; // [1 : 4] - rack_fasteners = "nut"; // ["none", "nut", "insert"] + /* [Washer] */ + washer_style = "flat"; // ["flat", "shouldered"] + washer_od = 5; // [3 : .25 : 20] + washer_id = 3; // [2 : .25 : 20] + washer_thickness = 2; // [1 : .25 : 8] + shoulder_height = 3; // [1 : .25 : 4] + shoulder_countersunk = false; // [true,false] /* [Hidden] */ mask = [true, 10, 2, "default"]; @@ -58,23 +66,32 @@ // model view 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") { fan_cover(fan_size, fan_cover_thickness, fan_style); } if(accessory == "grommet") { grommet("front", grommet_style, grommet_od, grommet_id, installation_wall_thickness, true, nmask); } - if(accessory == "hd25 holder") { - hd35_25holder(holder_length, holder_width); - } - if(accessory == "1u rack stand") { - rack_stand(rack_1u); + if(accessory == "washer") { + washer(washer_style, washer_id, washer_od, washer_thickness, shoulder_height, shoulder_countersunk, "silver");; } } // platter view 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") { fan_cover(fan_size, fan_cover_thickness, fan_style); } @@ -90,10 +107,8 @@ translate([0,-20,0]) grommet_clip(grommet_style, grommet_od, grommet_id, installation_wall_thickness); } - if(accessory == "hd25 holder") { - hd35_25holder(holder_length, holder_width); - } - if(accessory == "1u rack stand") { - rotate([0,270,0]) rack_stand(rack_1u); + if(accessory == "washer") { + washer(washer_style, washer_id, washer_od, washer_thickness, + shoulder_height, shoulder_countersunk, "silver"); } }