use ; use ; flap_angle = 0; servo_angle = -10; axle_dia = 4; axle_len = 40; raise = 0; tunnel_w = 160; tunnel_h = 160; tunnel_t = 10; // tunnel thickness tunnel_s = 40; // tunnel spacing: overlap for screws door_t = 50; // door thickness plexy_t = 6; // thickness of plexy glass sheet gap = 1; // gap between parts moving relative to each other seal = 1; // thickness of seal. May be set to gap guide_h = 40; bearing_inner_dia = 10; bearing_outer_dia = 20; bearing_h = 5; stopper_h = 40; stopper_w = 30; space = bearing_outer_dia; // space between plexy glass sheets // calculations rad = (space+2*plexy_t)/2; sheet_h = tunnel_h-2*seal-rad; h0 = stopper_w/2; h1 = guide_h-gap-10; h2 = 10+gap+h0; h3 = bearing_h/2+gap; // colors plexy = [0.4,0.6,1,0.6]; red = [1,0,0]; green = [0,0.6,0]; silver = [0.7,0.7,0.7]; snow = [1,1,1,0.5]; wood = [0.8,0.3,0]; // constants $fn = 32; rx = [90,0,0]; // rotate 90 deg around x ry = [0,90,0]; // rotate 90 deg around y x = [1,0,0]; y = [0,1,0]; z = [0,0,1]; module door(){ color(wood) difference(){ cube([1000,door_t,2000],true); tunnel_core(); } } module tunnel_core(){ cube([tunnel_w+2*tunnel_t,door_t+2*tunnel_t,tunnel_h+2*tunnel_t],true); // eigentlicher tunnel } module tunnel(){ color(snow)difference(){ union(){ tunnel_core(); translate(-y*(door_t+tunnel_t)/2) cube([tunnel_w+2*tunnel_s,tunnel_t,tunnel_h+2*tunnel_s],true); // krempe translate( y*(door_t+tunnel_t)/2) cube([tunnel_w+2*tunnel_s,tunnel_t,tunnel_h+2*tunnel_s],true); // krempe translate((tunnel_t+tunnel_h)/-2*z) hull(){ cube([bearing_h,tunnel_h,tunnel_t],true); cube([tunnel_w+2*tunnel_t,door_t+2*tunnel_t,tunnel_t],true); } } cube([tunnel_w,door_t+2*tunnel_t+2,tunnel_h],true); // öffnung translate((tunnel_h+bearing_outer_dia-gap)/-2*z)cube([bearing_h+2*gap,bearing_outer_dia,bearing_outer_dia],true); translate(z*(sheet_h-rad)/2){ translate( x*(tunnel_t+(tunnel_w-axle_len)/2)) rotate(y*90) cylinder(d=axle_dia+gap,h=axle_len+gap,center=true); // axle translate(-x*(tunnel_t+(tunnel_w-axle_len)/2)) rotate(y*90) cylinder(d=axle_dia+gap,h=axle_len+gap,center=true); // axle } } } module screw(){ rotate(x*90)cylinder(d=4,h=space+3*plexy_t,center=true); } module sheets(){ difference(){ union(){ translate([0,(plexy_t+space)/2,-sheet_h/2])cube([tunnel_w-2*seal,plexy_t,sheet_h],true); translate([0, (plexy_t+space)/-2,-sheet_h/2])cube([tunnel_w-2*seal,plexy_t,sheet_h],true); } hull(){ translate(-z*(sheet_h+10)) rotate(ry) cylinder(d=bearing_outer_dia+2*gap,h=bearing_h+2*gap,center=true); translate(z*(bearing_outer_dia/2-sheet_h)) rotate(ry) cylinder(d=bearing_outer_dia+2*gap,h=bearing_h+2*gap,center=true); } } } module guide(){ translate([h2, 0,h1/2-sheet_h])cube([20,space,h1],true); translate([-h2, 0,h1/2-sheet_h])cube([20,space,h1],true); } module bearing_case(){ rotate(ry) cylinder(d=bearing_inner_dia-gap,h=h3); translate([h3/2+stopper_w/4,0,stopper_h/2]) cube([h0-h3,space-2*gap,stopper_h],true); translate([(h0+5)/2,0,stopper_h-5]) cube([h0+5,space-2*gap,10],true); } module bearing(){ color(silver) rotate(ry) difference(){ cylinder(d=bearing_outer_dia,h=bearing_h,center=true); cylinder(d=bearing_inner_dia,h=bearing_h+2,center=true); } } module stopper(){ color(green) { bearing_case(); rotate(z*180)bearing_case(); } bearing(); } module axles(){ translate(z*(sheet_h-rad)/2){ translate( x*(tunnel_t+(tunnel_w-axle_len)/2)) rotate(y*90) cylinder(d=axle_dia,h=axle_len,center=true); // axle translate(-x*(tunnel_t+(tunnel_w-axle_len)/2)) rotate(y*90) cylinder(d=axle_dia,h=axle_len,center=true); // axle } } module flap(){ translate(z*(sheet_h-rad)/2) rotate(x*flap_angle) { difference(){ rotate(y*90) cylinder(d=2*rad,h=tunnel_w-2*seal,center=true); sheets(); translate([tunnel_w/ 4,0,rad/-2])screw(); translate([tunnel_w/-4,0,rad/-2])screw(); translate(-x*(tunnel_t+(tunnel_w-axle_len)/2)) rotate(y*90) cylinder(d=axle_dia+gap,h=axle_len+2*gap,center=true); translate( x*(tunnel_t+(tunnel_w-axle_len)/2)) rotate(y*90) cylinder(d=axle_dia+gap,h=axle_len+2*gap,center=true); } color(plexy) difference(){ union(){ sheets(); guide(); } translate([h2,0,5-sheet_h])screw(); translate([h2,0,guide_h-15-gap-sheet_h])screw(); translate([-h2,0,5-sheet_h])screw(); translate([-h2,0,guide_h-15-gap-sheet_h])screw(); translate([tunnel_w/ 4,0,rad/-2])screw(); translate([tunnel_w/-4,0,rad/-2])screw(); } translate(z*(raise-sheet_h))stopper(); } } module servo(){ translate(-[5.5,0,28.5]) sg90(); rotate(servo_angle*z) sg90_f1(); } module servo_in_place(){ translate([-11,0,-tunnel_h/2 -10])rotate(90*x)servo(); } door(); tunnel(); flap(); axles(); servo_in_place();