From 4eb4a1993d4d9f9f83ff7d8ee7f22e38a72f5e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?King=20K=C3=A9vin?= Date: Wed, 21 Dec 2022 02:15:07 +0100 Subject: [PATCH] add physical case for USB hub --- case/case_bottom_3d-print.scad | 187 +++++++++++++++++++++++++++++++++ case/case_bottom_3d-print.stl | Bin 0 -> 66484 bytes case/case_top_laser-cut.svg | 45 ++++++++ 3 files changed, 232 insertions(+) create mode 100644 case/case_bottom_3d-print.scad create mode 100644 case/case_bottom_3d-print.stl create mode 100644 case/case_top_laser-cut.svg diff --git a/case/case_bottom_3d-print.scad b/case/case_bottom_3d-print.scad new file mode 100644 index 0000000..9961ff2 --- /dev/null +++ b/case/case_bottom_3d-print.scad @@ -0,0 +1,187 @@ +$fn=30; + +BOARD_WIDTH=96.5; +BOARD_HEIGHT=96.0; +BOARD_THICKNESS=1.6; +HOLE_NW_X=4.0; +HOLE_NW_Y=4.0; +HOLE_NE_X=92.5; +HOLE_NE_Y=4.0; +HOLE_SW_X=4.0; +HOLE_SW_Y=92.0; +HOLE_SE_X=92.5; +HOLE_SE_Y=92.0; + +WALL_SPACE=1.0; +WALL_THICKNESS=2.0; +HOLE_HEIGHT=15.0; // USB A is 14.5 + +module pillar() { + translate([0,0,HOLE_HEIGHT/2]) { + difference() { + cylinder(h=HOLE_HEIGHT, d=6, center=true); + cylinder(h=HOLE_HEIGHT, d=3.5, center=true); + } + } +} + +mirror([1,0,0]) { // we used bottom view + +// bottom plate +cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS]); + +// screw mounts +translate([WALL_THICKNESS+WALL_SPACE+HOLE_NW_X,WALL_THICKNESS+WALL_SPACE+HOLE_NW_Y,WALL_THICKNESS]) { + pillar(); +} +translate([WALL_THICKNESS+WALL_SPACE+HOLE_NE_X,WALL_THICKNESS+WALL_SPACE+HOLE_NE_Y,WALL_THICKNESS]) { + pillar(); +} +translate([WALL_THICKNESS+WALL_SPACE+HOLE_SW_X,WALL_THICKNESS+WALL_SPACE+HOLE_SW_Y,WALL_THICKNESS]) { + pillar(); +} +translate([WALL_THICKNESS+WALL_SPACE+HOLE_SE_X,WALL_THICKNESS+WALL_SPACE+HOLE_SE_Y,WALL_THICKNESS]) { + pillar(); +} + +// side +MARGIN=1.0; +USB_B_WIDTH=12.0+MARGIN; +USB_B_HEIGHT=11.0+MARGIN; +USB_A_WIDTH=7.0+MARGIN; +USB_A_HEIGHT=14.5+MARGIN; +BARREL_WIDTH=9.0+MARGIN; +BARREL_HEIGHT=11.3+MARGIN; +INDUCTOR_HEIGHT=7.5; + +// side north +difference() { + cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); + // DFP 7 USB A + translate([WALL_THICKNESS+WALL_SPACE+12.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { + cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); + } + // DFP 7 BARREL + translate([WALL_THICKNESS+WALL_SPACE+28-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); + } + // DFP 6 USB A + translate([WALL_THICKNESS+WALL_SPACE+40.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { + cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); + } + // DFP 6 BARREL + translate([WALL_THICKNESS+WALL_SPACE+56-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); + } + // DFP 5 USB A + translate([WALL_THICKNESS+WALL_SPACE+68.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { + cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); + } + // DFP 5 BARREL + translate([WALL_THICKNESS+WALL_SPACE+84-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); + } +} + +// side west +difference() { + cube([WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); + // USB B + translate([0,WALL_THICKNESS+WALL_SPACE+48-USB_B_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-USB_B_HEIGHT]) { + cube([WALL_THICKNESS,USB_B_WIDTH,USB_B_HEIGHT]); + } + // 5V BARREL + translate([0,WALL_THICKNESS+WALL_SPACE+33-BARREL_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([WALL_THICKNESS,BARREL_WIDTH,BARREL_HEIGHT]); + } + // 12V BARREL + translate([0,WALL_THICKNESS+WALL_SPACE+63-BARREL_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([WALL_THICKNESS,BARREL_WIDTH,BARREL_HEIGHT]); + } +} + +// side south +translate([0,BOARD_HEIGHT+WALL_THICKNESS+2*WALL_SPACE,0]) { + difference() { + cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); + // DFP 1 USB A + translate([WALL_THICKNESS+WALL_SPACE+27.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { + cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); + } + // DFP 1 BARREL + translate([WALL_THICKNESS+WALL_SPACE+12-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); + } + // DFP 2 USB A + translate([WALL_THICKNESS+WALL_SPACE+55.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { + cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); + } + // DFP 2 BARREL + translate([WALL_THICKNESS+WALL_SPACE+40-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); + } + // DFP 3 USB A + translate([WALL_THICKNESS+WALL_SPACE+83.5-USB_A_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { + cube([USB_A_WIDTH,WALL_THICKNESS,USB_A_HEIGHT]); + } + // DFP 3 BARREL + translate([WALL_THICKNESS+WALL_SPACE+68-BARREL_WIDTH/2,0,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([BARREL_WIDTH,WALL_THICKNESS,BARREL_HEIGHT]); + } + } +} + +// side east +translate([BOARD_WIDTH+WALL_THICKNESS+2*WALL_SPACE,0,0]) { + difference() { + cube([WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]); + // DFP 4 USB A + translate([0,WALL_THICKNESS+WALL_SPACE+40.5-USB_A_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-USB_A_HEIGHT]) { + cube([WALL_THICKNESS,USB_A_WIDTH,USB_A_HEIGHT]); + } + // DFP 4 BARREL + translate([0,WALL_THICKNESS+WALL_SPACE+56-BARREL_WIDTH/2,WALL_THICKNESS+HOLE_HEIGHT-BARREL_HEIGHT]) { + cube([WALL_THICKNESS,BARREL_WIDTH,BARREL_HEIGHT]); + } + } +} + +// top plate +SWITCH_WIDTH=3.0+0.5; +SWITCH_LENGTH=6.0+0.5; + +translate([0,0,WALL_THICKNESS+HOLE_HEIGHT+BOARD_THICKNESS+INDUCTOR_HEIGHT]) { + difference() { + cube([BOARD_WIDTH+2*WALL_SPACE+2*WALL_THICKNESS, BOARD_HEIGHT+2*WALL_SPACE+2*WALL_THICKNESS, WALL_THICKNESS]); + // DFP 7 + translate([WALL_THICKNESS+WALL_SPACE+20.0, WALL_THICKNESS+WALL_SPACE+6.7,WALL_THICKNESS/2]) { + cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); + } + // DFP 6 + translate([WALL_THICKNESS+WALL_SPACE+48.0, WALL_THICKNESS+WALL_SPACE+6.7,WALL_THICKNESS/2]) { + cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); + } + // DFP 5 + translate([WALL_THICKNESS+WALL_SPACE+76.0, WALL_THICKNESS+WALL_SPACE+6.7,WALL_THICKNESS/2]) { + cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); + } + // DFP 4 + translate([WALL_THICKNESS+WALL_SPACE+89.7, WALL_THICKNESS+WALL_SPACE+48.0,WALL_THICKNESS/2]) { + cube([SWITCH_LENGTH, SWITCH_WIDTH, WALL_THICKNESS], center=true); + } + // DFP 3 + translate([WALL_THICKNESS+WALL_SPACE+76.0, WALL_THICKNESS+WALL_SPACE+89.3,WALL_THICKNESS/2]) { + cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); + } + // DFP 2 + translate([WALL_THICKNESS+WALL_SPACE+48.0, WALL_THICKNESS+WALL_SPACE+89.3,WALL_THICKNESS/2]) { + cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); + } + // DFP 1 + translate([WALL_THICKNESS+WALL_SPACE+20.0, WALL_THICKNESS+WALL_SPACE+89.3,WALL_THICKNESS/2]) { + cube([SWITCH_WIDTH, SWITCH_LENGTH, WALL_THICKNESS], center=true); + } + } +} + +} \ No newline at end of file diff --git a/case/case_bottom_3d-print.stl b/case/case_bottom_3d-print.stl new file mode 100644 index 0000000000000000000000000000000000000000..573724da6d3737eb5a9b2ecf6df5f4e6885386ee GIT binary patch literal 66484 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 literal 0 HcmV?d00001 diff --git a/case/case_top_laser-cut.svg b/case/case_top_laser-cut.svg new file mode 100644 index 0000000..efaf947 --- /dev/null +++ b/case/case_top_laser-cut.svg @@ -0,0 +1,45 @@ + + + + + OpenSCAD Model + +