You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.2 KiB
117 lines
3.2 KiB
use <Deckel.scad>; |
|
$fn=128; |
|
$t = 0.5; // disable for animation |
|
module coupler_holder(){ |
|
w_fitting = 4.4; |
|
w = w_fitting + 0.8; |
|
difference(){ |
|
translate([0,-w/2,-0.2])cube([3.5,w,2.5]); // evtl. können die Außenwände wieder dünner werden |
|
translate([-1.0,-2.6/2,0.3])cube([5,2.6,1.5]); |
|
translate([2.5,-w_fitting/2,0.65])cube([2,w_fitting,0.7]); |
|
translate([1.3,-w_fitting/2,0.8])cube([2,w_fitting,0.4]); |
|
translate([2.5,0,1])rotate([90,0,0])cylinder(d=0.9,h=w_fitting,center=true); |
|
} |
|
} |
|
|
|
module fixed_part(){ |
|
l1=17.5; |
|
l2=25; |
|
l3=12.8; |
|
difference(){ |
|
union(){ |
|
translate([0,0,0.2])cube([l2,20.5,1.6],true); |
|
translate([11.5,0,0.2])cube([5,5,1.6],true); |
|
translate([14,0,0.2]) cylinder(d=5,h=1.6,center=true); |
|
translate([3,0,-3.2])cylinder(d=5,h=3); |
|
} |
|
|
|
translate([(l2-l1)/2 -1.6,0,0.8]) intersection(){ |
|
translate([l1/2,l1/2,0])cylinder(r=l1,h=2,center=true); |
|
translate([l1/2,-l1/2,0])cylinder(r=l1,h=2,center=true); |
|
cube([l1,l1,3],true); |
|
} |
|
translate([-2.4,0,0.8])cube([13,16.6,2],true); |
|
translate([-6.4,0,0])cube([5,18,5],true); |
|
translate([-9.3,0,0.8])cube([5,l3,2],true); |
|
intersection(){ |
|
translate([-8,0,0])cube([8,l3,2],true); |
|
union(){ |
|
translate([l2/2-1.6,l1/2,0])cylinder(h=3,d=44,center=true); |
|
translate([l2/2-1.6,-l1/2,0])cylinder(h=3,d=44,center=true); |
|
} |
|
} |
|
translate([3,0,0])cylinder(d=2,h=10,center=true); |
|
translate([3,0,-1])cylinder(d=3,h=10); |
|
|
|
translate([0,0,1.5])rotate([180,0,0]) deckel(0.8); |
|
} |
|
|
|
} |
|
|
|
module spring(angle=0){ |
|
translate([-1,-4.5,0]) rotate([0,0,angle]){ |
|
translate([-12,-3.2,0])cylinder(d=1,h=0.8,center=true); |
|
hull(){ |
|
translate([-12,-3.2,0])cube([0.6,0.6,0.8],center=true); |
|
translate([0,0,0])cube([0.6,0.6,0.8],center=true); |
|
} |
|
} |
|
} |
|
|
|
module moving_part(){ |
|
l1=16.4; |
|
translate([25/2-1.6,0,0.4]){ |
|
intersection(){ |
|
translate([-0.8,0,0])cube([1.6,l1,0.8],true); |
|
cylinder(d=l1,h=1,center=true); |
|
} |
|
hull(){ // flacher Teil |
|
translate([-19.6,0,0])cylinder(d=2,h=0.8,center=true); |
|
translate([-1,-4,0])cylinder(d=1,h=0.8,center=true); |
|
translate([-14,-3,0])cylinder(d=1,h=0.8,center=true); |
|
translate([-1, 4,0])cylinder(d=1,h=0.8,center=true); |
|
translate([-14, 3,0])cylinder(d=1,h=0.8,center=true); |
|
} |
|
translate([-18.8,0,-0.6])cylinder(d=2,h=1.8,center=true); |
|
translate([-18.8,0,-1.5])sphere(d=2); |
|
difference(){ |
|
union(){ |
|
translate([-20,0,-3.8]) cylinder(d=2,h=4.9,center=true); |
|
hull(){ |
|
translate([-20,0,-6.5]) cylinder(d=2,h=0.1,center=true); |
|
translate([-18,0,0]) cylinder(d=2,h=0.1,center=true); |
|
} |
|
translate([-21.5,0,-6.6])rotate([0,0,180])coupler_holder(); |
|
hull(){ |
|
translate([-22.5,-2,-6.8])cube([1,4,2.5]); |
|
translate([-20,0,-5.1]) cylinder(d=2,h=3,center=true); |
|
} |
|
|
|
} |
|
translate([-21.5,0,-6.6])rotate([0,0,180])translate([-0.5,-2.6/2,0.3])cube([5,2.6,1.5]); |
|
} |
|
spring($t>=0.5 ? 32*(0.5-$t) : 0); |
|
mirror([0,180,0]) spring($t<=0.5 ? 32*($t-0.5) : 0); |
|
} |
|
} |
|
|
|
module kinematik(angle){ |
|
angle = ($t - 0.5)*28; |
|
|
|
fixed_part(); |
|
v1 = [-10.9,-8.5,0]; |
|
v2 = [-10.9, 8.5,0]; |
|
|
|
if (angle<0){ |
|
translate(-v1)rotate([0,0,angle])translate(v1)moving_part(); |
|
} else { |
|
translate(-v2)rotate([0,0,angle])translate(v2)moving_part(); |
|
} |
|
|
|
} |
|
|
|
|
|
*kinematik(); |
|
moving_part(); |
|
*fixed_part(); |
|
*deckel();
|
|
|