multi sbc support with individual location and rotation for rack case

This commit is contained in:
Edward Kisiel
2025-05-01 17:43:39 -04:00
parent 5aebb0d549
commit 859192bd6b
3 changed files with 41 additions and 19 deletions

View File

@@ -136,7 +136,7 @@ module case_side(case_design, side) {
difference() { difference() {
union() { union() {
translate([-gap,-(2*wallthick),0]) translate([-gap,-(2*wallthick),0])
cube([x_adj,wallthick,case_z-wallthick]); cube([x_adj,wallthick,case_z-floorthick]);
// bottom right tab // bottom right tab
translate([xtab_adj,-(2*wallthick),20]) translate([xtab_adj,-(2*wallthick),20])
cube([sidethick+(2*adj),wallthick,10]); cube([sidethick+(2*adj),wallthick,10]);
@@ -185,7 +185,7 @@ module case_side(case_design, side) {
difference() { difference() {
union() { union() {
translate([-gap,depth-(4*wallthick),floorthick]) translate([-gap,depth-(4*wallthick),floorthick])
cube([x_adj,wallthick,case_z-3*wallthick]); cube([x_adj,wallthick,case_z-3*floorthick]);
// bottom right tab // bottom right tab
translate([xtab_adj,depth-(4*wallthick),20]) translate([xtab_adj,depth-(4*wallthick),20])
cube([sidethick+(2*adj),wallthick,10]); cube([sidethick+(2*adj),wallthick,10]);

View File

@@ -10874,10 +10874,10 @@
}, },
"c4_rack_1u": { "c4_rack_1u": {
"$fn": "90", "$fn": "90",
"Rack_Bay1": "c1+", "Rack_Bay1": "c4",
"Rack_Bay2": "empty", "Rack_Bay2": "empty",
"Rack_Bay3": "empty", "Rack_Bay3": "c2",
"Rack_Bay4": "empty", "Rack_Bay4": "xu4",
"access_panel_location": "[10, 15]", "access_panel_location": "[10, 15]",
"access_panel_orientation": "landscape", "access_panel_orientation": "landscape",
"access_panel_rotation": "0", "access_panel_rotation": "0",
@@ -10917,7 +10917,7 @@
"case_offset_bz": "0", "case_offset_bz": "0",
"case_offset_tz": "0", "case_offset_tz": "0",
"case_offset_x": "0", "case_offset_x": "0",
"case_offset_y": "25", "case_offset_y": "40",
"cooling": "default", "cooling": "default",
"corner_fillet": "3", "corner_fillet": "3",
"edge_fillet": "0", "edge_fillet": "0",
@@ -11046,21 +11046,21 @@
"pcb_loc_y": "0", "pcb_loc_y": "0",
"pcb_loc_z": "0", "pcb_loc_z": "0",
"rack_bay1_face": "io_shield", "rack_bay1_face": "io_shield",
"rack_bay1_rotation": "0", "rack_bay1_rotation": "270",
"rack_bay1_wall": "false", "rack_bay1_wall": "false",
"rack_bay1_xyz_loc": "[0, 0, 0]", "rack_bay1_xyz_loc": "[15, 0, 0]",
"rack_bay2_face": "io_shield", "rack_bay2_face": "io_shield",
"rack_bay2_rotation": "0", "rack_bay2_rotation": "0",
"rack_bay2_wall": "false", "rack_bay2_wall": "false",
"rack_bay2_xyz_loc": "[0, 0, 0]", "rack_bay2_xyz_loc": "[120, 0, 0]",
"rack_bay3_face": "io_shield", "rack_bay3_face": "io_shield",
"rack_bay3_rotation": "0", "rack_bay3_rotation": "270",
"rack_bay3_wall": "false", "rack_bay3_wall": "false",
"rack_bay3_xyz_loc": "[0, 0, 0]", "rack_bay3_xyz_loc": "[250, 0, 0]",
"rack_bay4_face": "io_shield", "rack_bay4_face": "io_shield",
"rack_bay4_rotation": "0", "rack_bay4_rotation": "0",
"rack_bay4_wall": "false", "rack_bay4_wall": "false",
"rack_bay4_xyz_loc": "[0, 0, 0]", "rack_bay4_xyz_loc": "[350, 0, 0]",
"rack_bays": "1", "rack_bays": "1",
"rack_size": "19", "rack_size": "19",
"rack_u_size": "1u", "rack_u_size": "1u",

View File

@@ -82,22 +82,22 @@ rack_u_size = "1u"; //["1u", "2u", "3u", "4u"]
rack_bays = 1; //[1:4] rack_bays = 1; //[1:4]
// enable rack io plate opening for sbc // enable rack io plate opening for sbc
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 = "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:300] rack_bay1_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay1_rotation = 0; // [0:90:270] rack_bay1_rotation = 0; // [0:90:270]
rack_bay1_face = "io_shield"; //["none","blank","io_shield","vent_hex"] rack_bay1_face = "io_shield"; //["none","blank","io_shield","vent_hex"]
rack_bay1_wall = false; // [true,false] rack_bay1_wall = 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 = "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:300] rack_bay2_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay2_rotation = 0; // [0:90:270] rack_bay2_rotation = 0; // [0:90:270]
rack_bay2_face = "io_shield"; //["none","blank","io_shield","vent_hex"] rack_bay2_face = "io_shield"; //["none","blank","io_shield","vent_hex"]
rack_bay2_wall = false; // [true,false] rack_bay2_wall = 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 = "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:300] rack_bay3_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay3_rotation = 0; // [0:90:270] rack_bay3_rotation = 0; // [0:90:270]
rack_bay3_face = "io_shield"; //["none","blank","io_shield","vent_hex"] rack_bay3_face = "io_shield"; //["none","blank","io_shield","vent_hex"]
rack_bay3_wall = false; // [true,false] rack_bay3_wall = 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 = "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:300] rack_bay4_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay4_rotation = 0; // [0:90:270] rack_bay4_rotation = 0; // [0:90:270]
rack_bay4_face = "io_shield"; //["none","blank","io_shield","vent_hex"] rack_bay4_face = "io_shield"; //["none","blank","io_shield","vent_hex"]
rack_bay4_wall = false; // [true,false] rack_bay4_wall = false; // [true,false]
@@ -509,7 +509,11 @@ multipcb_bottom_standoff = [multipcb_bottom_standoff_size,
multipcb_bottom_standoff_insert_dia, multipcb_bottom_standoff_insert_dia,
multipcb_bottom_standoff_insert_height]; multipcb_bottom_standoff_insert_height];
rack_bay_sbc = [Rack_Bay4,Rack_Bay4,Rack_Bay4,Rack_Bay4]; rack_bay_sbc = [Rack_Bay1,Rack_Bay2,Rack_Bay3,Rack_Bay4];
rack_bay_xyz_loc = [rack_bay1_xyz_loc, rack_bay2_xyz_loc, rack_bay3_xyz_loc, rack_bay4_xyz_loc];
rack_bay_rotation = [rack_bay1_rotation, rack_bay2_rotation, rack_bay3_rotation, rack_bay4_rotation];
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];
adj = .01; adj = .01;
$fn=90; $fn=90;
@@ -1084,8 +1088,26 @@ if (view == "model") {
} }
} }
if(sbc_off == false) { if(sbc_off == false) {
translate([pcb_loc_x ,pcb_loc_y,bottom_height-pcb_z+pcb_loc_z-adj]) rotate([0,0,rack_bay1_rotation]) for(i = [0:3]) {
sbc(Rack_Bay1, cooling, fan_size, gpio_opening, uart_opening, false); 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];
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);
}
}
} }
} }
if(case_design == "adapter_mini-stx_thin" || case_design == "adapter_mini-stx" || case_design == "adapter_mini-itx_thin" || case_design == "adapter_mini-itx" || case_design == "adapter_flex-atx" || case_design == "adapter_mini-dtx" || case_design == "adapter_dtx" || case_design == "adapter_micro-atx" || case_design == "adapter_atx" || case_design == "adapter_ssi-ceb" || case_design == "adapter_ssi-eeb") { if(case_design == "adapter_mini-stx_thin" || case_design == "adapter_mini-stx" || case_design == "adapter_mini-itx_thin" || case_design == "adapter_mini-itx" || case_design == "adapter_flex-atx" || case_design == "adapter_mini-dtx" || case_design == "adapter_dtx" || case_design == "adapter_micro-atx" || case_design == "adapter_atx" || case_design == "adapter_ssi-ceb" || case_design == "adapter_ssi-eeb") {