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
jetsonnano_shell,jetsonnano_panel,jetsonnano_stacked,jetsonnano_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
*/
@@ -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,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
["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,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
["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
"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
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,
["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,
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
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,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
["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
20220515 Version 1.2.3 added odroid-m1, jetson nano, rockpro64, completed mask(), improved docs
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
*/
@@ -43,7 +44,7 @@ use <./lib/fillets.scad>;
include <./lib/sbc_models.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"
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_front = 0; // move front 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);
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
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;
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_height-pcb_loc_z, // height top_height
case_data[c[0]][26][2], // holesize
@@ -184,6 +191,10 @@ if (view == "platter") {
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
for (i=[30:14:len(case_data[c[0]])-1]) {
class = case_data[c[0]][i];
@@ -315,6 +326,17 @@ if (view == "model") {
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
for (i=[30:14:len(case_data[c[0]])-1]) {
class = case_data[c[0]][i];
@@ -456,6 +478,35 @@ module case_bottom(case_design) {
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
for (i=[30:14:len(case_data[c[0]])-1]) {
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]) {
class = case_data[c[0]][i];
type = case_data[c[0]][i+1];
@@ -1479,8 +1550,8 @@ module open_io() {
// top cooling openings
if(side == "top" && cooling == "fan" && class == "heatsink"
&& type != "h2_oem" && type != "n2_oem" && type != "n2+_oem") {
translate([loc_x+6,loc_y-28,case_z-(floorthick+adjust)])
fan_mask(40,floorthick+(2*adjust)+4,2);
translate([loc_x+6,loc_y-28,case_z-(floorthick+adjust)-5])
fan_mask(40,floorthick+(2*adjust)+8,2);
}
if(side == "top" && cooling == "fan" && class == "heatsink" && (type == "n2_oem" || type == "n2+_oem")) {
translate([loc_x+4,loc_y+5.5,-adjust])
@@ -1498,8 +1569,8 @@ module open_io() {
}
if(side == "top" && cooling == "vents" && class == "heatsink") {
for(r=[loc_x+7:4:48]) {
translate([r,loc_y-20,case_z-(floorthick+adjust)])
cube([2,25,floorthick+(adjust*2)]);
translate([r,loc_y-20,case_z-(floorthick+adjust)-6])
cube([2,25,floorthick+(adjust*2)+8]);
}
}
if(side == "top" && cooling == "custom" && class == "heatsink") {
@@ -1567,8 +1638,8 @@ module open_io() {
// uart knockout opening
if(side == "top" && type == "uart_micro" && rotation == 90) {
translate([loc_x-wallthick-gap-4,loc_y-1,bottom_height+5]) rotate([90,0,90])
punchout(15,8,1,sidethick+(2*adjust)+5,2,"rectangle");
translate([loc_x-wallthick-gap-8,loc_y-1,bottom_height+5]) rotate([90,0,90])
punchout(15,8,1,sidethick+(2*adjust)+8,2,"rectangle");
}
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])
@@ -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()
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 1.x.x increased mask projection for ir_1
see https://github.com/hominoids/SBC_Case_Builder
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
if(type == "ir_1" && rotation == 0) {
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) {
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) {
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) {
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
if(type == "slide_4x9" && rotation == 0) {