From 9511f0263be558f63a2287c6836dbf75208be6e9 Mon Sep 17 00:00:00 2001 From: Edward Kisiel Date: Thu, 30 May 2024 20:57:40 -0400 Subject: [PATCH] initial standoff support for multiple secondary pcb assemblies --- mod/case_bottom.scad | 145 +++++++++++++++++- mod/case_top.scad | 141 ++++++++++++++++- sbc_case_builder.json | 62 +++++++- sbc_case_builder.scad | 253 +++++++++++++++++++++---------- sbc_case_builder_accessories.cfg | 25 +++ 5 files changed, 532 insertions(+), 94 deletions(-) diff --git a/mod/case_bottom.scad b/mod/case_bottom.scad index 9471c84..0f0e373 100644 --- a/mod/case_bottom.scad +++ b/mod/case_bottom.scad @@ -384,25 +384,63 @@ echo(pcb_depth+case_offset_y-10); pcbhole_size = sbc_data[s[0]][i+9][0]; pcbhole_pos = sbc_data[s[0]][i+10][4]; - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_rear" && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "left_rear" && bottom_rear_left_enable == true && bottom_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,-1]) cylinder(d=bottom_standoff[4]-.2, h=bottom_height); } - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_front" && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "left_front" && bottom_front_left_enable == true && bottom_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,-1]) cylinder(d=bottom_standoff[4]-.2, h=bottom_height); } - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_rear" && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "right_rear" && bottom_rear_right_enable == true && bottom_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,-1]) cylinder(d=bottom_standoff[4]-.2, h=bottom_height); } - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front" && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "right_front" && bottom_front_right_enable == true && bottom_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,-1]) cylinder(d=bottom_standoff[4]-.2, h=bottom_height); } } } + // 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]+pcb_loc_x+pcbloc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcb_loc_y+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,-1]) cylinder(d=multipcb_bottom_standoff[4]-.2, h=bottom_height); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "left_front" && multipcb_bottom_front_left_enable == true && (pcbhole_state == "bottom" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,-1]) cylinder(d=multipcb_bottom_standoff[4]-.2, h=bottom_height); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "right_rear" && multipcb_bottom_rear_right_enable == true && (pcbhole_state == "bottom" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,-1]) cylinder(d=multipcb_bottom_standoff[4]-.2, h=bottom_height); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "right_front" && multipcb_bottom_front_right_enable == true && (pcbhole_state == "bottom" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,-1]) cylinder(d=multipcb_bottom_standoff[4]-.2, h=bottom_height); + } + } + } + } + } + } // extended standoff holes if(ext_bottom_standoffs == true) { // right-rear standoff @@ -473,7 +511,7 @@ echo(pcb_depth+case_offset_y-10); } } } - // pcb standoffs + // 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]; @@ -485,8 +523,7 @@ echo(pcb_depth+case_offset_y-10); pcbhole_size = sbc_data[s[0]][i+9][0]; pcbhole_pos = sbc_data[s[0]][i+10][4]; - if(class == "pcbhole" && id == pcb_id && - (pcbhole_pos == "left_rear" || pcbhole_pos == "left_front" || pcbhole_pos == "right_rear" || pcbhole_pos == "right_front")) { + 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], @@ -558,7 +595,101 @@ echo(pcb_depth+case_offset_y-10); } } } + // 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]+pcb_loc_x+pcbloc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcb_loc_y+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"]); + } + } + } + } + } + } // extended standoffs if(ext_bottom_standoffs == true) { // extended right-rear standoff diff --git a/mod/case_top.scad b/mod/case_top.scad index c5d0363..bee5e0b 100644 --- a/mod/case_top.scad +++ b/mod/case_top.scad @@ -307,24 +307,62 @@ module case_top(case_design) { pcbhole_size = sbc_data[s[0]][i+9][0]; pcbhole_pos = sbc_data[s[0]][i+10][4]; - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_rear" && top_rear_left_enable == true && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "left_rear" && top_rear_left_enable == true && top_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=top_standoff[4]-.2, h=top_height); } - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_front" && top_front_left_enable == true && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "left_front" && top_front_left_enable == true && top_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=top_standoff[4]-.2, h=top_height); } - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_rear" && top_rear_right_enable == true && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "right_rear" && top_rear_right_enable == true && top_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=top_standoff[4]-.2, h=top_height); } - if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front" && top_front_right_enable == true && + if (class == "pcbhole" && id == 0 && pcbhole_pos == "right_front" && top_front_right_enable == true && top_standoff[6] != "blind") { translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=top_standoff[4]-.2, h=top_height); } } } + // multi-pcb standoff holes + if(multipcb_top_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]+pcb_loc_x+pcbloc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcb_loc_y+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_top_rear_left_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,top_height]) cylinder(d=multipcb_top_standoff[4]-.2, h=top_height); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "left_front" && multipcb_top_front_left_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,top_height]) cylinder(d=multipcb_top_standoff[4]-.2, h=top_height); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "right_rear" && multipcb_top_rear_right_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,top_height]) cylinder(d=multipcb_top_standoff[4]-.2, h=top_height); + } + if (pcbclass == "pcbhole" && pcbhole_pos == "right_front" && multipcb_top_front_right_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + translate([pcbhole_x,pcbhole_y,top_height]) cylinder(d=multipcb_top_standoff[4]-.2, h=top_height); + } + } + } + } + } + } // extended standoff holes if(ext_top_standoffs == true) { // right-rear standoff @@ -479,6 +517,101 @@ module case_top(case_design) { } } } + // multi-pcb standoffs + if(multipcb_top_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]+pcb_loc_x+pcbloc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcb_loc_y+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_top_rear_left_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + top_support = multipcb_top_sidewall_support == true ? multipcb_top_rear_left_support : "none"; + pcb_standoff = [multipcb_top_standoff[0], + multipcb_top_standoff[1], + top_height+top_rear_right_adjust-pcb_loc_z, + multipcb_top_standoff[3], + multipcb_top_standoff[4], + multipcb_top_standoff[5], + multipcb_top_standoff[6], + multipcb_top_standoff[7], + top_support, + multipcb_top_standoff[9], + multipcb_top_standoff[10], + multipcb_top_standoff[11], + multipcb_top_standoff[12]]; + translate([pcbhole_x,pcbhole_y,case_z]) standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "left_front" && multipcb_top_front_left_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + top_support = multipcb_top_sidewall_support == true ? multipcb_top_front_left_support : "none"; + pcb_standoff = [multipcb_top_standoff[0], + multipcb_bottom_standoff[1], + top_height+top_rear_right_adjust-pcb_loc_z, + multipcb_top_standoff[3], + multipcb_top_standoff[4], + multipcb_top_standoff[5], + multipcb_top_standoff[6], + multipcb_top_standoff[7], + top_support, + multipcb_top_standoff[9], + multipcb_top_standoff[10], + multipcb_top_standoff[11], + multipcb_top_standoff[12]]; + translate([pcbhole_x,pcbhole_y,case_z]) standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "right_rear" && multipcb_top_rear_right_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + top_support = multipcb_top_sidewall_support == true ? multipcb_top_rear_right_support : "none"; + pcb_standoff = [multipcb_top_standoff[0], + multipcb_top_standoff[1], + top_height+top_rear_right_adjust-pcb_loc_z, + multipcb_top_standoff[3], + multipcb_top_standoff[4], + multipcb_top_standoff[5], + multipcb_top_standoff[6], + multipcb_top_standoff[7], + top_support, + multipcb_top_standoff[9], + multipcb_top_standoff[10], + multipcb_top_standoff[11], + multipcb_top_standoff[12]]; + translate([pcbhole_x,pcbhole_y,case_z]) standoff(pcb_standoff,[false,10,2,"default"]); + } + if (pcbhole_pos == "right_front" && multipcb_top_front_right_enable == true && (pcbhole_state == "top" || pcbhole_state == "both")) { + top_support = multipcb_top_sidewall_support == true ? multipcb_top_front_right_support : "none"; + pcb_standoff = [multipcb_top_standoff[0], + multipcb_top_standoff[1], + top_height+top_rear_right_adjust-pcb_loc_z, + multipcb_top_standoff[3], + multipcb_top_standoff[4], + multipcb_top_standoff[5], + multipcb_top_standoff[6], + multipcb_top_standoff[7], + top_support, + multipcb_top_standoff[9], + multipcb_top_standoff[10], + multipcb_top_standoff[11], + multipcb_top_standoff[12]]; + translate([pcbhole_x,pcbhole_y,case_z]) standoff(pcb_standoff,[false,10,2,"default"]); + } + } + } + } + } + } // extended standoffs if(ext_top_standoffs == true) { // extended right-rear standoff diff --git a/sbc_case_builder.json b/sbc_case_builder.json index a40413d..08a9704 100644 --- a/sbc_case_builder.json +++ b/sbc_case_builder.json @@ -6845,7 +6845,7 @@ "bottom_standoff_reverse": "false", "bottom_standoff_size": "m3", "bottom_standoff_support_height": "4", - "bottom_standoff_support_size": "10", + "bottom_standoff_support_size": "7", "bottom_standoff_type": "countersunk", "case_design": "shell", "case_offset_bz": "0", @@ -6907,7 +6907,7 @@ "ext_top_standoffs": "false", "fan_size": "0", "flat_blank_section": "false", - "floorthick": "2", + "floorthick": "1.5", "gap": "1", "gpio_opening": "default", "indents": "true", @@ -6918,6 +6918,56 @@ "move_leftside": "0", "move_rear": "0", "move_rightside": "0", + "multipcb_bottom_front_left_adjust": "0", + "multipcb_bottom_front_left_enable": "true", + "multipcb_bottom_front_left_support": "front", + "multipcb_bottom_front_right_adjust": "0", + "multipcb_bottom_front_right_enable": "true", + "multipcb_bottom_front_right_support": "front", + "multipcb_bottom_rear_left_adjust": "0", + "multipcb_bottom_rear_left_enable": "true", + "multipcb_bottom_rear_left_support": "rear", + "multipcb_bottom_rear_right_adjust": "0", + "multipcb_bottom_rear_right_enable": "true", + "multipcb_bottom_rear_right_support": "rear", + "multipcb_bottom_sidewall_support": "false", + "multipcb_bottom_standoff_diameter": "5.75", + "multipcb_bottom_standoff_hole_size": "3.4", + "multipcb_bottom_standoff_insert": "false", + "multipcb_bottom_standoff_insert_dia": "4.2", + "multipcb_bottom_standoff_insert_height": "5.1", + "multipcb_bottom_standoff_pillar": "hex", + "multipcb_bottom_standoff_reverse": "false", + "multipcb_bottom_standoff_size": "m2+", + "multipcb_bottom_standoff_support_height": "4", + "multipcb_bottom_standoff_support_size": "5.5", + "multipcb_bottom_standoff_type": "countersunk", + "multipcb_bottom_standoffs": "true", + "multipcb_top_front_left_adjust": "0", + "multipcb_top_front_left_enable": "true", + "multipcb_top_front_left_support": "front", + "multipcb_top_front_right_adjust": "0", + "multipcb_top_front_right_enable": "true", + "multipcb_top_front_right_support": "front", + "multipcb_top_rear_left_adjust": "0", + "multipcb_top_rear_left_enable": "true", + "multipcb_top_rear_left_support": "rear", + "multipcb_top_rear_right_adjust": "0", + "multipcb_top_rear_right_enable": "true", + "multipcb_top_rear_right_support": "rear", + "multipcb_top_sidewall_support": "false", + "multipcb_top_standoff_diameter": "5.75", + "multipcb_top_standoff_hole_size": "2.75", + "multipcb_top_standoff_insert": "false", + "multipcb_top_standoff_insert_dia": "4.2", + "multipcb_top_standoff_insert_height": "5.1", + "multipcb_top_standoff_pillar": "hex", + "multipcb_top_standoff_reverse": "true", + "multipcb_top_standoff_size": "m2.5", + "multipcb_top_standoff_support_height": "4", + "multipcb_top_standoff_support_size": "7", + "multipcb_top_standoff_type": "blind", + "multipcb_top_standoffs": "true", "pcb_loc_x": "0", "pcb_loc_y": "0", "pcb_loc_z": "0", @@ -6934,12 +6984,12 @@ "text_color": "Green", "text_font": "Nimbus Mono PS", "tol": "0.25", - "top_cover_pattern": "solid", + "top_cover_pattern": "hex_8mm", "top_front_left_adjust": "0", - "top_front_left_enable": "true", + "top_front_left_enable": "false", "top_front_left_support": "front", "top_front_right_adjust": "0", - "top_front_right_enable": "true", + "top_front_right_enable": "false", "top_front_right_support": "front", "top_rear_left_adjust": "0", "top_rear_left_enable": "true", @@ -6961,7 +7011,7 @@ "top_standoff_type": "blind", "uart_opening": "default", "view": "model", - "wallthick": "2" + "wallthick": "1.5" } }, "fileFormatVersion": "1" diff --git a/sbc_case_builder.scad b/sbc_case_builder.scad index 33fa2aa..87ccc0b 100644 --- a/sbc_case_builder.scad +++ b/sbc_case_builder.scad @@ -65,7 +65,7 @@ bottom_clearence = 3.5; //[-10:.01:10] // enable flat blank section for export flat_blank_section = false; -/* [Standard Motherboard Case Settings] */ +/* [Standard Motherboard Case Adjustments] */ // adjustment for ssi-eeb, ssi-ceb, atx, micro-atx, dtx, flex-atx, mini-dtx, mini-itx, mini-stx, nano-itx,nuc, pico-itx PCB thickness from 2mm default// standard_motherboard_thickness = 0; //[-3:.01:3] // rear io plate opening for standard form motherboards @@ -101,78 +101,6 @@ edge_fillet = 0; //[0:.5:6] // tolerance for fitted surfaces tol = .25; //[-.5:.0625:.5] -/* [Top Standoff Global Settings] */ -// enable case top standoffs -sbc_top_standoffs = true; -// reverse standoff vertical orientation -top_standoff_reverse = true; -// enable wall support for standoffs -top_sidewall_support = false; -top_standoff_size = "m3"; //[m2_tap, m2, m2+, m2.5_tap, m2.5, m2.5+, m3_tap, m3, m3+, m4_tap, m4, m4+, custom] -top_standoff_type = "blind"; //[none, countersunk, recessed, nut holder, blind] -top_standoff_pillar = "hex"; //[hex, round] -top_standoff_diameter = 5.75; //[0:.01:10] -top_standoff_hole_size = 2.75; //[0:.01:5] -top_standoff_support_size = 10; //[0:.01:15] -top_standoff_support_height = 4; //[0:.01:50] -top_standoff_insert = false; -top_standoff_insert_dia = 4.2; //.01 -top_standoff_insert_height = 5.1; //.01 - -/* [Top Standoff Individual Settings] */ -// case top - lower left standoff settings -top_rear_left_enable = true; -top_rear_left_adjust = 0; //[-20:.01:20] -top_rear_left_support = "rear"; //[none,left,rear,front,right] -// case top - upper left standoff settings -top_front_left_enable = true; -top_front_left_adjust = 0; //[-20:.01:20] -top_front_left_support = "front"; //[none,left,rear,front,right] -// case top - lower right standoff settings -top_rear_right_enable = true; -top_rear_right_adjust = 0; //[-20:.01:20] -top_rear_right_support = "rear"; //[none,left,rear,front,right] -// case top - upper right standoff settings -top_front_right_enable = true; -top_front_right_adjust = 0; //[-20:.01:20] -top_front_right_support = "front"; //[none,left,rear,front,right] - -/* [Bottom Standoff Global Settings] */ -// enable case bottom standoffs -sbc_bottom_standoffs = true; -// reverse standoff vertical orientation -bottom_standoff_reverse = false; -// enable wall support for standoffs -bottom_sidewall_support = false; -bottom_standoff_size = "m3"; //[m2_tap, m2, m2+, m2.5_tap, m2.5, m2.5+, m3_tap, m3, m3+, m4_tap, m4, m4+, custom] -bottom_standoff_type = "countersunk"; //[none, countersunk, recessed, nut holder, blind] -bottom_standoff_pillar = "hex"; //[hex, round] -bottom_standoff_diameter = 5.75; //[2:.01:10] -bottom_standoff_hole_size = 3.4; //[0:.01:5] -bottom_standoff_support_size = 10; //[1:.01:15] -bottom_standoff_support_height = 4; //[0:.01:50] -bottom_standoff_insert = false; -bottom_standoff_insert_dia = 4.2; //.01 -bottom_standoff_insert_height = 5.1; //.01 - -/* [Bottom Standoff Individual Settings] */ -// case bottom - rear left standoff settings -bottom_rear_left_enable = true; -bottom_rear_left_adjust = 0; //[-20:.01:20] -bottom_rear_left_support = "rear"; //[none,left,rear,front,right] -// case bottom - upper left standoff settings -bottom_front_left_enable = true; -bottom_front_left_adjust = 0; //[-20:.01:20] -bottom_front_left_support = "front"; //[none,left,rear,front,right] -// case bottom - lower right standoff settings -bottom_rear_right_enable = true; -bottom_rear_right_adjust = 0; //[-20:.01:20] -bottom_rear_right_support = "rear"; //[none,left,rear,front,right] -// case bottom - upper right standoff settings -bottom_front_right_enable = true; -bottom_front_right_adjust = 0; //[-20:.01:20] -bottom_front_right_support = "front"; //[none,left,rear,front,right] - /* [Fan and Vent Openings] */ // top cover pattern top_cover_pattern = "solid"; //[solid,hex_5mm,hex_8mm,linear_vertical,linear_horizontal,astroid] @@ -203,7 +131,79 @@ text_color = "Green"; // [Green, Black, Dimgrey, White, Yellow, Orange, Red, Dar // sbc information text font text_font = "Nimbus Mono PS"; // [Nimbus Mono PS, Liberation Mono, Noto Sans Mono] -/* [Extended Top Standoffs] */ +/* [SBC Top Standoff Global Settings] */ +// enable case top standoffs +sbc_top_standoffs = true; +// reverse standoff vertical orientation +top_standoff_reverse = true; +// enable wall support for standoffs +top_sidewall_support = false; +top_standoff_size = "m3"; //[m2_tap, m2, m2+, m2.5_tap, m2.5, m2.5+, m3_tap, m3, m3+, m4_tap, m4, m4+, custom] +top_standoff_type = "blind"; //[none, countersunk, recessed, nut holder, blind] +top_standoff_pillar = "hex"; //[hex, round] +top_standoff_diameter = 5.75; //[0:.01:10] +top_standoff_hole_size = 2.75; //[0:.01:5] +top_standoff_support_size = 10; //[0:.01:15] +top_standoff_support_height = 4; //[0:.01:50] +top_standoff_insert = false; +top_standoff_insert_dia = 4.2; //.01 +top_standoff_insert_height = 5.1; //.01 + +/* [SBC Top Standoff Individual Settings] */ +// case top - lower left standoff settings +top_rear_left_enable = true; +top_rear_left_adjust = 0; //[-20:.01:20] +top_rear_left_support = "rear"; //[none,left,rear,front,right] +// case top - upper left standoff settings +top_front_left_enable = true; +top_front_left_adjust = 0; //[-20:.01:20] +top_front_left_support = "front"; //[none,left,rear,front,right] +// case top - lower right standoff settings +top_rear_right_enable = true; +top_rear_right_adjust = 0; //[-20:.01:20] +top_rear_right_support = "rear"; //[none,left,rear,front,right] +// case top - upper right standoff settings +top_front_right_enable = true; +top_front_right_adjust = 0; //[-20:.01:20] +top_front_right_support = "front"; //[none,left,rear,front,right] + +/* [SBC Bottom Standoff Global Settings] */ +// enable case bottom standoffs +sbc_bottom_standoffs = true; +// reverse standoff vertical orientation +bottom_standoff_reverse = false; +// enable wall support for standoffs +bottom_sidewall_support = false; +bottom_standoff_size = "m3"; //[m2_tap, m2, m2+, m2.5_tap, m2.5, m2.5+, m3_tap, m3, m3+, m4_tap, m4, m4+, custom] +bottom_standoff_type = "countersunk"; //[none, countersunk, recessed, nut holder, blind] +bottom_standoff_pillar = "hex"; //[hex, round] +bottom_standoff_diameter = 5.75; //[2:.01:10] +bottom_standoff_hole_size = 3.4; //[0:.01:5] +bottom_standoff_support_size = 10; //[1:.01:15] +bottom_standoff_support_height = 4; //[0:.01:50] +bottom_standoff_insert = false; +bottom_standoff_insert_dia = 4.2; //.01 +bottom_standoff_insert_height = 5.1; //.01 + +/* [SBC Bottom Standoff Individual Settings] */ +// case bottom - rear left standoff settings +bottom_rear_left_enable = true; +bottom_rear_left_adjust = 0; //[-20:.01:20] +bottom_rear_left_support = "rear"; //[none,left,rear,front,right] +// case bottom - upper left standoff settings +bottom_front_left_enable = true; +bottom_front_left_adjust = 0; //[-20:.01:20] +bottom_front_left_support = "front"; //[none,left,rear,front,right] +// case bottom - lower right standoff settings +bottom_rear_right_enable = true; +bottom_rear_right_adjust = 0; //[-20:.01:20] +bottom_rear_right_support = "rear"; //[none,left,rear,front,right] +// case bottom - upper right standoff settings +bottom_front_right_enable = true; +bottom_front_right_adjust = 0; //[-20:.01:20] +bottom_front_right_support = "front"; //[none,left,rear,front,right] + +/* [Extended Case Top Standoffs] */ // enable case extended standoffs ext_top_standoffs = false; ext_top_standoff_reverse = true; @@ -219,7 +219,7 @@ ext_top_standoff_support_height = 4; //[0:.01:50] ext_top_standoff_insert = false; ext_top_standoff_insert_dia = 4.2; //.01 ext_top_standoff_insert_height = 5.1; //.01 -/* [Extended Top Standoff Individual Settings] */ +/* [Extended Case Top Standoff Individual Settings] */ // extended case top - lower left standoff settings ext_top_rear_left_enable = true; ext_top_rear_left_adjust = 0; //[-20:.01:20] @@ -237,7 +237,7 @@ ext_top_front_right_enable = true; ext_top_front_right_adjust = 0; //[-20:.01:20] ext_top_front_right_support = "front"; //[none,left,rear,front,right] -/* [Extended Bottom Standoffs] */ +/* [Extended Case Bottom Standoffs] */ // enable case bottom extended standoffs ext_bottom_standoffs = false; ext_bottom_standoff_reverse = false; @@ -254,7 +254,7 @@ ext_bottom_standoff_insert = false; ext_bottom_standoff_insert_dia = 4.2; //.01 ext_bottom_standoff_insert_height = 5.1; //.01 -/* [Extended Bottom Standoff Individual Settings] */ +/* [Extended Case Bottom Standoff Individual Settings] */ // extended case bottom - rear left standoff settings ext_bottom_rear_left_enable = true; ext_bottom_rear_left_adjust = 0; //[-20:.01:20] @@ -272,6 +272,75 @@ ext_bottom_front_right_enable = true; ext_bottom_front_right_adjust = 0; //[-20:.01:20] ext_bottom_front_right_support = "front"; //[none,left,rear,front,right] +/* [Multiple PCB Top Standoffs] */ +// enable multiple pcb standoffs +multipcb_top_standoffs = false; +multipcb_top_standoff_reverse = true; +// enable wall support for multiple pcb +multipcb_top_sidewall_support = false; +multipcb_top_standoff_size = "m2.5"; //[m2_tap, m2, m2+, m2.5_tap, m2.5, m2.5+, m3_tap, m3, m3+, m4_tap, m4, m4+, custom] +multipcb_top_standoff_type = "blind"; //[none, countersunk, recessed, nut holder, blind] +multipcb_top_standoff_pillar = "hex"; //[hex, round] +multipcb_top_standoff_diameter = 5.75; //[0:.01:10] +multipcb_top_standoff_hole_size = 2.75; //[0:.01:5] +multipcb_top_standoff_support_size = 7; //[0:.01:15] +multipcb_top_standoff_support_height = 4; //[0:.01:50] +multipcb_top_standoff_insert = false; +multipcb_top_standoff_insert_dia = 4.2; //.01 +multipcb_top_standoff_insert_height = 5.1; //.01 +/* [Multiple PCB Top Standoff Individual Settings] */ +// multiple pcb top - lower left standoff settings +multipcb_top_rear_left_enable = true; +multipcb_top_rear_left_adjust = 0; //[-20:.01:20] +multipcb_top_rear_left_support = "rear"; //[none,left,rear,front,right] +// multiple pcb - upper left standoff settings +multipcb_top_front_left_enable = true; +multipcb_top_front_left_adjust = 0; //[-20:.01:20] +multipcb_top_front_left_support = "front"; //[none,left,rear,front,right] +// multiple pcb top - lower right standoff settings +multipcb_top_rear_right_enable = true; +multipcb_top_rear_right_adjust = 0; //[-20:.01:20] +multipcb_top_rear_right_support = "rear"; //[none,left,rear,front,right] +// multiple pcb top - upper right standoff settings +multipcb_top_front_right_enable = true; +multipcb_top_front_right_adjust = 0; //[-20:.01:20] +multipcb_top_front_right_support = "front"; //[none,left,rear,front,right] + +/* [Multiple PCB Bottom Standoffs] */ +// enable multiple pcb extended standoffs +multipcb_bottom_standoffs = false; +multipcb_bottom_standoff_reverse = false; +// enable wall support for multiple pcb standoffs +multipcb_bottom_sidewall_support = false; +multipcb_bottom_standoff_size = "m2.5"; //[m2_tap, m2, m2+, m2.5_tap, m2.5, m2.5+, m3_tap, m3, m3+, m4_tap, m4, m4+, custom] +multipcb_bottom_standoff_type = "countersunk"; //[none, countersunk, recessed, nut holder, blind] +multipcb_bottom_standoff_pillar = "hex"; //[hex, round] +multipcb_bottom_standoff_diameter = 5.75; //[2:.01:10] +multipcb_bottom_standoff_hole_size = 3.4; //[0:.01:5] +multipcb_bottom_standoff_support_size = 7; //[1:.01:15] +multipcb_bottom_standoff_support_height = 4; //[0:.01:50] +multipcb_bottom_standoff_insert = false; +multipcb_bottom_standoff_insert_dia = 4.2; //.01 +multipcb_bottom_standoff_insert_height = 5.1; //.01 + +/* [Multiple PCB Bottom Standoff Individual Settings] */ +// multiple pcb bottom - rear left standoff settings +multipcb_bottom_rear_left_enable = true; +multipcb_bottom_rear_left_adjust = 0; //[-20:.01:20] +multipcb_bottom_rear_left_support = "rear"; //[none,left,rear,front,right] +// multiple pcb bottom - upper left standoff settings +multipcb_bottom_front_left_enable = true; +multipcb_bottom_front_left_adjust = 0; //[-20:.01:20] +multipcb_bottom_front_left_support = "front"; //[none,left,rear,front,right] +// multiple pcb bottom - lower right standoff settings +multipcb_bottom_rear_right_enable = true; +multipcb_bottom_rear_right_adjust = 0; //[-20:.01:20] +multipcb_bottom_rear_right_support = "rear"; //[none,left,rear,front,right] +// multiple pcb bottom - upper right standoff settings +multipcb_bottom_front_right_enable = true; +multipcb_bottom_front_right_adjust = 0; //[-20:.01:20] +multipcb_bottom_front_right_support = "front"; //[none,left,rear,front,right] + a = search([accessory_name],accessory_data); s = search([sbc_model],sbc_data); @@ -321,6 +390,7 @@ bottom_standoff = [bottom_standoff_size, bottom_standoff_insert, bottom_standoff_insert_dia, bottom_standoff_insert_height]; + ext_top_standoff = [ext_top_standoff_size, ext_top_standoff_diameter, 18, @@ -334,6 +404,7 @@ ext_top_standoff = [ext_top_standoff_size, ext_top_standoff_insert, ext_top_standoff_insert_dia, ext_top_standoff_insert_height]; + ext_bottom_standoff = [ext_bottom_standoff_size, ext_bottom_standoff_diameter, 6, @@ -347,6 +418,34 @@ ext_bottom_standoff = [ext_bottom_standoff_size, ext_bottom_standoff_insert, ext_bottom_standoff_insert_dia, ext_bottom_standoff_insert_height]; + +multipcb_top_standoff = [multipcb_top_standoff_size, + multipcb_top_standoff_diameter, + 18, + multipcb_top_standoff_hole_size, + multipcb_top_standoff_support_size, + multipcb_top_standoff_support_height, + multipcb_top_standoff_type, + multipcb_top_standoff_pillar, + multipcb_top_rear_left_support, + multipcb_top_standoff_reverse, + multipcb_top_standoff_insert, + multipcb_top_standoff_insert_dia, + multipcb_top_standoff_insert_height]; + +multipcb_bottom_standoff = [multipcb_bottom_standoff_size, + multipcb_bottom_standoff_diameter, + 6, + multipcb_bottom_standoff_hole_size, + multipcb_bottom_standoff_support_size, + multipcb_bottom_standoff_support_height, + multipcb_bottom_standoff_type, + multipcb_bottom_standoff_pillar, + multipcb_bottom_rear_left_support, + multipcb_bottom_standoff_reverse, + multipcb_bottom_standoff_insert, + multipcb_bottom_standoff_insert_dia, + multipcb_bottom_standoff_insert_height]; adj = .01; $fn=90; diff --git a/sbc_case_builder_accessories.cfg b/sbc_case_builder_accessories.cfg index 9e65249..3e2f89b 100644 --- a/sbc_case_builder_accessories.cfg +++ b/sbc_case_builder_accessories.cfg @@ -446,5 +446,30 @@ accessory_data = [ "add2","standoff",113,100,0,"bottom",[0,0,0],["sbc",false,false,false],[0,0,0],[["custom",5.75,5,3.6,10,4,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"], "add2","standoff",113,125,0,"bottom",[0,0,0],["sbc",false,false,false],[0,0,0],[["custom",5.75,5,3.6,10,4,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"], "model","hk_m1s_ups",2,97,5,"bottom",[0,0,0],["sbc",false,false,false],[0,0,0],[0],[true,110,2,"default"]], + + // environmental sensors + ["env_sensors", + // i2c radial hub holder + "model","stl_model",31,60.75,4,"bottom",[90,0,180],["sbc",false,false,false],[0,0,0],[1,"./adafruit/5625 Stemma 5 Port Hub.stl"],[false,10,2,"default"], + "add2","pcb_holder",5,60.75,1,"bottom",[0,0,0],["case",false,false,false],[26.5,35,1.65],[2],[false,10,2,"default"], + // BMP388 and holder + "model","stl_model",38,121,22,"bottom",[90,180,90],["sbc",false,false,false],[0,0,0],[1,"./adafruit/3966 BMP388 QT.stl",0,0],[false,10,2,"default"], + "add2","pcb_holder",39.5,95,1,"bottom",[0,0,90],["case",false,false,false],[26.5,35,1.65],[2],[false,10,2,"default"], + // SCD30 and holder + "model","stl_model",55,69,27,"bottom",[270,0,90],["sbc",false,false,false],[0,0,0],[1,"./adafruit/4867 Adafruit SCD30.stl"],[false,10,2,"default"], + "add2","pcb_holder",55,68,1,"bottom",[0,0,90],["case",false,false,false],[53,35,1.65],[2],[false,10,2,"default"], + // ST7789 IPS TFT Display and holder + "model","stl_model",67,61,4,"bottom",[90,270,270],["sbc",false,false,false],[0,0,0],[1,"./adafruit/4311 2in TFT IPS Display.stl"],[false,10,2,"default"], + "add2","pcb_holder",65.4,121,1,"bottom",[0,0,270],["case",false,false,false],[61,35,1.65],[2],[false,10,2,"default"], + // PMSA003I Partical Air Quality + "model","stl_model",0,70,4,"bottom",[0,0,0],["sbc",false,false,false],[0,0,0],[1,"./adafruit/4632 PMSA003I.stl"],[false,10,2,"default"], + "add2","standoff",2.75,72.5,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[["m2",5.75,4,3.6,7,3,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"], + "add2","standoff",2.75,117.5,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[["m2",5.75,4,3.6,7,3,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"], + "add2","standoff",32.75,72.5,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[["m2",5.75,4,3.6,7,3,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"], + "add2","standoff",32.75,117.5,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[["m2",5.75,4,3.6,8,3,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"], + "sub","vent",-3,100,11,"top",[0,0,90],["case",false,false,false],[2,7,4],[1,5,"vertical",1],[false,10,2,"default"], + // SGP30 VOC and eCO2 holder + "add2","pcb_holder",39.5,61,1,"bottom",[0,0,90],["case",false,false,false],[26.5,35,1.65],[2],[false,10,2,"default"]] + ];