358 lines
6.3 KiB
OpenSCAD
358 lines
6.3 KiB
OpenSCAD
|
|
use <arduino_isp.scad>
|
|
|
|
$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]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|