diff --git a/get_customizer_values.scad b/get_customizer_values.scad new file mode 100644 index 0000000..7dfbb8b --- /dev/null +++ b/get_customizer_values.scad @@ -0,0 +1,17 @@ +// Gets a list of SBCs from the SBC Model Framework and Accessory sets +// for use with SBC Case Builder. +// After running this script, copy the output from the first Echo command into the +// list of SBC boards in `sbc_case_builder.scad:80` +// Also copy the output from the second Echo command into the list of case acceessory +// sets in `sbc_case_builder.scad:160` + +include <./SBC_Model_Framework/sbc_models.cfg>; +include <./sbc_case_builder_accessories.cfg>; + +boards = [for(i=[0:1:len(sbc_data)-1]) sbc_data[i][0]]; +echo("Copy the following to `sbc_case_builder.scad` for the `sbc_model` variable"); +echo(boards); + +accessory_sets = [for(i=[0:1:len(accessory_data)-1]) accessory_data[i][0]]; +echo("Copy the following to `sbc_case_builder.scad` for the `accessory_name` variable"); +echo(accessory_sets); \ No newline at end of file diff --git a/sbc_case_builder.json b/sbc_case_builder.json index 97e84ba..f65e999 100644 --- a/sbc_case_builder.json +++ b/sbc_case_builder.json @@ -12939,6 +12939,63 @@ "vu_rotation": "[15, 0, 0]", "wallthick": "2" }, + "rpi4b_shell_geeekpi_poe_hat": { + "$fn": "90", + "accessory_highlight": "false", + "accessory_name": "rpi4b_shell_geeekpi_poe_hat", + "adjust": "0.01", + "bottom_ext_standoff": "[6.75, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]", + "bottom_front_left": "0", + "bottom_front_right": "0", + "bottom_rear_left": "0", + "bottom_rear_right": "0", + "bottom_standoff": "[6.75, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]", + "c_fillet": "3", + "case_design": "shell", + "case_ext_standoffs": "false", + "case_ffn": "90", + "case_fn": "360", + "case_offset_bz": "0", + "case_offset_tz": "15", + "case_offset_x": "0", + "case_offset_y": "0", + "case_style": "none", + "cooling": "fan", + "exhaust_vents": "vent", + "fillet": "0", + "floorthick": "2", + "gap": "1", + "gpio_opening": "none", + "indents": "true", + "lip": "5", + "lower_bottom": "0", + "move_front": "0", + "move_leftside": "0", + "move_rear": "0", + "move_rightside": "0", + "pcb_loc_x": "0", + "pcb_loc_y": "0", + "pcb_loc_z": "0", + "raise_top": "0", + "sata_punchout": "false", + "sbc_bottom_standoffs": "true", + "sbc_highlight": "false", + "sbc_model": "rpi4b", + "sbc_off": "false", + "sbc_top_standoffs": "true", + "sidethick": "2", + "sidewall_support": "true", + "tol": "0.25", + "top_ext_standoff": "[6.75, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]", + "top_front_left": "-11", + "top_front_right": "-11", + "top_rear_left": "-11", + "top_rear_right": "0", + "top_standoff": "[6.75, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]", + "view": "model", + "vu_rotation": "[15, 0, 0]", + "wallthick": "2" + }, "rpi4b_panel": { "$fn": "90", "accessory_highlight": "false", diff --git a/sbc_case_builder.scad b/sbc_case_builder.scad index 80aebd2..af1fad3 100644 --- a/sbc_case_builder.scad +++ b/sbc_case_builder.scad @@ -77,7 +77,7 @@ case_design = "shell"; // [shell,panel,stacked,tray,round,hex,snap,fitted] // base case style case_style = "none"; // ["none","vu5","vu7","sides"] // single board computer model -sbc_model = "c4"; // [c1+,c2,c4,xu4,xu4q,mc1,hc1,hc4,m1,n1,n2,n2+,h2,show2,rock64,rockpro64,rpizero,rpizero2w,rpi1a+,rpi1b+,rpi3a+,rpi3b,rpi3b+,rpi4b,jetsonnano,rockpi4b+,rockpi4c,rockpi4c+,vim1,vim2,vim3l,vim3,vim4,tinkerboard,tinkerboard-s,tinkerboard-2,tinkerboard-r2,opizero,opizero2,opir1plus_lts,test] +sbc_model = "c1+"; // ["c1+", "c2", "c4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2+_noheatsink", "m1", "m1_noheatsink", "h2", "hc4", "show2", "rpizero", "rpizero2w", "rpi1a+", "rpi1b+", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "a64", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "atomicpi", "jetsonnano", "rockpi4b+", "rockpi4c", "rockpi4c+", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-r2", "opizero", "opizero2", "opir1plus_lts", "test"] // sbc location x axis pcb_loc_x = 0; //[0:.5:200] // sbc location y axis @@ -157,7 +157,8 @@ cooling = "fan"; // [none,vents,fan,custom] // exhaust vents exhaust_vents = "vent"; // [none,vent] // case accessory group to load -accessory_name = "none"; // [none,c1+_shell_boombox,c1+_panel_boombox,c1+_panel_lcd3.5,c1+_desktop_lcd3.5,c1+_tray_boombox,c1+_tray_vu5,c1+_tray_vu7,c1+_round,c1+_hex,c2_shell,c2_shell_boombox,c2_panel,c2_panel_boombox,c2_panel_lcd3.5,c2_desktop_lcd3.5,c2_deskboom_lcd3.5,c2_stacked,c2_tray,c2_tray_sides,c2_tray_boombox,c2_tray_vu5,c2_tray_vu7,c2_round,c2_hex,c4_shell,c4_shell_boombox,c4_shell_vu7c,c4_panel,c4_panel_lcd3.5,c4_desktop_lcd3.5,c4_deskboom_lcd3.5,c4_panel_boombox,c4_stacked,c4_tray,c4_tray_sides,c4_tray_boombox,c4_tray_vu5,c4_tray_vu7,c4_round,c4_hex,xu4_tray_vu5,xu4_tray_vu7,xu4q_tray_vu5,xu4q_tray_vu7,n1_tray_vu5,n1_tray_vu7,n1_round,n1_hex,n2_tray_vu5,n2_tray_vu7,n2+_tray_vu5,n2+_tray_vu7,n2+_tray_vu7_fan,m1_panel,m1_tray,m1_tray_drive,m1_tray_sides,m1_tray_vu5,m1_tray_vu7,h2_shell,h2_panel,h2_stacked,h2_tray,h2_tray_sides,h2_tray_vu5,h2_tray_vu7,h2_tray_router,h2_router_station,h2_lowboy,h2_lowboy_router,h2_shell_router,h2_shell_router-ssd,h2_round,h2_hex,hc4_shell,hc4_panel,hc4_stacked,hc4_tray,hc4_tray_sides,hc4_tray_vu5,hc4_tray_vu7,hc4_tray_drivebox2.5,hc4_shell_drivebox2.5,hc4_shell_drivebox2.5v,hc4_shell_drivebox3.5,jetsonnano_shell,jetsonnano_panel,jetsonnano_stacked,jetsonnano_tray,jetsonnano_tray_sides,jetsonnano_round,jetsonnano_hex,jetsonnano_snap,jetsonnano_fitted,rock64_shell,rock64_panel,rock64_stacked,rock64_tray,rock64_tray_sides,rock64_round,rock64_hex,rock64_snap,rock64_fitted,rockpro64_shell,rockpro64_panel,rockpro64_stacked,rockpro64_tray,rockpro64_tray_sides,rockpro64_round,rockpro64_hex,rockpro64_snap,rockpro64_fitted,show2_shell,rpizero_shell,rpizero_panel,rpizero_stacked,rpizero_tray,rpizero_tray_sides,rpizero_snap,rpizero_fitted,rpizero2w_shell,rpizero2w_panel,rpizero2w_stacked,rpizero2w_tray,rpizero2w_tray_sides,rpizero2w_snap,rpizero2w_fitted,rpi1a+_shell,rpi1a+_panel,rpi1a+_stacked,rpi1a+_tray,rpi1a+_tray_sides,rpi1a+_round,rpi1a+_hex,rpi1a+_snap,rpi1a+_fitted,rpi1b+_shell,rpi1b+_panel,rpi1b+_stacked,rpi1b+_tray,rpi1b+_tray_sides,rpi1b+_round,rpi1b+_hex,rpi1b+_snap,rpi1b+_fitted,rpi3a+_shell,rpi3a+_panel,rpi3a+_stacked,rpi3a+_tray,rpi3a+_tray_sides,rpi3a+_round,rpi3a+_hex,rpi3a+_snap,rpi3a+_fitted,rpi3b_shell,rpi3b_panel,rpi3b_stacked,rpi3b_tray,rpi3b_tray_sides,rpi3b_round,rpi3b_hex,rpi3b_snap,rpi3b_fitted,rpi3b+_shell,rpi3b+_panel,rpi3b+_stacked,rpi3b+_tray,rpi3b+_tray_sides,rpi3b+_round,rpi3b+_hex,rpi3b+_snap,rpi3b+_fitted,rpi4b_shell,rpi4b_panel,rpi4b_stacked,rpi4b_tray,rpi4b_tray_sides,rpi4b_round,rpi4b_hex,rpi4b_snap,rpi4b_fitted,rockpi4b+_shell,rockpi4b+_panel,rockpi4b+_stacked,rockpi4b+_tray,rockpi4b+_tray_sides,rockpi4b+_round,rockpi4b+_hex,rockpi4b+_snap,rockpi4b+_fitted,rockpi4c_shell,rockpi4c_panel,rockpi4c_stackedrockpi4c_tray,rockpi4c_tray_sides,rockpi4c_round,rockpi4c_hex,rockpi4c_snap,rockpi4c_fitted,rockpi4c+_shell,rockpi4c+_panel,rockpi4c+_stacked,rockpi4c+_tray,rockpi4c+_tray_sides,rockpi4c+_round,rockpi4c+_hex,rockpi4c+_snap,rockpi4c+_fitted,vim1_shell,vim1_panel,vim1_stacked,vim1_tray,vim1_tray_sides,vim1_snap,vim1_round,vim1_hex,vim1_fitted,vim2_shell,vim2_panel,vim2_stacked,vim2_tray,vim2_tray_sides,vim2_round,vim2_hex,vim2_snap,vim2_fitted,vim3l_shell,vim3l_panel,vim3l_stacked,vim3l_tray,vim3l_tray_sides,vim3l_round,vim3l_hex,vim3l_snap,vim3l_fitted,vim3_shell,vim3_panel,vim3_stacked,vim3_tray,vim3_tray_sides,vim3_round,vim3_hex,vim3_snap,vim3_fitted,vim1_shell,vim4_panel,vim4_stacked,vim4_tray,vim4_tray_sides,vim4_round,vim4_hex,vim4_snap,vim4_fitted,tinkerboard_shell,tinkerboard_panel,tinkerboard_stacked,tinkerboard_tray,tinkerboard_tray_sides,tinkerboard_round,tinkerboard_hex,tinkerboard_snap,tinkerboard_fitted,tinkerboard-s_shell,tinkerboard-s_panel,tinkerboard-s_stacked,tinkerboard-s_tray,tinkerboard-s_tray_sides,tinkerboard-s_round,tinkerboard-s_hex,tinkerboard-s_snap,tinkerboard-s_fitted,tinkerboard-2_shell,tinkerboard-2_panel,tinkerboard-2_stacked,tinkerboard-2_tray,tinkerboard-2_tray_sides,tinkerboard-2_round,tinkerboard-2_hex,tinkerboard-2_snap,tinkerboard-2_fitted,tinkerboard-r2_shell,tinkerboard-r2_panel,tinkerboard-r2_stacked,tinkerboard-r2_tray,tinkerboard-r2_tray_sides,tinkerboard-r2_round,tinkerboard-r2_hex,tinkerboard-r2_snap,tinkerboard-r2_fitted,hk_uart] + +accessory_name = "none"; // ["none", "c1+_shell_boombox", "c1+_panel_boombox", "c1+_panel_lcd3.5", "c1+_desktop_lcd3.5", "c1+_deskboom_lcd3.5", "c1+_tray_boombox", "c1+_round", "c1+_hex", "c2_shell_boombox", "c2_panel_boombox", "c2_panel_lcd3.5", "c2_desktop_lcd3.5", "c2_deskboom_lcd3.5", "c2_tray_boombox", "c2_round", "c2_hex", "c4_shell_boombox", "c4_panel_lcd3.5", "c4_desktop_lcd3.5", "c4_deskboom_lcd3.5", "c4_panel_boombox", "c4_tray_boombox", "c4_round", "c4_hex", "hc4_tray_drivebox2.5", "hc4_shell_drivebox2.5", "hc4_shell_drivebox2.5v", "hc4_shell_drivebox3.5", "n1_round", "n1_hex", "n2+_tray_vu7_fan", "m1_panel", "m1_tray", "m1_tray_drive", "m1_tray_sides", "m1_tray_vu5", "m1_tray_vu7", "h2_shell", "h2_shell_router", "h2_shell_router-ssd", "h2_lowboy", "h2_lowboy_router", "h2_tray", "h2_tray_sides", "h2_tray_router", "h2_router_station", "h2_round", "h2_hex", "jetsonnano_shell", "jetsonnano_panel", "jetsonnano_stacked", "jetsonnano_tray", "jetsonnano_tray_sides", "jetsonnano_round", "jetsonnano_hex", "jetsonnano_snap", "jetsonnano_fitted", "rock64_shell", "rock64_panel", "rock64_stacked", "rock64_tray", "rock64_tray_sides", "rock64_round", "rock64_hex", "rock64_snap", "rock64_fitted", "rockpro64_shell", "rockpro64_panel", "rockpro64_stacked", "rockpro64_tray", "rockpro64_tray_sides", "rockpro64_round", "rockpro64_hex", "rockpro64_snap", "rockpro64_fitted", "show2_shell", "rpi1a+_shell", "rpi1a+_panel", "rpi1a+_stacked", "rpi1a+_tray", "rpi1a+_tray_sides", "rpi1a+_round", "rpi1a+_hex", "rpi1a+_snap", "rpi1a+_fitted", "rpi1b+_shell", "rpi1b+_panel", "rpi1b+_stacked", "rpi1b+_tray", "rpi1b+_tray_sides", "rpi1b+_round", "rpi1b+_hex", "rpi1b+_snap", "rpi1b+_fitted", "rpi3a+_shell", "rpi3a+_panel", "rpi3a+_stacked", "rpi3a+_tray", "rpi3a+_tray_sides", "rpi3a+_round", "rpi3a+_hex", "rpi3a+_snap", "rpi3a+_fitted", "rpi3b_shell", "rpi3b_panel", "rpi3b_stacked", "rpi3b_tray", "rpi3b_tray_sides", "rpi3b_round", "rpi3b_hex", "rpi3b_snap", "rpi3b_fitted", "rpi3b+_shell", "rpi3b+_panel", "rpi3b+_stacked", "rpi3b+_tray", "rpi3b+_tray_sides", "rpi3b+_round", "rpi3b+_hex", "rpi3b+_snap", "rpi3b+_fitted", "rpi4b_shell", "rpi4b_panel", "rpi4b_stacked", "rpi4b_tray", "rpi4b_tray_sides", "rpi4b_round", "rpi4b_hex", "rpi4b_snap", "rpi4b_fitted", "rockpi4b+_shell", "rockpi4b+_panel", "rockpi4b+_stacked", "rockpi4b+_tray", "rockpi4b+_tray_sides", "rockpi4b+_round", "rockpi4b+_hex", "rockpi4b+_snap", "rockpi4b+_fitted", "rockpi4c_shell", "rockpi4c_panel", "rockpi4c_stacked", "rockpi4c_tray", "rockpi4c_tray_sides", "rockpi4c_round", "rockpi4c_hex", "rockpi4c_snap", "rockpi4c_fitted", "rockpi4c+_shell", "rockpi4c+_panel", "rockpi4c+_stacked", "rockpi4c+_tray", "rockpi4c+_tray_sides", "rockpi4c+_round", "rockpi4c+_hex", "rockpi4c+_snap", "rockpi4c+_fitted", "vim1_shell", "vim1_panel", "vim1_stacked", "vim1_tray", "vim1_tray_sides", "vim1_round", "vim1_hex", "vim1_snap", "vim1_fitted", "vim2_shell", "vim2_panel", "vim2_stacked", "vim2_tray", "vim2_tray_sides", "vim2_round", "vim2_hex", "vim2_snap", "vim2_fitted", "vim3l_shell", "vim3l_panel", "vim3l_stacked", "vim3l_tray", "vim3l_tray_sides", "vim3l_round", "vim3l_hex", "vim3l_snap", "vim3l_fitted", "vim3_shell", "vim3_panel", "vim3_stacked", "vim3_tray", "vim3_tray_sides", "vim3_round", "vim3_hex", "vim3_snap", "vim3_fitted", "vim4_shell", "vim4_panel", "vim4_stacked", "vim4_tray", "vim4_tray_sides", "vim4_round", "vim4_hex", "vim4_snap", "vim4_fitted", "tinkerboard_shell", "tinkerboard_panel", "tinkerboard_stacked", "tinkerboard_tray", "tinkerboard_tray_sides", "tinkerboard_round", "tinkerboard_hex", "tinkerboard_snap", "tinkerboard_fitted", "tinkerboard-s_shell", "tinkerboard-s_panel", "tinkerboard-s_stacked", "tinkerboard-s_tray", "tinkerboard-s_tray_sides", "tinkerboard-s_round", "tinkerboard-s_hex", "tinkerboard-s_snap", "tinkerboard-s_fitted", "tinkerboard-2_shell", "tinkerboard-2_panel", "tinkerboard-2_stacked", "tinkerboard-2_tray", "tinkerboard-2_tray_sides", "tinkerboard-2_round", "tinkerboard-2_hex", "tinkerboard-2_snap", "tinkerboard-2_fitted", "tinkerboard-r2_shell", "tinkerboard-r2_panel", "tinkerboard-r2_stacked", "tinkerboard-r2_tray", "tinkerboard-r2_tray_sides", "tinkerboard-r2_round", "tinkerboard-r2_hex", "tinkerboard-r2_snap", "tinkerboard-r2_fitted", "hk_uart"] a = search([accessory_name],accessory_data); s = search([sbc_model],sbc_data); @@ -2581,4 +2582,4 @@ module parametric_move_sub(type,loc_x,loc_y,loc_z,face,rotation,parametric, face,rotation,size_x,size_y,size_z,data_1,data_2,data_3,data_4); } } -} \ No newline at end of file +} diff --git a/sbc_case_builder_accessories.cfg b/sbc_case_builder_accessories.cfg index 3b32fd4..908aaa3 100644 --- a/sbc_case_builder_accessories.cfg +++ b/sbc_case_builder_accessories.cfg @@ -67,6 +67,7 @@ */ accessory_data = [ + ["none"], // Odroid-C1+ ["c1+_shell_boombox", @@ -977,6 +978,9 @@ accessory_data = [ ["rpi4b_shell", "sub","fan",10,10,24.5,"top",[0,0,0],["case",true,true,true],40,0,6,2,0,"",0], // sub fan opening + ["rpi4b_shell_geeekpi_poe_hat", + "sub","fan",12,10,24.5,"top",[0,0,0],["case",true,true,true],40,0,6,2,0,"",0], // sub fan opening + ["rpi4b_panel", "sub","fan",10,10,24.5,"top",[0,0,0],["case",true,true,true],40,0,6,2,0,"",0], // sub fan opening diff --git a/sbc_case_builder_library.scad b/sbc_case_builder_library.scad index 34516ca..c91d779 100644 --- a/sbc_case_builder_library.scad +++ b/sbc_case_builder_library.scad @@ -2422,11 +2422,12 @@ module fan_mask(size, thick, style) { size == 80 ? 71.5 : size * 0.8; // Use 80% as default bar_width = size < 40 ? 2 : 3; - ring_width = size < 40 ? 5 : 4; + ring_width = size <= 40 ? 3 : 8; screw_offset = (size - inner) / 2; translate_xy = size * 0.5; - base_ring_size = size * 0.9; + rings = 5; + base_ring_size = (size * 0.9) / rings; ring_height = thick + 2; ring_diff_height = ring_height + 2; @@ -2438,13 +2439,35 @@ module fan_mask(size, thick, style) { translate([screw_offset, size-screw_offset, 0]) cylinder(d=3, h=thick+2); translate([size-screw_offset, size-screw_offset, 0]) cylinder(d=3, h=thick+2); - // fan grates - for(i=[0:8:inner]) { + // fan grates; + for(i=[0:rings]) { difference() { - translate([translate_xy, translate_xy, 0]) cylinder(d=base_ring_size - i, h=ring_height); - translate([translate_xy, translate_xy, -1]) cylinder(d=base_ring_size - i - ring_width, h=ring_diff_height); + translate([translate_xy, translate_xy, 0]) cylinder(d=base_ring_size * i, h=ring_height); + translate([translate_xy, translate_xy, -1]) cylinder(d=base_ring_size * i - ring_width, h=ring_diff_height); } } + difference() { + translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-10); + translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-14); + } + difference() { + translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-18); + translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-22); + } + difference() { + translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-26); + translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-30); + } + difference() { + translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-34); + translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-38); + } +// translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-34); + // mount holes + translate ([size-4,size-4,-1]) cylinder(h=thick+2, d=3); + translate ([size-4,4,-1]) cylinder(h=thick+2, d=3); + translate ([4,size-4,-1]) cylinder(h=thick+2, d=3); + translate ([4,4,-1]) cylinder(h=thick+2, d=3); } // cross bars