diff --git a/mod/case_rack.scad b/mod/case_rack.scad index c990cf2..b43eed9 100644 --- a/mod/case_rack.scad +++ b/mod/case_rack.scad @@ -31,8 +31,6 @@ module case_rack(case_design,side) { rack_asm_gap = .25; rack_asm_size = 5; rack_asm_hole = 2.25; -baysize = (450-(2*wallthick))/6; -bay_height = rack_size == "1u" ? 44.45-floorthick : (2 * 44.45)-floorthick; if(case_design == "rack" && side == "bottom") { difference() { @@ -727,10 +725,9 @@ if(case_design == "rack" && side == "bottom") { grommet("front", "sleeve", 10, 4, wallthick, true, [true,10,0,"default"]); } // front vent - if(rack_bay_face[r] == "vent") { + if(rack_bay_face[r] == "vent" && rack_bay_face != "removable") { translate([-gap-wallthick-1+rack_asm_gap/2+75*(r+1)-75+14,-gap-adj,case_z-16]) vent(2,10,wallthick+4,2,1,9,"vertical"); - } // open front if(rack_bay_face[r] == "open" || rack_bay_face[r] == "removable") { @@ -753,10 +750,7 @@ if(case_design == "rack" && side == "bottom") { translate([open_offset-wallthick-gap+rack_asm_gap/2+75*(r+1)-75, -wallthick-gap-adj,floorthick+case_z+open_height]) rotate([270,0,0]) slab([open_size,case_z,2*wallthick+15],open_radius); - -//#translate([-gap-wallthick+(75*(r+1))-75,-10-r,0]) rotate([0,90,0]) cylinder(d=1, h=75); } -//#translate([-gap-wallthick,0,case_z]) rotate([0,90,0]) cylinder(d=1, h=450); } // subtractive accessories if(accessory_name != "none") { @@ -925,27 +919,367 @@ if(case_design == "rack" && side == "bottom") { access_panel([access_panel_size[0],access_panel_size[1],floorthick], access_panel_orientation, [false,10,2,"default"]); } } - // bay inserts - for(r = [0:len(rack_bay_sbc)-1]) { - if(rack_bay_face[r] == "removable") { - bay_tray(baysize-wallthick-gap,depth-2*wallthick-gap-.5-tol,r); - } - } } } -module bay_tray(width, depth, bay) { +module bay_tray(depth, bay) { -baysize = (450-(2*wallthick))/6; -bay_height = rack_size == "1u" ? 44.45-floorthick : (2 * 44.45)-floorthick; -bayadj = bay == 0 ? -74 : -75.5; + rack_asm_gap = .25; + rack_asm_size = 5; - union() { - #translate([bayadj+75*(bay+1),0,floorthick]) - slab([baysize-wallthick-gap-2,depth-.5-tol,1],3); - #translate([bayadj+75*(bay+1),0,floorthick+bay_height-floorthick-adj]) - rotate([270,0,0]) slab([baysize-wallthick-gap-2,bay_height-floorthick,1.5],1); + difference() { + union() { + slab([baysize-wallthick-gap-2,depth-.5,1],.5); + translate([0, 1.5, 0]) rotate([90,0,0]) + slab([baysize-wallthick-gap-2,bay_height-floorthick-1,1.5],.5); + } + // case floor panel clamp holes + translate([baysize,(depth/2)-gap-wallthick+3.75,-adj]) + cylinder(d=21, h=7); + translate([-gap-wallthick,(depth/2)-gap-wallthick+3.75,-adj]) + cylinder(d=21, h=7); + // left assembly block opening + translate([-rack_asm_size,depth-rack_asm_size,-adj]) + cube([.125+(2*rack_asm_size),rack_asm_size,rack_asm_size]); + // right assembly block opening + translate([baysize-2*rack_asm_size,depth-rack_asm_size,-adj]) + cube([.125+(2*rack_asm_size),rack_asm_size,rack_asm_size]); + + // front vent + if(rack_bay_face[bay] == "removable") { + translate([-gap-wallthick-1+(rack_asm_gap/2)+14,-gap-adj+2,bay_height-13]) + vent(2,5,wallthick+4,2,1,9,"vertical"); + translate([-gap-wallthick-1+(rack_asm_gap/2)+14,-gap-adj+2,3]) + vent(2,5,wallthick+4,2,1,9,"vertical"); + } + // pcb and multi-pcb standoff holes + if(rack_bay_sbc[bay] != "empty") { + s = search([rack_bay_sbc[bay]],sbc_data); + pcb_id = sbc_data[s[0]][4]; + pcb_width = sbc_data[s[0]][10][0]; + pcb_depth = sbc_data[s[0]][10][1]; + pcb_z_orig = sbc_data[s[0]][10][2]; + pcb_tmaxz = sbc_data[s[0]][11][5]; + pcb_bmaxz = sbc_data[s[0]][11][6]; + pcb_color = sbc_data[s[0]][11][1]; + pcb_radius = sbc_data[s[0]][11][0]; + + pcb_loc_x = rack_bay_rotation[bay] == 90 ? rack_bay_xyz_loc[bay][0] + pcb_width : + rack_bay_rotation[bay] == 180 ? rack_bay_xyz_loc[bay][0] + pcb_width : rack_bay_xyz_loc[bay][0]; + pcb_loc_y = rack_bay_rotation[bay] == 270 ? rack_bay_xyz_loc[bay][1]+pcb_width : + rack_bay_rotation[bay] == 180 ? rack_bay_xyz_loc[bay][1]+pcb_depth : rack_bay_xyz_loc[bay][1]; + pcb_loc_z = rack_bay_xyz_loc[bay][2]; + + translate([pcb_loc_x,pcb_loc_y+floorthick+gap,pcb_loc_z]) rotate([0,0,rack_bay_rotation[bay]]) union() { + // pcb standoff holes + if(sbc_bottom_standoffs == true) { + for (i=[1:11:len(sbc_data[s[0]])-2]) { + class = sbc_data[s[0]][i+1]; + type = sbc_data[s[0]][i+2]; + id = sbc_data[s[0]][i+3]; + pcbhole_x = sbc_data[s[0]][i+4]; + pcbhole_y = sbc_data[s[0]][i+5]; + pcbhole_z = sbc_data[s[0]][i+6]; + pcbhole_size = sbc_data[s[0]][i+9][0]; + pcbhole_pos = sbc_data[s[0]][i+10][4]; + + if (class == "pcbhole" && id == 0 && pcbhole_pos == "left_rear" && + bottom_rear_left_enable == true && bottom_standoff[6] != "blind") { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + if (class == "pcbhole" && id == 0 && pcbhole_pos == "left_front" && + bottom_front_left_enable == true && bottom_standoff[6] != "blind") { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + if (class == "pcbhole" && id == 0 && pcbhole_pos == "right_rear" && + bottom_rear_right_enable == true && bottom_standoff[6] != "blind") { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + if (class == "pcbhole" && id == 0 && pcbhole_pos == "right_front" && + bottom_front_right_enable == true && bottom_standoff[6] != "blind") { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + + } + } + // multi-pcb standoff holes + if(multipcb_bottom_standoffs == true) { + for (i=[1:11:len(sbc_data[s[0]])-2]) { + class = sbc_data[s[0]][i+1]; + type = sbc_data[s[0]][i+2]; + pcbid = sbc_data[s[0]][i+3]; + pcbloc_x = sbc_data[s[0]][i+4]; + pcbloc_y = sbc_data[s[0]][i+5]; + pcbloc_z = sbc_data[s[0]][i+6]; + if(class == "pcb") { + for (i=[1:11:len(sbc_data[s[0]])-2]) { + pcbclass = sbc_data[s[0]][i+1]; + pcbtype = sbc_data[s[0]][i+2]; + id = sbc_data[s[0]][i+3]; + pcbhole_x = sbc_data[s[0]][i+4]+pcbloc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcbloc_y; + pcbhole_z = sbc_data[s[0]][i+6]; + pcbhole_size = sbc_data[s[0]][i+9][0]; + pcbhole_state = sbc_data[s[0]][i+10][0]; + pcbhole_pos = sbc_data[s[0]][i+10][4]; + if(id == pcbid && id != 0 && pcbclass == "pcbhole") { + if (pcbclass == "pcbhole" && pcbhole_pos == "left_rear" && + multipcb_bottom_rear_left_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=multipcb_bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "left_front" && + multipcb_bottom_front_left_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=multipcb_bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "right_rear" && + multipcb_bottom_rear_right_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=multipcb_bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "right_front" && + multipcb_bottom_front_right_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,-adj]) + cylinder(d=multipcb_bottom_standoff[4]-.2, h=floorthick+(2*adj)); + } + } + } + } + } + } + } + // sbc openings + if(sbc_highlight == true && rack_bay_sbc[bay] != "empty") { + #translate([pcb_loc_x ,pcb_loc_y+floorthick+gap,bottom_height-pcb_z+pcb_loc_z-adj]) rotate([0,0,rack_bay_rotation[bay]]) + sbc(rack_bay_sbc[bay], cooling, fan_size, gpio_opening, uart_opening, true); + } + if(sbc_highlight != true && rack_bay_sbc[bay] != "empty") { + translate([pcb_loc_x ,pcb_loc_y+floorthick+gap,bottom_height-pcb_z+pcb_loc_z-adj]) rotate([0,0,rack_bay_rotation[bay]]) + sbc(rack_bay_sbc[bay], cooling, fan_size, gpio_opening, uart_opening, true); + } + } } -} \ No newline at end of file + // pcb and multi-pcb standoffs + if(rack_bay_sbc[bay] != "empty") { + s = search([rack_bay_sbc[bay]],sbc_data); + pcb_id = sbc_data[s[0]][4]; + pcb_width = sbc_data[s[0]][10][0]; + pcb_depth = sbc_data[s[0]][10][1]; + pcb_z_orig = sbc_data[s[0]][10][2]; + pcb_tmaxz = sbc_data[s[0]][11][5]; + pcb_bmaxz = sbc_data[s[0]][11][6]; + pcb_color = sbc_data[s[0]][11][1]; + pcb_radius = sbc_data[s[0]][11][0]; + + pcb_loc_x = rack_bay_rotation[bay] == 90 ? rack_bay_xyz_loc[bay][0] + pcb_width : + rack_bay_rotation[bay] == 180 ? rack_bay_xyz_loc[bay][0] + pcb_width : rack_bay_xyz_loc[bay][0]; + pcb_loc_y = rack_bay_rotation[bay] == 270 ? rack_bay_xyz_loc[bay][1]+pcb_width : + rack_bay_rotation[bay] == 180 ? rack_bay_xyz_loc[bay][1]+pcb_depth : rack_bay_xyz_loc[bay][1]; + pcb_loc_z = rack_bay_xyz_loc[bay][2]; + + translate([pcb_loc_x,pcb_loc_y+floorthick+gap,pcb_loc_z]) rotate([0,0,rack_bay_rotation[bay]]) union() { + // primary pcb standoffs + if(sbc_bottom_standoffs == true) { + for (i=[1:11:len(sbc_data[s[0]])-2]) { + class = sbc_data[s[0]][i+1]; + type = sbc_data[s[0]][i+2]; + id = sbc_data[s[0]][i+3]; + pcbhole_x = sbc_data[s[0]][i+4]; + pcbhole_y = sbc_data[s[0]][i+5]; + pcbhole_z = sbc_data[s[0]][i+6]; + pcbhole_size = sbc_data[s[0]][i+9][0]; + pcbhole_pos = sbc_data[s[0]][i+10][4]; + + if(class == "pcbhole" && id == pcb_id) { + if (pcbhole_pos == "left_rear" && bottom_rear_left_enable == true) { + bottom_support = bottom_sidewall_support == true ? bottom_rear_left_support : "none"; + pcb_standoff = [bottom_standoff[0], + bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+bottom_rear_left_adjust, + bottom_standoff[3], + bottom_standoff[4], + bottom_standoff[5], + bottom_standoff[6], + bottom_standoff[7], + bottom_support, + bottom_standoff[9], + bottom_standoff[10], + bottom_standoff[11], + bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "left_front" && bottom_front_left_enable == true) { + bottom_support = bottom_sidewall_support == true ? bottom_front_left_support : "none"; + pcb_standoff = [bottom_standoff[0], + bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+bottom_front_left_adjust, + bottom_standoff[3], + bottom_standoff[4], + bottom_standoff[5], + bottom_standoff[6], + bottom_standoff[7], + bottom_support, + bottom_standoff[9], + bottom_standoff[10], + bottom_standoff[11], + bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "right_rear" && bottom_rear_right_enable == true) { + bottom_support = bottom_sidewall_support == true ? bottom_rear_right_support : "none"; + pcb_standoff = [bottom_standoff[0], + bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+bottom_rear_right_adjust, + bottom_standoff[3], + bottom_standoff[4], + bottom_standoff[5], + bottom_standoff[6], + bottom_standoff[7], + bottom_support, + bottom_standoff[9], + bottom_standoff[10], + bottom_standoff[11], + bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "right_front" && bottom_front_right_enable == true) { + bottom_support = bottom_sidewall_support == true ? bottom_front_right_support : "none"; + pcb_standoff = [bottom_standoff[0], + bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+bottom_front_right_adjust, + bottom_standoff[3], + bottom_standoff[4], + bottom_standoff[5], + bottom_standoff[6], + bottom_standoff[7], + bottom_support, + bottom_standoff[9], + bottom_standoff[10], + bottom_standoff[11], + bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + } + } + } + // multi-pcb standoffs + if(multipcb_bottom_standoffs == true) { + for (i=[1:11:len(sbc_data[s[0]])-2]) { + class = sbc_data[s[0]][i+1]; + type = sbc_data[s[0]][i+2]; + pcbid = sbc_data[s[0]][i+3]; + pcbloc_x = sbc_data[s[0]][i+4]; + pcbloc_y = sbc_data[s[0]][i+5]; + pcbloc_z = sbc_data[s[0]][i+6]; + if(class == "pcb") { + for (i=[1:11:len(sbc_data[s[0]])-2]) { + pcbclass = sbc_data[s[0]][i+1]; + pcbtype = sbc_data[s[0]][i+2]; + id = sbc_data[s[0]][i+3]; + pcbhole_x = sbc_data[s[0]][i+4]+pcbloc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcbloc_y; + pcbhole_z = sbc_data[s[0]][i+6]; + pcbhole_size = sbc_data[s[0]][i+9][0]; + pcbhole_state = sbc_data[s[0]][i+10][0]; + pcbhole_pos = sbc_data[s[0]][i+10][4]; + + if(pcbclass == "pcbhole" && pcbid == id && id != 0) { + if (pcbhole_pos == "left_rear" && multipcb_bottom_rear_left_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + bottom_support = multipcb_bottom_sidewall_support == true ? multipcb_bottom_rear_left_support : "none"; + pcb_standoff = [multipcb_bottom_standoff[0], + multipcb_bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+multipcb_bottom_rear_left_adjust, + multipcb_bottom_standoff[3], + multipcb_bottom_standoff[4], + multipcb_bottom_standoff[5], + multipcb_bottom_standoff[6], + multipcb_bottom_standoff[7], + bottom_support, + multipcb_bottom_standoff[9], + multipcb_bottom_standoff[10], + multipcb_bottom_standoff[11], + multipcb_bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "left_front" && multipcb_bottom_front_left_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + bottom_support = multipcb_bottom_sidewall_support == true ? multipcb_bottom_front_left_support : "none"; + pcb_standoff = [multipcb_bottom_standoff[0], + multipcb_bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+multipcb_bottom_front_left_adjust, + multipcb_bottom_standoff[3], + multipcb_bottom_standoff[4], + multipcb_bottom_standoff[5], + multipcb_bottom_standoff[6], + multipcb_bottom_standoff[7], + bottom_support, + multipcb_bottom_standoff[9], + multipcb_bottom_standoff[10], + multipcb_bottom_standoff[11], + multipcb_bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "right_rear" && multipcb_bottom_rear_right_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + bottom_support = multipcb_bottom_sidewall_support == true ? multipcb_bottom_rear_right_support : "none"; + pcb_standoff = [multipcb_bottom_standoff[0], + multipcb_bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+multipcb_bottom_rear_right_adjust, + multipcb_bottom_standoff[3], + multipcb_bottom_standoff[4], + multipcb_bottom_standoff[5], + multipcb_bottom_standoff[6], + multipcb_bottom_standoff[7], + bottom_support, + multipcb_bottom_standoff[9], + multipcb_bottom_standoff[10], + multipcb_bottom_standoff[11], + multipcb_bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "right_front" && multipcb_bottom_front_right_enable == true && + (pcbhole_state == "bottom" || pcbhole_state == "both")) { + bottom_support = multipcb_bottom_sidewall_support == true ? multipcb_bottom_front_right_support : "none"; + pcb_standoff = [multipcb_bottom_standoff[0], + multipcb_bottom_standoff[1], + bottom_height-pcb_z+pcb_loc_z+multipcb_bottom_front_right_adjust, + multipcb_bottom_standoff[3], + multipcb_bottom_standoff[4], + multipcb_bottom_standoff[5], + multipcb_bottom_standoff[6], + multipcb_bottom_standoff[7], + bottom_support, + multipcb_bottom_standoff[9], + multipcb_bottom_standoff[10], + multipcb_bottom_standoff[11], + multipcb_bottom_standoff[12]]; + translate([pcbhole_x,pcbhole_y,0]) + standoff(pcb_standoff,[false,10,2,"default"]); + } + } + } + } + } + } + } + } +} diff --git a/sbc_case_builder.json b/sbc_case_builder.json index c491f85..95f44f4 100644 --- a/sbc_case_builder.json +++ b/sbc_case_builder.json @@ -11138,7 +11138,7 @@ "Rack_Bay1": "c4", "Rack_Bay2": "c4", "Rack_Bay3": "c4", - "Rack_Bay4": "c4", + "Rack_Bay4": "empty", "Rack_Bay5": "c4", "Rack_Bay6": "c4", "access_panel_location": "[10, 15]", @@ -11180,7 +11180,7 @@ "case_offset_bz": "0", "case_offset_tz": "0", "case_offset_x": "0", - "case_offset_y": "50", + "case_offset_y": "60", "cooling": "default", "corner_fillet": "3", "edge_fillet": "0", @@ -11313,36 +11313,36 @@ "rack_bay1_rear_fan": "true", "rack_bay1_rotation": "270", "rack_bay1_wall": "true", - "rack_bay1_xyz_loc": "[13, 0, 0]", - "rack_bay2_face": "removable", + "rack_bay1_xyz_loc": "[10, 0, 0]", + "rack_bay2_face": "vent", "rack_bay2_rear_conduit": "true", "rack_bay2_rear_fan": "true", "rack_bay2_rotation": "270", "rack_bay2_wall": "true", - "rack_bay2_xyz_loc": "[88, 0, 0]", + "rack_bay2_xyz_loc": "[87, 0, 0]", "rack_bay3_face": "removable", "rack_bay3_rear_conduit": "true", "rack_bay3_rear_fan": "true", "rack_bay3_rotation": "270", - "rack_bay3_wall": "true", - "rack_bay3_xyz_loc": "[162.5, 0, 0]", + "rack_bay3_wall": "false", + "rack_bay3_xyz_loc": "[10, 0, 0]", "rack_bay4_face": "removable", "rack_bay4_rear_conduit": "true", "rack_bay4_rear_fan": "true", "rack_bay4_rotation": "270", "rack_bay4_wall": "true", - "rack_bay4_xyz_loc": "[237.5, 0, 0]", - "rack_bay5_face": "removable", + "rack_bay4_xyz_loc": "[10, 0, 0]", + "rack_bay5_face": "open", "rack_bay5_rear_conduit": "true", "rack_bay5_rear_fan": "true", "rack_bay5_rotation": "270", "rack_bay5_wall": "true", "rack_bay5_xyz_loc": "[313, 0, 0]", - "rack_bay6_face": "removable", + "rack_bay6_face": "fixed", "rack_bay6_rear_conduit": "true", "rack_bay6_rear_fan": "true", "rack_bay6_rotation": "270", - "rack_bay6_xyz_loc": "[385, 0, 0]", + "rack_bay6_xyz_loc": "[386, 0, 0]", "rack_size": "1u", "rack_width": "19", "raise_top": "0", @@ -11357,7 +11357,7 @@ "sbc_highlight": "false", "sbc_information": "false", "sbc_model": "c4", - "sbc_off": "true", + "sbc_off": "false", "sbc_top_standoffs": "false", "section_part": "false", "sidethick": "4", diff --git a/sbc_case_builder.scad b/sbc_case_builder.scad index 12ec255..2da2a09 100644 --- a/sbc_case_builder.scad +++ b/sbc_case_builder.scad @@ -82,7 +82,7 @@ rack_size = "1u"; //["1u","1u+","1u++","2u"] Rack_Bay1 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"] rack_bay1_xyz_loc = [0,0,0]; // [0:.5:450] rack_bay1_rotation = 0; // [0:90:270] -rack_bay1_face = "vent"; //["open","solid","removable","vent"] +rack_bay1_face = "vent"; //["open","fixed","removable","vent"] rack_bay1_wall = false; // [true,false] rack_bay1_rear_fan = false; //[true,false] rack_bay1_rear_conduit = false; //[true,false] @@ -90,7 +90,7 @@ rack_bay1_rear_conduit = false; //[true,false] Rack_Bay2 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"] rack_bay2_xyz_loc = [0,0,0]; // [0:.5:450] rack_bay2_rotation = 0; // [0:90:270] -rack_bay2_face = "vent"; //["open","solid","removable","vent"] +rack_bay2_face = "vent"; //["open","fixed","removable","vent"] rack_bay2_wall = false; // [true,false] rack_bay2_rear_fan = false; //[true,false] rack_bay2_rear_conduit = false; //[true,false] @@ -98,7 +98,7 @@ rack_bay2_rear_conduit = false; //[true,false] Rack_Bay3 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"] rack_bay3_xyz_loc = [0,0,0]; // [0:.5:450] rack_bay3_rotation = 0; // [0:90:270] -rack_bay3_face = "vent"; //["open","solid","removable","vent"] +rack_bay3_face = "vent"; //["open","fixed","removable","vent"] rack_bay3_wall = false; // [true,false] rack_bay3_rear_fan = false; //[true,false] rack_bay3_rear_conduit = false; //[true,false] @@ -106,7 +106,7 @@ rack_bay3_rear_conduit = false; //[true,false] Rack_Bay4 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"] rack_bay4_xyz_loc = [0,0,0]; // [0:.5:450] rack_bay4_rotation = 0; // [0:90:270] -rack_bay4_face = "vent"; //["open","solid","removable","vent"] +rack_bay4_face = "vent"; //["open","fixed","removable","vent"] rack_bay4_wall = false; // [true,false] rack_bay4_rear_fan = false; //[true,false] rack_bay4_rear_conduit = false; //[true,false] @@ -114,7 +114,7 @@ rack_bay4_rear_conduit = false; //[true,false] Rack_Bay5 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"] rack_bay5_xyz_loc = [0,0,0]; // [0:.5:450] rack_bay5_rotation = 0; // [0:90:270] -rack_bay5_face = "vent"; //["open","solid","removable","vent"] +rack_bay5_face = "vent"; //["open","fixed","removable","vent"] rack_bay5_wall = false; // [true,false] rack_bay5_rear_fan = false; //[true,false] rack_bay5_rear_conduit = false; //[true,false] @@ -122,7 +122,7 @@ rack_bay5_rear_conduit = false; //[true,false] Rack_Bay6 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"] rack_bay6_xyz_loc = [0,0,0]; // [0:.5:450] rack_bay6_rotation = 0; // [0:90:270] -rack_bay6_face = "vent"; //["open","solid","removable","vent"] +rack_bay6_face = "vent"; //["open","fixed","removable","vent"] rack_bay6_rear_fan = false; //[true,false] rack_bay6_rear_conduit = false; //[true,false] @@ -546,6 +546,8 @@ rack_bay_face = [rack_bay1_face, rack_bay2_face, rack_bay3_face, rack_bay4_face, rack_bay_wall = [rack_bay1_wall, rack_bay2_wall, rack_bay3_wall, rack_bay4_wall, rack_bay5_wall, false]; rack_bay_rear_fan = [rack_bay1_rear_fan, rack_bay2_rear_fan, rack_bay3_rear_fan, rack_bay4_rear_fan, rack_bay5_rear_fan, rack_bay6_rear_fan]; rack_bay_rear_conduit = [rack_bay1_rear_conduit, rack_bay2_rear_conduit, rack_bay3_rear_conduit, rack_bay4_rear_conduit, rack_bay5_rear_conduit, rack_bay6_rear_conduit]; +baysize = (450-(2*wallthick))/6; +bay_height = rack_size == "1u" ? 44.45-floorthick : (2 * 44.45)-floorthick; adj = .01; $fn=90; @@ -1120,7 +1122,7 @@ if (view == "model") { } if(raise_top >= 0) { difference() { - color("grey",1) translate([0,0,raise_top]) case_rack(case_design,"bottom"); + color("grey",1) translate([0,0,raise_top]) case_rack(case_design,"top"); if(move_rear < 0) { translate([-gap-wallthick-1,-gap-wallthick-1,-lower_bottom-1]) cube([width+2,gap+wallthick+1.01,case_z+2]); @@ -1156,9 +1158,17 @@ if (view == "model") { color("lightgrey") grommet("front", "sleeve", 10, 4, wallthick, true, [false,10,0,"default"]); } } + // bay inserts + for(r = [0:len(rack_bay_sbc)-1]) { + bayadj = r == 0 ? -74 : -75.5; + if(rack_bay_face[r] == "removable") { + color("gray") translate([bayadj+75*(r+1),0,floorthick]) + bay_tray(depth-2*wallthick-gap-.5-tol,r); + } + } if(sbc_off == false) { for(i = [0:len(rack_bay_sbc)-1]) { - if(rack_bay_sbc[i] != "empty") { + if(rack_bay_sbc[i] != "empty" && rack_bay_face[i] != "removable") { s = search([rack_bay_sbc[i]],sbc_data); pcb_loc_z = rack_bay_xyz_loc[i][2]; pcb_id = sbc_data[s[0]][4]; @@ -1172,11 +1182,33 @@ if (view == "model") { pcb_loc_x = rack_bay_rotation[i] == 90 ? rack_bay_xyz_loc[i][0] + pcb_width : rack_bay_rotation[i] == 180 ? rack_bay_xyz_loc[i][0] + pcb_width : rack_bay_xyz_loc[i][0]; pcb_loc_y = rack_bay_rotation[i] == 270 ? rack_bay_xyz_loc[i][1]+pcb_width : rack_bay_rotation[i] == 180 ? rack_bay_xyz_loc[i][1]+pcb_depth : rack_bay_xyz_loc[i][1]; - if(rack_bay_sbc[i] != "empty") { - translate([pcb_loc_x ,pcb_loc_y,bottom_height-pcb_z+pcb_loc_z-adj]) - rotate([0,0,rack_bay_rotation[i]]) - sbc(rack_bay_sbc[i], cooling, fan_size, gpio_opening, uart_opening, false); - } + translate([pcb_loc_x ,pcb_loc_y,bottom_height-pcb_z+pcb_loc_z-adj]) + rotate([0,0,rack_bay_rotation[i]]) + sbc(rack_bay_sbc[i], cooling, fan_size, gpio_opening, uart_opening, false); + } + if(rack_bay_sbc[i] != "empty" && rack_bay_face[i] == "removable") { + bayadj = i == 0 ? -74 : -75.5; + s = search([rack_bay_sbc[i]],sbc_data); + pcb_loc_z = rack_bay_xyz_loc[i][2]; + pcb_id = sbc_data[s[0]][4]; + pcb_width = sbc_data[s[0]][10][0]; + pcb_depth = sbc_data[s[0]][10][1]; + pcb_z_orig = sbc_data[s[0]][10][2]; + pcb_tmaxz = sbc_data[s[0]][11][5]; + pcb_bmaxz = sbc_data[s[0]][11][6]; + pcb_color = sbc_data[s[0]][11][1]; + pcb_radius = sbc_data[s[0]][11][0]; + + pcb_loc_x = rack_bay_rotation[i] == 90 ? rack_bay_xyz_loc[i][0] + pcb_width : + rack_bay_rotation[i] == 180 ? rack_bay_xyz_loc[i][0] + pcb_width : + rack_bay_xyz_loc[i][0]; + pcb_loc_y = rack_bay_rotation[i] == 270 ? rack_bay_xyz_loc[i][1]+pcb_width : + rack_bay_rotation[i] == 180 ? rack_bay_xyz_loc[i][1]+pcb_depth : + rack_bay_xyz_loc[i][1]; + + translate([pcb_loc_x+bayadj+75*(i+1) ,pcb_loc_y+wallthick+gap, + bottom_height-pcb_z+pcb_loc_z-adj+floorthick]) rotate([0,0,rack_bay_rotation[i]]) + sbc(rack_bay_sbc[i], cooling, fan_size, gpio_opening, uart_opening, false); } } }