added round case for odroid c-series and other rpi format sbc

This commit is contained in:
Edward Kisiel
2022-05-22 13:11:32 -04:00
parent 1c140b0622
commit 260752a32d
3 changed files with 127 additions and 18 deletions

View File

@@ -29,7 +29,8 @@
20220515 Version 1.2.3 added m1_panel,m1_tray,m1_tray_drive,m1_tray_sides,m1_tray_vu5,m1_tray_vu7,show2_shell 20220515 Version 1.2.3 added m1_panel,m1_tray,m1_tray_drive,m1_tray_sides,m1_tray_vu5,m1_tray_vu7,show2_shell
jetsonnano_shell,jetsonnano_panel,jetsonnano_stacked,jetsonnano_tray jetsonnano_shell,jetsonnano_panel,jetsonnano_stacked,jetsonnano_tray
rockpro64_shell,rockpro64_panel,rockpro64_stacked,rockpro64_tray rockpro64_shell,rockpro64_panel,rockpro64_stacked,rockpro64_tray
2022xxxx Version 1.x.x added round case for odroid c-series
see https://github.com/hominoids/SBC_Case_Builder see https://github.com/hominoids/SBC_Case_Builder
*/ */
@@ -293,6 +294,18 @@ case_data = [
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff [6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1]], // bottom_ext_standoff [6.75,5,3.6,10,4,1,0,0,0,4.5,5.1]], // bottom_ext_standoff
["c1+_round","c1+","round","none", // case_name,sbc_model,case_design,case_style
0,0,0,0,0,4,2, // pcb_loc_x,pcb_loc_y,pcb_loc_z,case_offset_x,case_offset_y,case_offset_tz,case_offset_bz,
3,2,3,1.5,[2,2], // wallthick,floorthick,sidethick,gap,fillet
false,false,false,true,false, // indents,sidewall_support,sbc_top_standoffs,sbc_bottom_standoffs,case_ext_standoffs
false,"none","fan","none","true", // sata_punchout,gpio_opening,cooling,exhaust_vents,mode
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_pcb_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // bottom_pcb_standoff
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // bottom_ext_standoff
"sub","round",49.5,-15,12.5,"top",[90,0,0],11,0,15,0,0,"",0, // sub power plug hole
"suball","rectangle",20.5,-26,6.5,"top",[0,0,0],21,8,13.5,0,0,"vertical",[1,1,1,1]], // sub hdmi opening
// Odroid-C2 // Odroid-C2
["c2_shell","c2","shell","none", // case_name,sbc_model,case_design,case_style ["c2_shell","c2","shell","none", // case_name,sbc_model,case_design,case_style
@@ -519,6 +532,18 @@ case_data = [
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff [6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1]], // bottom_ext_standoff [6.75,5,3.6,10,4,1,0,0,0,4.5,5.1]], // bottom_ext_standoff
["c2_round","c2","round","none", // case_name,sbc_model,case_design,case_style
0,0,0,0,0,4,2, // pcb_loc_x,pcb_loc_y,pcb_loc_z,case_offset_x,case_offset_y,case_offset_tz,case_offset_bz,
3,2,3,1.5,[2,2], // wallthick,floorthick,sidethick,gap,fillet
false,false,false,true,false, // indents,sidewall_support,sbc_top_standoffs,sbc_bottom_standoffs,case_ext_standoffs
false,"none","fan","none","true", // sata_punchout,gpio_opening,cooling,exhaust_vents,mode
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_pcb_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // bottom_pcb_standoff
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // bottom_ext_standoff
"sub","round",49.5,-15,12.5,"top",[90,0,0],11,0,15,0,0,"",0, // sub power plug hole
"suball","rectangle",20.5,-26,6.5,"top",[0,0,0],21,8,13.5,0,0,"vertical",[1,1,1,1]], // sub hdmi opening
// Odroid-C4 // Odroid-C4
["c4_shell","c4","shell","none", // case_name,sbc_model,case_design,case_style ["c4_shell","c4","shell","none", // case_name,sbc_model,case_design,case_style
@@ -617,8 +642,8 @@ case_data = [
"sub","rectangle",5.5,2.75,28,"top",[0,0,0],74.5,51,5,0,0,"vertical",[.25,.25,.25,.25], // sub rectangle "sub","rectangle",5.5,2.75,28,"top",[0,0,0],74.5,51,5,0,0,"vertical",[.25,.25,.25,.25], // sub rectangle
"model","hk_lcd35",95,56,20,"bottom",[0,0,180],0,0,0,0,0,"",0], // model hk 3.5 lcd "model","hk_lcd35",95,56,20,"bottom",[0,0,180],0,0,0,0,0,"",0], // model hk 3.5 lcd
["c4_deskboom_lcd3.5","c4","panel","none", // case_name,sbc_model,case_design,case_style ["c4_deskboom_lcd3.5","c4","panel","none", // case_name,sbc_model,case_design,case_style
40,0,4,40,15,3,11, // pcb_loc_x,pcb_loc_y,pcb_loc_z,case_offset_x,case_offset_y,case_offset_tz,case_offset_bz, 40,0,4,40,15,3,11, // pcb_loc_x,pcb_loc_y,pcb_loc_z,case_offset_x,case_offset_y,case_offset_tz,case_offset_bz,
2,2,3,1.5,[3.5,0], // wallthick,floorthick,sidethick,gap,fillet 2,2,3,1.5,[3.5,0], // wallthick,floorthick,sidethick,gap,fillet
true,false,false,true,false, // indents,sidewall_support,sbc_top_standoffs,sbc_bottom_standoffs,case_ext_standoffs true,false,false,true,false, // indents,sidewall_support,sbc_top_standoffs,sbc_bottom_standoffs,case_ext_standoffs
false,"none","none","none","true", // sata_punchout,gpio_opening,cooling,exhaust_vents,mode false,"none","none","none","true", // sata_punchout,gpio_opening,cooling,exhaust_vents,mode
@@ -755,6 +780,18 @@ case_data = [
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff [6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1]], // bottom_ext_standoff [6.75,5,3.6,10,4,1,0,0,0,4.5,5.1]], // bottom_ext_standoff
["c4_round","c4","round","none", // case_name,sbc_model,case_design,case_style
0,0,0,0,0,4,2, // pcb_loc_x,pcb_loc_y,pcb_loc_z,case_offset_x,case_offset_y,case_offset_tz,case_offset_bz,
3,2,3,1.5,[2,2], // wallthick,floorthick,sidethick,gap,fillet
false,false,false,true,false, // indents,sidewall_support,sbc_top_standoffs,sbc_bottom_standoffs,case_ext_standoffs
false,"none","vents","none","true", // sata_punchout,gpio_opening,cooling,exhaust_vents,mode
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_pcb_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // bottom_pcb_standoff
[6.75,18,2.5,10,4,4,0,1,0,4.5,5.1], // top_ext_standoff
[6.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // bottom_ext_standoff
"suball","round",10.5,-2,14.5,"top",[90,0,0],11,0,18,0,0,"",0, // sub power plug hole
"suball","rectangle",34.5,-26,4.99,"top",[0,0,0],21,10,14.5,0,0,"vertical",[1,1,1,1]], // sub hdmi opening
// Odroid-XU4 // Odroid-XU4
["xu4_shell","xu4","shell","none", // case_name,sbc_model,case_design,case_style ["xu4_shell","xu4","shell","none", // case_name,sbc_model,case_design,case_style

View File

@@ -33,7 +33,8 @@
20220406 Version 1.2.2 added vu7c, vu8m and weatherboard2 models, other additions, fixes and maintenance 20220406 Version 1.2.2 added vu7c, vu8m and weatherboard2 models, other additions, fixes and maintenance
20220515 Version 1.2.3 added odroid-m1, jetson nano, rockpro64, completed mask(), improved docs 20220515 Version 1.2.3 added odroid-m1, jetson nano, rockpro64, completed mask(), improved docs
changed tray top design changed tray top design
2022xxxx Version 1.x.x added round case for odroid c-series and other rpi format
see https://github.com/hominoids/SBC_Case_Builder see https://github.com/hominoids/SBC_Case_Builder
*/ */
@@ -43,7 +44,7 @@ use <./lib/fillets.scad>;
include <./lib/sbc_models.cfg>; include <./lib/sbc_models.cfg>;
include <./sbc_case_builder.cfg>; include <./sbc_case_builder.cfg>;
case_name = "m1_tray"; // case_name to load from sbc_case_builder.cfg case_name = "c4_round"; // case_name to load from sbc_case_builder.cfg
view = "model"; // viewing mode "platter", "model", "debug" view = "model"; // viewing mode "platter", "model", "debug"
highlight = false; // enable highlight for subtarctive geometry (true or false) highlight = false; // enable highlight for subtarctive geometry (true or false)
@@ -54,10 +55,12 @@ move_leftside = 0; // move left side mm in mode
move_rightside = 0; // move right side mm in model view or < 0 = off move_rightside = 0; // move right side mm in model view or < 0 = off
move_front = 0; // move front mm in model view or < 0 = off move_front = 0; // move front mm in model view or < 0 = off
move_rear = 0; // move rear mm in model view or < 0 = off move_rear = 0; // move rear mm in model view or < 0 = off
case_fn = 90; // circle segments for round cases
case_ffn = 90; // circle segments for fillet of round cases
c = search([case_name],case_data); c = search([case_name],case_data);
case_design = case_data[c[0]][2]; // "shell", "panel", "stacked", "tray" case_design = case_data[c[0]][2]; // "shell", "panel", "stacked", "tray", "round"
case_style = case_data[c[0]][3]; // style of case_design case_style = case_data[c[0]][3]; // style of case_design
sbc_model = case_data[c[0]][1]; // any sbc from sbc model framework: "c1+","c2","c4","hc4" sbc_model = case_data[c[0]][1]; // any sbc from sbc model framework: "c1+","c2","c4","hc4"
@@ -103,6 +106,10 @@ top_height = pcb_tmaxz+floorthick+case_offset_tz;
bottom_height = pcb_bmaxz+floorthick+case_offset_bz; bottom_height = pcb_bmaxz+floorthick+case_offset_bz;
case_z = bottom_height+top_height; case_z = bottom_height+top_height;
case_diameter = width*1.14;
lip = 5;
tol = .25;
top_standoff = [case_data[c[0]][26][0], // diameter top_standoff = [case_data[c[0]][26][0], // diameter
top_height-pcb_loc_z, // height top_height top_height-pcb_loc_z, // height top_height
case_data[c[0]][26][2], // holesize case_data[c[0]][26][2], // holesize
@@ -184,6 +191,10 @@ if (view == "platter") {
case_side(case_design,case_style,"left"); case_side(case_design,case_style,"left");
} }
} }
if(case_design == "round") {
case_bottom(case_design);
translate([width+30,depth,case_z-floorthick-gap]) rotate([180,0,0]) case_top(case_design);
}
// platter accessories // platter accessories
for (i=[30:14:len(case_data[c[0]])-1]) { for (i=[30:14:len(case_data[c[0]])-1]) {
class = case_data[c[0]][i]; class = case_data[c[0]][i];
@@ -315,6 +326,17 @@ if (view == "model") {
case_z+27]) rotate([-vu_rotation[0],0,180]) hk_speaker(); case_z+27]) rotate([-vu_rotation[0],0,180]) hk_speaker();
} }
} }
if(case_design == "round") {
if(lower_bottom >= 0) {
color("grey",1) translate([0,0,-lower_bottom]) case_bottom(case_design);
}
if(sbc_off == false) {
translate([pcb_loc_x ,pcb_loc_y,bottom_standoff[1]]) sbc(sbc_model);
}
if(raise_top >= 0) {
color("grey",1) translate([0,0,raise_top]) case_top(case_design);
}
}
// model accessories // model accessories
for (i=[30:14:len(case_data[c[0]])-1]) { for (i=[30:14:len(case_data[c[0]])-1]) {
class = case_data[c[0]][i]; class = case_data[c[0]][i];
@@ -456,6 +478,35 @@ module case_bottom(case_design) {
cube([width,wallthick,top_height-floorthick]); cube([width,wallthick,top_height-floorthick]);
} }
if(case_design == "round") {
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=c_fillet, $fn=case_fn, fillet_fn=case_ffn, center=true);
translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+1+floorthick]) rotate([0,0,30])
cylinder_fillet_inside(h=bottom_height+adjust+floorthick,
r=(case_diameter/2)-lip/2,top=0, bottom=c_fillet-1, $fn=case_fn,
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=case_fn);
translate([pcb_width/2,pcb_depth/2,(bottom_height-lip)-adjust]) rotate([0,0,30])
cylinder(h=lip+2*adjust, r=(case_diameter/2)-lip/4, $fn=case_fn);
}
}
difference() {
translate([pcb_width/2,pcb_depth/2,(bottom_height/2)+1+floorthick]) rotate([0,0,30])
cylinder_fillet_inside(h=bottom_height+adjust+floorthick,
r=(case_diameter/2)-lip/2,top=0, bottom=c_fillet-1, $fn=case_fn,
fillet_fn=case_ffn, center=true);
translate([-16,(depth/2)-60,-adjust])
cube([width+10,110,top_height-2*floorthick-2]);
translate([width-9,(depth/2)-62.5,bottom_height])
cube([20,110,top_height-2*floorthick-2]);
}
}
// additive accessories // additive accessories
for (i=[30:14:len(case_data[c[0]])-1]) { for (i=[30:14:len(case_data[c[0]])-1]) {
class = case_data[c[0]][i]; class = case_data[c[0]][i];
@@ -899,6 +950,26 @@ module case_top(case_design) {
} }
} }
} }
if(case_design == "round") {
difference() {
translate([pcb_width/2,pcb_depth/2,case_z/2]) rotate([0,0,30])
cylinder_fillet_inside(h=top_height, r=case_diameter/2,
top=fillet, bottom=0, $fn=case_fn, fillet_fn=case_ffn, center=true);
translate([pcb_width/2,pcb_depth/2,(case_z/2)-floorthick]) rotate([0,0,30])
cylinder_fillet_inside(h=top_height, r=(case_diameter/2)-lip/2,
top=fillet-1, bottom=0, $fn=case_fn, fillet_fn=case_ffn, center=true);
translate([pcb_width/2,pcb_depth/2,lip-adjust]) rotate([0,0,30])
cylinder(h=lip+2*adjust, r=(case_diameter/2)-(lip/4)+tol/2, $fn=case_fn);
// io cutout
translate([width,(depth/2)-wallthick-gap,floorthick+gap+top_height/2])
cube_fillet_inside([18,depth-2*(wallthick+gap)-1,top_height-1],
vertical=[0,0,0,0],
top=[0,0,0,0],
bottom=[0,0,0,0], $fn=90);
}
translate([width-8.49,(depth/2)-32,bottom_height])
cube([wallthick-.75,55,top_height-2*floorthick-3]);
}
for (i=[30:14:len(case_data[c[0]])-1]) { for (i=[30:14:len(case_data[c[0]])-1]) {
class = case_data[c[0]][i]; class = case_data[c[0]][i];
type = case_data[c[0]][i+1]; type = case_data[c[0]][i+1];
@@ -1479,8 +1550,8 @@ module open_io() {
// top cooling openings // top cooling openings
if(side == "top" && cooling == "fan" && class == "heatsink" if(side == "top" && cooling == "fan" && class == "heatsink"
&& type != "h2_oem" && type != "n2_oem" && type != "n2+_oem") { && type != "h2_oem" && type != "n2_oem" && type != "n2+_oem") {
translate([loc_x+6,loc_y-28,case_z-(floorthick+adjust)]) translate([loc_x+6,loc_y-28,case_z-(floorthick+adjust)-5])
fan_mask(40,floorthick+(2*adjust)+4,2); fan_mask(40,floorthick+(2*adjust)+8,2);
} }
if(side == "top" && cooling == "fan" && class == "heatsink" && (type == "n2_oem" || type == "n2+_oem")) { if(side == "top" && cooling == "fan" && class == "heatsink" && (type == "n2_oem" || type == "n2+_oem")) {
translate([loc_x+4,loc_y+5.5,-adjust]) translate([loc_x+4,loc_y+5.5,-adjust])
@@ -1498,8 +1569,8 @@ module open_io() {
} }
if(side == "top" && cooling == "vents" && class == "heatsink") { if(side == "top" && cooling == "vents" && class == "heatsink") {
for(r=[loc_x+7:4:48]) { for(r=[loc_x+7:4:48]) {
translate([r,loc_y-20,case_z-(floorthick+adjust)]) translate([r,loc_y-20,case_z-(floorthick+adjust)-6])
cube([2,25,floorthick+(adjust*2)]); cube([2,25,floorthick+(adjust*2)+8]);
} }
} }
if(side == "top" && cooling == "custom" && class == "heatsink") { if(side == "top" && cooling == "custom" && class == "heatsink") {
@@ -1567,8 +1638,8 @@ module open_io() {
// uart knockout opening // uart knockout opening
if(side == "top" && type == "uart_micro" && rotation == 90) { if(side == "top" && type == "uart_micro" && rotation == 90) {
translate([loc_x-wallthick-gap-4,loc_y-1,bottom_height+5]) rotate([90,0,90]) translate([loc_x-wallthick-gap-8,loc_y-1,bottom_height+5]) rotate([90,0,90])
punchout(15,8,1,sidethick+(2*adjust)+5,2,"rectangle"); punchout(15,8,1,sidethick+(2*adjust)+8,2,"rectangle");
} }
if(side == "top" && type == "uart_micro" && rotation == -90) { if(side == "top" && type == "uart_micro" && rotation == -90) {
translate([loc_x+2*(wallthick+gap)+1,loc_y-1,bottom_height+5]) rotate([90,0,90]) translate([loc_x+2*(wallthick+gap)+1,loc_y-1,bottom_height+5]) rotate([90,0,90])
@@ -1818,4 +1889,4 @@ vu7_height = vu7_pcb_height + 9.75;
} }
} }
} }
} }

View File

@@ -42,7 +42,8 @@
adjusted access_port(), access_cover(), added @mctom's hk_vu8m(bracket), u_bracket(), spacer() adjusted access_port(), access_cover(), added @mctom's hk_vu8m(bracket), u_bracket(), spacer()
20220515 version 1.2.3 removed spacer(); added screw(); modified hk_vu8m(); added m1_hdmount(); added hdd35_25holder(length) 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() printer friendly punchout(),added remaining mask() entries, standardized mask()
2022xxxx version 1.x.x increased mask projection for ir_1
see https://github.com/hominoids/SBC_Case_Builder see https://github.com/hominoids/SBC_Case_Builder
place(x,y,z,size_x,size_y,rotation,side) place(x,y,z,size_x,size_y,rotation,side)
@@ -2663,19 +2664,19 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
// ir opening // ir opening
if(type == "ir_1" && rotation == 0) { if(type == "ir_1" && rotation == 0) {
place(loc_x,loc_y,loc_z,6,6,rotation,side) place(loc_x,loc_y,loc_z,6,6,rotation,side)
translate([3.5,2,7.5]) rotate([90,0,0]) cylinder(d=6, h=12); translate([3.5,2,7.5]) rotate([90,0,0]) cylinder(d=6, h=15);
} }
if(type == "ir_1" && rotation == 90) { if(type == "ir_1" && rotation == 90) {
place(loc_x,loc_y,loc_z,6,6,rotation,side) place(loc_x,loc_y,loc_z,6,6,rotation,side)
translate([2.5,2,7.5]) rotate([90,0,0]) cylinder(d=6, h=12); translate([2.5,2,7.5]) rotate([90,0,0]) cylinder(d=6, h=15);
} }
if(type == "ir_1" && rotation == 180) { if(type == "ir_1" && rotation == 180) {
place(loc_x,loc_y,loc_z,6,6,rotation,side) place(loc_x,loc_y,loc_z,6,6,rotation,side)
translate([2.5,5,6.5]) rotate([90,0,0]) cylinder(d=6, h=12); translate([2.5,5,6.5]) rotate([90,0,0]) cylinder(d=6, h=15);
} }
if(type == "ir_1" && rotation == 270) { if(type == "ir_1" && rotation == 270) {
place(loc_x,loc_y,loc_z,6,6,rotation,side) place(loc_x,loc_y,loc_z,6,6,rotation,side)
translate([3.375,5,7.5]) rotate([90,0,0]) cylinder(d=6, h=12); translate([3.375,5,7.5]) rotate([90,0,0]) cylinder(d=6, h=15);
} }
// switch opening // switch opening
if(type == "slide_4x9" && rotation == 0) { if(type == "slide_4x9" && rotation == 0) {