diff --git a/lower_case.scad b/lower_case.scad index 89b80ca..64b8d3d 100644 --- a/lower_case.scad +++ b/lower_case.scad @@ -3,14 +3,31 @@ include $fn = 64; +with_weight = false; color("SaddleBrown") difference() { // case - hull() { - translate([-case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); - translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); - translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); - translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); + union() { + hull() { + translate([-case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); + translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); + translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); + translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+0.5); + } + + translate([0,0,case_thickness+standoff_height+pcb_thickness+5-upper_case_height]) hull() { + translate([-case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2); + translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2); + translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2); + translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+0.5, r2=pcb_radius+2); + } + + hull() { + translate([-case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5); + translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5); + translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5); + translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height, r1=pcb_radius+2, r2=pcb_radius+0.5); + } } // pcb @@ -20,10 +37,6 @@ color("SaddleBrown") difference() { translate([0, pcb_depth-2*pcb_radius, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+1); translate([pcb_width-2*pcb_radius, pcb_depth-2*pcb_radius, 0]) cylinder(h=case_thickness+standoff_height+pcb_thickness+5, r=pcb_radius+1); } - - // hole for reset button - translate([reset_x - pcb_radius, reset_y - pcb_radius, 0]) cylinder(h=case_thickness, r=1); - translate([reset_x - pcb_radius-1.4, reset_y - pcb_radius-1.5, 1.5]) mirror([1,0,0]) rotate([0,0,90]) linear_extrude(0.2) text(text="RESET ►", size=3, font="Liberation Sans:style=Bold", halign="right"); // plate_mounting translate([20, pcb_depth - pcb_radius+1, case_thickness+standoff_height+pcb_thickness+5-plate_thickness]) lug(hole=false); @@ -48,7 +61,7 @@ color("SaddleBrown") difference() { translate([pololu_width/2-pololu_hole_spacing, pololu_depth/2-pololu_hole_spacing, -pcb_thickness/2-threaded_insert_height]) cylinder(h=threaded_insert_height, d=3); } - // TODO: make dependent on case size + // cable channel translate([65, 26, case_bottom_thickness/2]) { translate([-7.5,30,0]) linear_extrude(case_bottom_thickness/2+1) polygon([[7.5,0], [7.5,10.75], [0,10.75]]); cube([10, 40.75, case_bottom_thickness/2+1]); @@ -74,18 +87,29 @@ color("SaddleBrown") difference() { } } - // hole for weight - hull() { - translate([5,5,0]) cylinder(h=1.5, d=10); - translate([pcb_width-2*pcb_radius-5,5,0]) cylinder(h=1.5, d=10); - translate([5,pcb_depth-2*pcb_radius-5,0]) cylinder(h=1.5, d=10); - translate([pcb_width-2*pcb_radius-5,pcb_depth-2*pcb_radius-5,0]) cylinder(h=1.5, d=10); + // hole for reset button + translate([reset_x - pcb_radius, reset_y - pcb_radius, 0]) cylinder(h=case_thickness, r=1); + + // OPTIONAL: hole for weight + if (with_weight) { + hull() { + translate([5,5,0]) cylinder(h=1.5, d=10); + translate([pcb_width-2*pcb_radius-5,5,0]) cylinder(h=1.5, d=10); + translate([5,pcb_depth-2*pcb_radius-5,0]) cylinder(h=1.5, d=10); + translate([pcb_width-2*pcb_radius-5,pcb_depth-2*pcb_radius-5,0]) cylinder(h=1.5, d=10); + } + translate([pcb_width/2,pcb_depth/2+6,1.5]) mirror([1,0,0]) linear_extrude(0.2) text(text="noisy cricket", size=10, font="Liberation Sans:style=Bold", halign="center"); + translate([pcb_width/2,pcb_depth/2-8,1.5]) mirror([1,0,0]) linear_extrude(0.2) text(text="© XenGi 2023", size=6, font="Liberation Sans:style=Bold", halign="center"); + // threaded inserts + translate([10,10,1.5]) cylinder(h=threaded_insert_height, d=3); + translate([pcb_width-2*pcb_radius-10,10,1.5]) cylinder(h=threaded_insert_height, d=3); + translate([10,pcb_depth-2*pcb_radius-10,1.5]) cylinder(h=threaded_insert_height, d=3); + translate([pcb_width-2*pcb_radius-10,pcb_depth-2*pcb_radius-10,1.5]) cylinder(h=threaded_insert_height, d=3); + //reset button text + translate([reset_x - pcb_radius-1.4, reset_y - pcb_radius-1.5, 1.5]) mirror([1,0,0]) rotate([0,0,90]) linear_extrude(0.2) text(text="RESET ►", size=3, font="Liberation Sans:style=Bold", halign="right"); + } else { + translate([pcb_width/2,pcb_depth/2+6,0]) mirror([1,0,0]) linear_extrude(0.2) text(text="noisy cricket", size=10, font="Liberation Sans:style=Bold", halign="center"); + translate([pcb_width/2,pcb_depth/2-8,0]) mirror([1,0,0]) linear_extrude(0.2) text(text="© XenGi 2023", size=6, font="Liberation Sans:style=Bold", halign="center"); + translate([reset_x - pcb_radius-1.4, reset_y - pcb_radius-1.5, 0]) mirror([1,0,0]) rotate([0,0,90]) linear_extrude(0.2) text(text="RESET ►", size=3, font="Liberation Sans:style=Bold", halign="right"); } - translate([pcb_width/2,pcb_depth/2+1,1.5]) mirror([1,0,0]) linear_extrude(0.2) text(text="noisy cricket", size=10, font="Liberation Sans:style=Bold", halign="center"); - translate([pcb_width/2,pcb_depth/2-11,1.5]) mirror([1,0,0]) linear_extrude(0.2) text(text="© XenGi 2023", size=6, font="Liberation Sans:style=Bold", halign="center"); - // threaded inserts - translate([10,10,1.5]) cylinder(h=threaded_insert_height, d=3); - translate([pcb_width-2*pcb_radius-10,10,1.5]) cylinder(h=threaded_insert_height, d=3); - translate([10,pcb_depth-2*pcb_radius-10,1.5]) cylinder(h=threaded_insert_height, d=3); - translate([pcb_width-2*pcb_radius-10,pcb_depth-2*pcb_radius-10,1.5]) cylinder(h=threaded_insert_height, d=3); -} +} \ No newline at end of file diff --git a/upper_case.scad b/upper_case.scad index 35b807c..4c61bc0 100644 --- a/upper_case.scad +++ b/upper_case.scad @@ -8,16 +8,16 @@ color("SaddleBrown") difference() { // case union() { hull() { - translate([-case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+1); - translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+1); - translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+1); - translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+1); + translate([-case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+2); + translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+2); + translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+2); + translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=upper_case_height/2, r=pcb_radius+2); } translate([0,0,upper_case_height/2]) hull() { - translate([-case_thickness, -case_thickness, 0]) resize(newsize=[2*(pcb_radius+1),2*(pcb_radius+1),upper_case_height]) sphere(r=pcb_radius+1); - translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) resize(newsize=[2*(pcb_radius+1),2*(pcb_radius+1),upper_case_height]) sphere(r=pcb_radius+1); - translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) resize(newsize=[2*(pcb_radius+1),2*(pcb_radius+1),upper_case_height]) sphere(r=pcb_radius+1); - translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) resize(newsize=[2*(pcb_radius+1),2*(pcb_radius+1),upper_case_height]) sphere(r=pcb_radius+1); + translate([-case_thickness, -case_thickness, 0]) resize(newsize=[2*(pcb_radius+2),2*(pcb_radius+2),upper_case_height]) sphere(r=pcb_radius+2); + translate([pcb_width-2*pcb_radius+case_thickness, -case_thickness, 0]) resize(newsize=[2*(pcb_radius+2),2*(pcb_radius+2),upper_case_height]) sphere(r=pcb_radius+2); + translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) resize(newsize=[2*(pcb_radius+2),2*(pcb_radius+2),upper_case_height]) sphere(r=pcb_radius+2); + translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) resize(newsize=[2*(pcb_radius+2),2*(pcb_radius+2),upper_case_height]) sphere(r=pcb_radius+2); } } @@ -35,9 +35,9 @@ color("SaddleBrown") difference() { translate([-case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=threaded_insert_height, d=3); translate([pcb_width-2*pcb_radius+case_thickness, pcb_depth-2*pcb_radius+case_thickness, 0]) cylinder(h=threaded_insert_height, d=3); - - translate([20, pcb_depth - pcb_radius+1+case_thickness/2, 0]) cylinder(h=2, d=4); - translate([pcb_width-2*pcb_radius - 20, pcb_depth - pcb_radius+1+case_thickness/2, 0]) cylinder(h=2, d=4); - translate([20, -pcb_radius-1-case_thickness/2, 0]) cylinder(h=2, d=4); - translate([pcb_width-2*pcb_radius - 20, -pcb_radius-1-case_thickness/2, 0]) cylinder(h=2, d=4); + // space for screws from lower case + translate([20, pcb_depth - pcb_radius+1+case_thickness/2, 0]) cylinder(h=2.3, d=4.2); + translate([pcb_width-2*pcb_radius - 20, pcb_depth - pcb_radius+1+case_thickness/2, 0]) cylinder(h=2.3, d=4.2); + translate([20, -pcb_radius-1-case_thickness/2, 0]) cylinder(h=2.3, d=4.2); + translate([pcb_width-2*pcb_radius - 20, -pcb_radius-1-case_thickness/2, 0]) cylinder(h=2.3, d=4.2); } diff --git a/util.scad b/util.scad index 2249a91..c3a4c4f 100644 --- a/util.scad +++ b/util.scad @@ -17,8 +17,8 @@ upper_case_height = 5; standoff_height = 3; -reset_x = 111; -reset_y = 42; +reset_x = 111.1; +reset_y = 47.6; mx = 19.05; @@ -29,7 +29,7 @@ mounting_holes = [ [98.425, 69.0563] ]; -pololu_width = 0.8*2.54*10; +pololu_width = 0.8*2.54*10+0.2; pololu_depth = 0.5*2.54*10+1; pololu_holes_radius = 1; pololu_hole_spacing = 0.1*2.54*10;