From 0620887cc5482ac6e1a1afdaeeef2609d74618c2 Mon Sep 17 00:00:00 2001 From: "Ricardo (XenGi) Band" Date: Sun, 26 Mar 2023 19:52:23 +0200 Subject: [PATCH] add lower half --- lower_case.scad | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ pcb.scad | 30 +++++++++++++---------- 2 files changed, 80 insertions(+), 13 deletions(-) create mode 100644 lower_case.scad diff --git a/lower_case.scad b/lower_case.scad new file mode 100644 index 0000000..a02c7a9 --- /dev/null +++ b/lower_case.scad @@ -0,0 +1,63 @@ +$fn = 64; +pcb_width = 81; +pcb_length = 119; +case_thickness = 3; +case_height = 15; +pcb_thickness = 1.6; +breakout_width = 21; +breakout_length = 13; +inner_depth = 5; + +module pcb(h) { + pcb_thickness = h ? h : 1.6; + pcb_corner_radius = 5; + + translate([pcb_corner_radius,pcb_corner_radius,0]) hull() { + cylinder(h=pcb_thickness, r=pcb_corner_radius); + translate([pcb_width-2*pcb_corner_radius,0,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); + translate([0,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); + translate([pcb_width-2*pcb_corner_radius,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); + } +} + +module lower_case() { + translate([0,0,-1*case_height]) { + difference() { + cube([pcb_width + 2*case_thickness, pcb_length + 2*case_thickness, case_height]); + translate([0,-1,-1*case_height/2+1]) rotate([-1.6,0,0]) cube([pcb_width+2*case_thickness, pcb_length+2*case_thickness+2, 10]); + } + } +} + +module standoff(x, y) { + translate([case_thickness+x,case_thickness+y,-1*inner_depth]) difference() { + translate([0,0,(inner_depth-pcb_thickness)/2]) cylinder(h=inner_depth-pcb_thickness, d=3.5, center=true); + translate([0,0,(inner_depth-pcb_thickness)/2]) cylinder(h=inner_depth-pcb_thickness, d=1, center=true); + } +} + +module usb_breakout() { + breakout_thickness = 1; + + cube([breakout_width, breakout_length, breakout_thickness]); + // USB-C + translate([breakout_width/2, breakout_length-8/2+1, -4/2]) cube([10, 8, 4], center=true); + translate([breakout_width/2, breakout_length-8/2+1+7, -4/2]) cube([16, 8, 8], center=true); + + // screw holes + translate([2.5,breakout_length-2.5,-2]) cylinder(h=2,d=1); + translate([breakout_width-2.5,breakout_length-2.5,-2]) cylinder(h=2,d=1); +} + +difference() { + lower_case(); + translate([case_thickness, case_thickness, -1*inner_depth]) pcb(inner_depth); + translate([(pcb_width + 2*case_thickness)/2-breakout_width/2,pcb_length + 2*case_thickness-breakout_length-case_thickness,-1*(inner_depth+1)]) usb_breakout(); +} + +standoff(21.5, pcb_length-97); +standoff(56, pcb_length-97.5); +standoff(21.5, pcb_length-31.5); +standoff(59.5, pcb_length-31.5); + +// TODO: screw holes for top half \ No newline at end of file diff --git a/pcb.scad b/pcb.scad index 548d8bb..0640914 100644 --- a/pcb.scad +++ b/pcb.scad @@ -1,14 +1,12 @@ -$fn = 64; +/* 75x113 keycap area + * + */ -pcb_thickness = 1.6; +$fn = 64; pcb_width = 81; pcb_length = 119; -pcb_corner_radius = 5; -kailh_height=2; -// translate([-100,0,0]) linear_extrude(1.5) import(file="t9_plate.svg", center=false); - -module kailh () { + module kailh () { kailh_height=2; kailh_corner_radius=2; kailh_width=10.8; @@ -36,11 +34,16 @@ module switch () { translate([switch_width/2-0.625,switch_length/2-2,switch_height]) cube([1.25,4,3.5]); } -translate([pcb_corner_radius,pcb_corner_radius,0]) hull() { - cylinder(h=pcb_thickness, r=pcb_corner_radius); - translate([pcb_width-2*pcb_corner_radius,0,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); - translate([0,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); - translate([pcb_width-2*pcb_corner_radius,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); +module pcb() { + pcb_thickness = 1.6; + pcb_corner_radius = 5; + + translate([pcb_corner_radius,pcb_corner_radius,0]) hull() { + cylinder(h=pcb_thickness, r=pcb_corner_radius); + translate([pcb_width-2*pcb_corner_radius,0,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); + translate([0,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); + translate([pcb_width-2*pcb_corner_radius,pcb_length-2*pcb_corner_radius,0]) cylinder(h=pcb_thickness, r=pcb_corner_radius); + } } translate([15.5,12.8,0]) kailh(); // 0 @@ -84,4 +87,5 @@ translate([43,100,0]) switch(); translate([25,107.8,0]) kailh(); // Play/Pause translate([24,100,0]) switch(); translate([6,107.8,0]) kailh(); // Prev -translate([5,100,0]) switch(); \ No newline at end of file +translate([5,100,0]) switch(); +pcb();