From 0c7e482576bd4ac24ff86fd535cc06aa4b9e837f Mon Sep 17 00:00:00 2001 From: Edward Kisiel Date: Sat, 27 Aug 2022 19:45:38 -0400 Subject: [PATCH] add round case for low width/depth ratio sbc, fixed vent location, added rj-45_short mask --- sbc_case_builder.json | 52 ++++++++++- sbc_case_builder.scad | 155 ++++++++++++++++++++++--------- sbc_case_builder_accessories.cfg | 9 +- sbc_case_builder_library.scad | 21 ++++- 4 files changed, 185 insertions(+), 52 deletions(-) diff --git a/sbc_case_builder.json b/sbc_case_builder.json index 4b950ae..1c9cef5 100644 --- a/sbc_case_builder.json +++ b/sbc_case_builder.json @@ -15649,7 +15649,57 @@ "view": "model", "vu_rotation": "[15, 0, 0]", "wallthick": "2" - } }, + "My_Custom_C4_Case": { + "$fn": "90", + "accessory_highlight": "false", + "accessory_name": "hk_uart", + "adjust": "0.01", + "bottom_ext_standoff": "[6.75, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]", + "bottom_standoff": "[6.75, 8, 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": "0", + "case_offset_x": "30", + "case_offset_y": "0", + "case_style": "none", + "cooling": "custom", + "exhaust_vents": "vent", + "fillet": "0", + "floorthick": "2", + "gap": "1", + "gpio_opening": "punchout", + "indents": "true", + "lip": "5", + "lower_bottom": "0", + "mode": "none", + "move_front": "0", + "move_leftside": "0", + "move_rear": "0", + "move_rightside": "0", + "pcb_loc_x": "30", + "pcb_loc_y": "0", + "pcb_loc_z": "0", + "raise_top": "0", + "sata_punchout": "false", + "sbc_bottom_standoffs": "true", + "sbc_highlight": "false", + "sbc_model": "c4", + "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_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" + } + }, "fileFormatVersion": "1" } diff --git a/sbc_case_builder.scad b/sbc_case_builder.scad index e7dc278..0886d4b 100644 --- a/sbc_case_builder.scad +++ b/sbc_case_builder.scad @@ -137,7 +137,7 @@ bottom_ext_standoff = [6.75,5,3.6,10,4,1,0,0,0,4.5,5.1]; /* [Case Accessories] */ // 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,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,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_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_fitted,vim2_shell,vim2_panel,vim2_stacked,vim2_tray,vim2_tray_sides,vim2_snap,vim2_fitted,vim3l_shell,vim3l_panel,vim3l_stacked,vim3l_tray,vim3l_tray_sides,vim3l_snap,vim3l_fitted,vim3_shell,vim3_panel,vim3_stacked,vim3_tray,vim3_tray_sides,vim3_snap,vim3_fitted,vim1_shell,vim4_panel,vim4_stacked,vim4_tray,vim4_tray_sides,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,test] +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,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,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_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_fitted,vim2_shell,vim2_panel,vim2_stacked,vim2_tray,vim2_tray_sides,vim2_snap,vim2_fitted,vim3l_shell,vim3l_panel,vim3l_stacked,vim3l_tray,vim3l_tray_sides,vim3l_snap,vim3l_fitted,vim3_shell,vim3_panel,vim3_stacked,vim3_tray,vim3_tray_sides,vim3_snap,vim3_fitted,vim1_shell,vim4_panel,vim4_stacked,vim4_tray,vim4_tray_sides,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); @@ -527,39 +527,75 @@ module case_bottom(case_design) { cylinder_fillet_inside(h=bottom_height+adjust+floorthick+lip, r=(case_diameter/2)-lip/2,top=0,bottom=fillet-1, $fn=case_fn, fillet_fn=case_ffn, center=true); - translate([-16,(depth/2)-150,-adjust]) - cube([width+10,300,case_z-2*floorthick-2]); - translate([width-9,(depth/2)-62.5,bottom_height]) - cube([20,110,top_height-2*floorthick-2]); - } - - } - if(case_design == "hex") { - difference() { - translate([pcb_width/2,pcb_depth/2,bottom_height/2]) rotate([0,0,30]) - cylinder_fillet_inside(h=bottom_height, r=case_diameter/2, - top=0, bottom=fillet, $fn=6, fillet_fn=case_ffn, center=true); - translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+floorthick]) rotate([0,0,30]) - cylinder_fillet_inside(h=bottom_height+adjust,r=(case_diameter/2)-lip/2,top=0, - bottom=fillet-1,$fn=6,fillet_fn=case_ffn, center=true); - difference() { - translate([pcb_width/2,pcb_depth/2,bottom_height-lip]) rotate([0,0,30]) - cylinder(h=lip+adjust,r=(case_diameter/2)+1, $fn=6); - translate([pcb_width/2,pcb_depth/2,bottom_height-lip]) rotate([0,0,30]) - cylinder(h=lip+2*adjust,r=(case_diameter/2)-lip/4, $fn=6); + if(width/depth >= 1.4 && sbc_model != "vim1" && sbc_model != "vim2" && + sbc_model != "vim3l" && sbc_model != "vim3" && sbc_model != "vim4") { + translate([-16,(depth/2)-150,-adjust]) + cube([width+10,300,case_z-2*floorthick-2]); + translate([width-9,(depth/2)-62.5,bottom_height]) + cube([20,110,top_height-2*floorthick-2]); + } + else { + translate([-width/2,0,-adjust]) + cube([300,depth+100,case_z-2*floorthick-2]); + translate([(-width+50)/2,-50,bottom_height]) + cube([width+50,50+adjust,top_height-2*floorthick-2]); } } - difference() { - translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+2*floorthick]) rotate([0,0,30]) - cylinder_fillet_inside(h=bottom_height+adjust+floorthick+lip, - r=(case_diameter/2)-lip/2,top=0, bottom=fillet-1, $fn=6, - fillet_fn=case_ffn, center=true); - translate([-16,(depth/2)-150,-adjust]) - cube([width+10,300,case_z-2*floorthick-2]); - translate([width-9,(depth/2)-62.5,bottom_height]) - cube([20,110,top_height-2*floorthick-2]); + } + if(case_design == "hex") { + if(width/depth >= 1.4 && sbc_model != "vim1" && sbc_model != "vim2" && + sbc_model != "vim3l" && sbc_model != "vim3" && sbc_model != "vim4") { + difference() { + translate([pcb_width/2,pcb_depth/2,bottom_height/2]) rotate([0,0,30]) + cylinder_fillet_inside(h=bottom_height, r=case_diameter/2, + top=0, bottom=fillet, $fn=6, fillet_fn=case_ffn, center=true); + translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+floorthick]) rotate([0,0,30]) + cylinder_fillet_inside(h=bottom_height+adjust,r=(case_diameter/2)-lip/2,top=0, + bottom=fillet-1,$fn=6,fillet_fn=case_ffn, center=true); + difference() { + translate([pcb_width/2,pcb_depth/2,bottom_height-lip]) rotate([0,0,30]) + cylinder(h=lip+adjust,r=(case_diameter/2)+1, $fn=6); + translate([pcb_width/2,pcb_depth/2,bottom_height-lip]) rotate([0,0,30]) + cylinder(h=lip+2*adjust,r=(case_diameter/2)-lip/4, $fn=6); + } + } + difference() { + translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+2*floorthick]) rotate([0,0,30]) + cylinder_fillet_inside(h=bottom_height+adjust+floorthick+lip, + r=(case_diameter/2)-lip/2,top=0, bottom=fillet-1, $fn=6, + fillet_fn=case_ffn, center=true); + translate([-16,(depth/2)-150,-adjust]) + cube([width+10,300,case_z-2*floorthick-2]); + translate([width-9,(depth/2)-62.5,bottom_height]) + cube([20,110,top_height-2*floorthick-2]); + } + } + else { + difference() { + translate([pcb_width/2,pcb_depth/2,bottom_height/2]) rotate([0,0,0]) + cylinder_fillet_inside(h=bottom_height, r=case_diameter/2, + top=0, bottom=fillet, $fn=6, fillet_fn=case_ffn, center=true); + translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+floorthick]) rotate([0,0,0]) + cylinder_fillet_inside(h=bottom_height+adjust,r=(case_diameter/2)-lip/2,top=0, + bottom=fillet-1,$fn=6,fillet_fn=case_ffn, center=true); + difference() { + translate([pcb_width/2,pcb_depth/2,bottom_height-lip]) rotate([0,0,0]) + cylinder(h=lip+adjust,r=(case_diameter/2)+1, $fn=6); + translate([pcb_width/2,pcb_depth/2,bottom_height-lip]) rotate([0,0,0]) + cylinder(h=lip+2*adjust,r=(case_diameter/2)-lip/4, $fn=6); + } + } + difference() { + translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+2*floorthick]) rotate([0,0,0]) + cylinder_fillet_inside(h=bottom_height+adjust+floorthick+lip, + r=(case_diameter/2)-lip/2,top=0, bottom=fillet-1, $fn=6, + fillet_fn=case_ffn, center=true); + translate([-16,(depth/2)-150,-adjust]) + cube([width+10,300,case_z-2*floorthick-2]); + translate([width-9,(depth/2)-62.5,bottom_height]) + cube([20,110,top_height-2*floorthick-2]); + } } - } if(case_design == "snap") { difference() { @@ -1084,28 +1120,55 @@ module case_top(case_design) { cylinder_fillet_inside(h=lip+2*adjust, r=(case_diameter/2)-wallthick/2+tol/2, top=fillet-1, bottom=0, $fn=case_fn, fillet_fn=case_ffn, center=true); // io cutout - if(width/depth >= 1.4) { + if(width/depth >= 1.4 && sbc_model != "vim1" && sbc_model != "vim2" && + sbc_model != "vim3l" && sbc_model != "vim3" && sbc_model != "vim4") { translate([width,(depth/2)-wallthick-gap,bottom_height-lip+top_height/2-floorthick]) cube_fillet_inside([18,depth-2*(wallthick+gap)-1,top_height+lip+2], vertical=[0,0,0,0], top=[0,0,0,0], bottom=[0,0,0,0], $fn=90); } + else { + translate([(width/2)-wallthick-gap,-20,bottom_height-lip+top_height/2-floorthick]) + cube_fillet_inside([width-2*(wallthick+gap)-1,40,top_height+lip+2], + vertical=[0,0,0,0], top=[0,0,0,0], bottom=[0,0,0,0], $fn=90); + } } - if(width/depth >= 1.4) { + if(width/depth >= 1.4 && sbc_model != "vim1" && sbc_model != "vim2" && + sbc_model != "vim3l" && sbc_model != "vim3" && sbc_model != "vim4") { translate([width-2*wallthick-gap-.95,depth/2-wallthick-gap-(depth-2*(floorthick+gap))/2, - bottom_height]) cube([wallthick-.5,depth-2*(floorthick+gap),top_height+adjust]); + bottom_height]) cube([wallthick-adjust,depth-2*(floorthick+gap),top_height+adjust]); + } + else { + translate([-.95,depth/2-2*wallthick-gap-(depth-2*(floorthick+gap))/2, + bottom_height]) cube([width-2*(floorthick+gap),wallthick-adjust,top_height+adjust]); } } if(case_design == "hex") { - difference() { - translate([pcb_width/2,pcb_depth/2,bottom_height+(top_height/2)-lip/2]) rotate([0,0,30]) - cylinder_fillet_inside(h=top_height+lip, r=case_diameter/2, - top=fillet, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); - translate([pcb_width/2,pcb_depth/2,bottom_height+(top_height/2)-floorthick-lip/2]) rotate([0,0,30]) - cylinder_fillet_inside(h=top_height+lip, r=(case_diameter/2)-wallthick, - top=fillet-1, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); - translate([pcb_width/2,pcb_depth/2,bottom_height-adjust-lip/2]) rotate([0,0,30]) - cylinder_fillet_inside(h=lip+2*adjust, r=(case_diameter/2)-wallthick/2+tol/2, - top=fillet-1, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); + if(width/depth >= 1.4 && sbc_model != "vim1" && sbc_model != "vim2" && + sbc_model != "vim3l" && sbc_model != "vim3" && sbc_model != "vim4") { + difference() { + translate([pcb_width/2,pcb_depth/2,bottom_height+(top_height/2)-lip/2]) rotate([0,0,30]) + cylinder_fillet_inside(h=top_height+lip, r=case_diameter/2, + top=fillet, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); + translate([pcb_width/2,pcb_depth/2,bottom_height+(top_height/2)-floorthick-lip/2]) rotate([0,0,30]) + cylinder_fillet_inside(h=top_height+lip, r=(case_diameter/2)-wallthick, + top=fillet-1, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); + translate([pcb_width/2,pcb_depth/2,bottom_height-adjust-lip/2]) rotate([0,0,30]) + cylinder_fillet_inside(h=lip+2*adjust, r=(case_diameter/2)-wallthick/2+tol/2, + top=fillet-1, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); + } + } + else { + difference() { + translate([pcb_width/2,pcb_depth/2,bottom_height+(top_height/2)-lip/2]) rotate([0,0,0]) + cylinder_fillet_inside(h=top_height+lip, r=case_diameter/2, + top=fillet, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); + translate([pcb_width/2,pcb_depth/2,bottom_height+(top_height/2)-floorthick-lip/2]) rotate([0,0,30]) + cylinder_fillet_inside(h=top_height+lip, r=(case_diameter/2)-wallthick, + top=fillet-1, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); + translate([pcb_width/2,pcb_depth/2,bottom_height-adjust-lip/2]) rotate([0,0,0]) + cylinder_fillet_inside(h=lip+2*adjust, r=(case_diameter/2)-wallthick/2+tol/2, + top=fillet-1, bottom=0, $fn=6, fillet_fn=case_ffn, center=true); + } } } if(case_design == "snap") { @@ -1836,7 +1899,7 @@ module open_io() { fan_mask(90,floorthick+6,2); } if(side == "top" && cooling == "vents" && class == "heatsink") { - for(r=[loc_x+7:4:48]) { + for(r=[loc_x+7:4:48+loc_x]) { translate([r,loc_y-20,case_z-(floorthick+adjust)-6]) cube([2,25,floorthick+(adjust*2)+8]); } @@ -1857,7 +1920,7 @@ module open_io() { // gpio opening if(side == "top" && class == "gpio" && type == "header_40" && rotation == 0) { if(gpio_opening == "vent") { - for(r=[loc_x-2:4:10+loc_y]) { + for(r=[loc_x-2:4:50+loc_x]) { translate([r,depth-(2*wallthick)-gap-adjust,bottom_height+2]) cube([2,wallthick+(2*adjust),top_height-floorthick-7]); } diff --git a/sbc_case_builder_accessories.cfg b/sbc_case_builder_accessories.cfg index 9c7cf27..baeb1dc 100644 --- a/sbc_case_builder_accessories.cfg +++ b/sbc_case_builder_accessories.cfg @@ -1365,8 +1365,11 @@ accessory_data = [ ["tinkerboard-r2_fitted", "sub","fan",10,10,25.5,"top",[0,0,0],40,0,6,2,0,"",0], // sub fan opening - ["test", - "sub","vent",60,120,10,"bottom",[0,0,0],2,15,4,1,4,"vertical",1] // sub vent - + ["hk_uart", + "add2","uart_holder",5,0,1.9,"bottom",[0,0,0],10,10,0,0,0,"",0, // add uart holder + "model","hk_uart",7.5,23,5,"bottom",[0,0,-90],10,10,0,0,0,"",0, // add uart model + "model","uart_strap",5,0,2,"bottom",[0,0,0],0,0,0,0,0,"",0, // hk uart strap + "platter","uart_strap",-35,75,-9,"bottom",[0,0,0],0,0,0,0,0,"",0] // hk uart strap + ]; diff --git a/sbc_case_builder_library.scad b/sbc_case_builder_library.scad index e9b32f9..3acf0a4 100644 --- a/sbc_case_builder_library.scad +++ b/sbc_case_builder_library.scad @@ -43,7 +43,7 @@ 20220515 version 1.2.3 removed spacer(); added screw(); modified hk_vu8m(); added m1_hdmount(); added hdd35_25holder(length) printer friendly punchout(),added remaining mask() entries, standardized mask() 2022xxxx version 2.x.x increased mask projection for ir_1, added mask for usb2 and usb3 single_horizontal_a, hdmi_micro, - video-hdmi_mini,microsdcard,momentary_7x3x3_90 + video-hdmi_mini,microsdcard,momentary_7x3x3_90,rj45_single_short see https://github.com/hominoids/SBC_Case_Builder @@ -2497,7 +2497,7 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick, place(loc_x,loc_y-1,loc_z-pcb_z,15,11.5,rotation,side) hdmi_open("hdmi_a"); } if(type == "hdmi_a" && side == "top" && rotation == 0) { - place(loc_x-.675,loc_y-1,loc_z+.25,15,11.5,rotation,side) hdmi_open("hdmi_a"); + place(loc_x-.675,loc_y,loc_z+.25,15,11.5,rotation,side) hdmi_open("hdmi_a"); } if(type == "hdmi_a" && side == "top" && rotation == 90) { place(loc_x-1,loc_y,loc_z,15,11.5,rotation,side) hdmi_open("hdmi_a"); @@ -2735,6 +2735,23 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick, place(loc_x+9,loc_y,loc_z,16,17.5,rotation,side) cube([16.5,8,14]); } + // rj45 short opening + if(type == "rj45_single_short" && rotation == 0) { + place(loc_x,loc_y-6,loc_z,16,17.5,rotation,side) + cube([15,8,12]); + } + if(type == "rj45_single_short" && rotation == 90) { + place(loc_x-6,loc_y,loc_z,16,17.5,rotation,side) + cube([15,8,12]); + } + if(type == "rj45_single_short" && rotation == 180) { + place(loc_x,loc_y+10,loc_z,16,17.5,rotation,side) + cube([15,8,12]); + } + if(type == "rj45_single_short" && rotation == 270) { + place(loc_x+9,loc_y,loc_z,16,17.5,rotation,side) + cube([15,8,12]); + } // micro usb opening if(class == "usb2" && type == "micro" && rotation == 0 && side == "top") { place(loc_x,loc_y-3,loc_z,8,3,rotation,side) microusb_open();