use $fn=50; H=24.16; function _sagitta_r(y, x) = (y*y)/(8*x) + (x/2); module sagitta(y, x, h) { r = _sagitta_r(y, x); translate([-(r-y/2),-2*r,0]) { difference() { translate([r,r+x,0]) { cylinder(h=h, r=r); } translate([0,0,-1]) { cube([2*r, 2*r, h+2]); } } } } module p(w) { union() { difference() { cube([w,40,15]); rotate([0,0,44]) { translate([0,0,-1]) { cube([100,100,17]); } } translate([w,0,0]) { rotate([0,0,20]) { translate([0,0,-1]) { cube([100,100,17]); } } } } scale([1,-1,1]) { sagitta(w, 4, 15); } } } module erode() { difference() { cube([100,100,100]); minkowski() { difference() { cube([100,100,100]); children(0); } children(1); } } } module wall() { difference() { minkowski() { cylinder(r=8, h=.1); p(44); } translate([0,0,-5]) { scale([1,1,2]) { translate([-30,-30,-30]) { erode() { translate([30, 30, 30]) { minkowski() { cylinder(r=8, h=2); p(44); } } cylinder(r=2, h=2); } } } } } } module case() { union() { scale([1,1,1.6]) { wall(); } scale([1,1,.1]) { minkowski() { cylinder(r1=10, h=.1); p(44); } } translate([0,0,H-1.5]) { scale([1,1,.1]) { minkowski() { cylinder(r=10, h=.1); p(44); } } } } } module fullcase() { difference() { union() { case(); translate([14.5, -9, 1.5]) { cube([16, 12, 3]); } translate([-3,-2,0]) { cylinder(r=4,h=H); } translate([47,-2,0]) { cylinder(r=4,h=H); } // Arduino holders translate([1, 1, 0]) { rotate([0,0,44]) { cube([5,5,6]); } } translate([1, 1, H-5]) { rotate([0,0,44]) { cube([5,5,6]); } } translate([32, 31, 0]) { rotate([0,0,44]) { cube([5,5,6]); } } translate([32, 31, H-5]) { rotate([0,0,44]) { cube([5,5,6]); } } // Schmitt trigger holders translate([44, 0, 0]) { rotate([0,0,20]) { cube([6,25,6]); } } translate([44, 0, H-5]) { rotate([0,0,20]) { cube([6,25,6]); } } } translate([20, -6, -2]) { cube([5, 4, 5]); } translate([16.5, -7, 1.5]) { cube([12, 8, 5]); } translate([-3,-2,-1]) { cylinder(r=1.5,h=H+2); } translate([47,-2,-1]) { cylinder(r=1.5,h=H+2); } // Arduino nano cutout #translate([0,5,3]) { rotate([0,0,-46]) { cube([2,44,18]); } } //Schmitt trigger board cutout #translate([44,4,2]) { rotate([0,0,20]) { cube([2,20,20]); } } // Various holes translate([8,0,-1]) { cylinder(r=5, h=H+2); } translate([37,0,-1]) { cylinder(r=5, h=H+2); } translate([25,14,-1]) { cylinder(r=8, h=H+2); } } } module two_halves() { intersection() { fullcase(); translate([-30,-30,0]) { cube([100,100,H/2]); } } intersection() { translate([-80,0,H]) { rotate([180,0,0]) { fullcase(); } } translate([-100,-70,0]) { cube([100,100,H/2]); } } } module double_case() { difference() { union() { case(); translate([73,20,0]) { rotate([0,0,72]) { case(); } } //bottom connect outer translate([50,-3,0]) { rotate([0,0,35]) { cube([30,40,1.5]); } } //bottom connect inner translate([50,24,0]) { rotate([0,0,45]) { cube([30,20,1.5]); } } //bottom extrude short edge translate([46,60,0]) { rotate([0,0,2]) { cube([45,30,1.5]); } } //bottom extrude long edge translate([-3,-5,0]) { rotate([0,0,44]) { cube([40,30,1.5]); } } //top connect outer translate([50,-3,H-1.5]) { rotate([0,0,35]) { cube([30,40,1.5]); } } //top connect inner translate([50,24,H-1.5]) { rotate([0,0,45]) { cube([30,20,1.5]); } } //top extrude short edge translate([46,60,H-1.5]) { rotate([0,0,2]) { cube([45,30,1.5]); } } //top extrude long edge translate([-3,-5,H-1.5]) { rotate([0,0,44]) { cube([40,30,1.5]); } } } //connect cutout translate([45,5,1.5]) { rotate([0,0,40]) { cube([35,25,H-3]); } } } } module double_full_case_halves() { intersection() { double_case(); translate([-30,-30,0]) { cube([150,150,H/2]); } } translate([40,40,0]) { intersection() { translate([-90,0,H]) { rotate([180,0,90]) { double_case(); } } translate([-110,-30,0]) { cube([150,150,H/2]); } } } } //fullcase(); //two_halves(); arduino_isp_header_holder(r=[0,180,-46],t=[12,-6.5,12]) { difference() { union() { double_full_case_halves(); // Schmitt trigger holders translate([44, -6, 0]) { rotate([0,0,20]) { cube([6,6,8]); } } translate([38, 11, 0]) { rotate([0,0,20]) { cube([6,6,8]); } } // Battery holder translate([81, 31, 0]) { rotate([0,0,27]) { cube([5,30,20]); } } // Sensor PCB enclosure translate([20.5, -1, 1.5]) { cube([16, 12, 3]); } } // LED cable hole translate([25,-9,-1]) { cube([7,7,5]); } //Schmitt trigger board cutout translate([45,-4,5]) { rotate([0,0,20]) { cube([2,20,20]); } } // Sensor hole translate([26, 2, -2]) { cube([5, 4, 5]); } translate([22.5, 1, 1.5]) { cube([12, 8, 5]); } // Power button hole translate([80, 50, -1]) { rotate([0,0,27]) { cube([6,12,5]); } } } }