scooterproject/openscad/scooter_wheel_case.scad

359 lines
6.3 KiB
OpenSCAD
Raw Permalink Normal View History

2019-04-18 23:02:20 +02:00
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]);
}
}
}
}