Merge branch 'master' of github.com:josefprusa/Prusa3
[clinton/prusa3.git] / box_frame / x-end.scad
dissimilarity index 80%
index dc24282..c88be61 100644 (file)
-// PRUSA iteration3
-// X ends
-// GNU GPL v3
-// Josef Průša <josefprusa@me.com>
-// Václav 'ax' Hůla <axtheb@gmail.com>
-// http://www.reprap.org/wiki/Prusa_Mendel
-// http://github.com/prusajr/PrusaMendel
-
-include <configuration.scad>
-use <bushing.scad>
-
-
-module x_end_motor(){
-    mirror([0,1,0]) {
-
-        x_end_base([3,3,0,0], thru=false);
-        /// motor dummy
-        //%translate([21-5,-21-11,25]) cube([42,42,42], center = true);
-
-
-        difference(){
-            union(){
-                translate([-13.75,-15,26]) cube_fillet([17.5,12,52], center = true, vertical=[0,0,3,1.5], top=[0,3,6,3]);
-                translate([-10,-34,9]) intersection(){
-                    cube_fillet([10,37,18], center = true, vertical=[0,0,0,0], top=[0,3,5,3]);
-                    translate([-10/2,10,-26]) rotate([45,0,0]) cube_fillet([10,60,60], radius=2);
-                }
-                translate([-15, -32, 30.25]) rotate([90, 0, 0])  rotate([0, 90, 0]) nema17(places=[1,0,1,1], h=10);
-            }
-
-            // motor screw holes
-            translate([21-5,-21-11,30.25]){
-                // belt hole
-                translate([-30,11,0]) cube([10,26,20], center = true);
-                //motor mounting holes
-                translate([-29, 0, 0]) rotate([0, 0, 0])  rotate([0, 90, 0]) nema17(places=[1,1,0,1], holes=true, shadow=5, $fn=7, h=8);
-            }
-        }
-        //smooth rod caps
-        translate([-22, -10, 0]) cube([17, 2, 15]);
-        translate([-22, -10, 45]) cube([17, 2, 10]);
-    }
-}
-
-
-module x_end_base(vfillet=[3,3,3,3], thru=true, len=40){
-    difference(){
-        union(){
-            difference(){
-                translate([-13.75-0.5,-10+len/2,30]) cube_fillet([18.5,len,60], center = true, vertical=vfillet, top=[5,3,5,3]);
-                bushing_negative(60);
-            }
-            //rotate([0,0,0]) translate([0,-9.5,0]) 
-            if (bearing_choice == 1) {
-                linear_bushing(60);
-            } else {
-                linear_bearing(60);
-            }
-            // Nut trap
-            difference(){
-                if ((bearing_choice != 1) || (bushing_type == 2)) {
-                translate([-2,17.5,4]) cube_fillet([16,18,8], center = true, vertical=[3,0,0,0]);
-                } else {
-                translate([-2,17.5,4]) cube_fillet([16,18,8], center = true, vertical=[3,0,0,3]);
-                }
-
-                //bottom hole
-                
-                translate([0,17,-1]) cylinder(h = 4, r=2.75);
-                //nut slid in
-                #translate([3,17,4]) cube([9.2*2,9.2*sqrt(3/4)+0.4,4.1], center = true);
-
-                translate([0,17,6.5]) cylinder(h = 4, r=2.75);
-            }
-        }
-
-        // belt hole
-        translate([-5.5-10+1.5,22-9,30]) cube([10,55,32], center = true);
-                       
-        // change rod diameter to 8.4 if printing with ABS
-        if(thru == true){
-            translate([-14,-11,6]) rotate([-90,0,0]) pushfit_rod(8.1,50);
-            translate([-14,-11,xaxis_rod_distance+6]) rotate([-90,0,0]) pushfit_rod(8.1,50);
-        } else {
-            translate([-14,-7,6]) rotate([-90,0,0]) pushfit_rod(8.1,50);
-            translate([-14,-7,xaxis_rod_distance+6]) rotate([-90,0,0]) pushfit_rod(8.1,50);
-        }
-
-
-    }
-
-    //threaded rod
-    #translate([0,17,0]) %cylinder(h = 70, r=2.5+0.2);
-
-}
-
-
-module x_end_idler(){
-    difference() {
-        x_end_base(len=42+idler_size_inner_r);
-        // idler hole
-        translate([0,17+6+idler_size_inner_r,30.25-((bearing_type==0)? 3 : 0)]) rotate([0,-90,0]) cylinder(h = 80, r=idler_size_inner_r-0.2, $fn=30);
-        if (bearing_type == 0) 
-        translate([-9,17+6+idler_size_inner_r,30.25-3]) {
-            rotate([0,-90,0]) cylinder(h = 10, r=idler_size/2+4, $fn=30);
-            translate([-5,10,0]) cube([10,20,idler_size+8], center=true);
-        }
-    }
-}
-
-mirror([0,0,0]) x_end_idler(thru=true);
-// translate([40,40,0]) x_end_idler(thru=false);
-translate([40,0,0]) x_end_motor();
-
-module pushfit_rod(diameter,length){
-    cylinder(h = length, r=diameter/2, $fn=30);
-    translate([0,-diameter/4,length/2]) cube([diameter,diameter/2,length], center = true);
-
-    translate([0,-diameter/2-1.2,length/2]) cube([diameter,1,length], center = true);
-}
+// PRUSA iteration3
+// X ends
+// GNU GPL v3
+// Josef Průša <josefprusa@me.com>
+// Václav 'ax' Hůla <axtheb@gmail.com>
+// http://www.reprap.org/wiki/Prusa_Mendel
+// http://github.com/prusajr/PrusaMendel
+
+include <configuration.scad>
+use <bushing.scad>
+use <inc/bearing-guide.scad>
+use <y-drivetrain.scad>
+
+//height and width of the x blocks depend on x smooth rod radius
+x_box_height = 52 + 2 * bushing_xy[0];
+x_box_width = (bushing_xy[0] <= 4) ? 17.5 : bushing_xy[0] * 2 + 9.5;
+echo(x_box_width);
+bearing_height = max ((bushing_z[2] > 30 ? x_box_height : (2 * bushing_z[2] + 8)), x_box_height);
+
+module x_end_motor(){
+
+    mirror([0, 1, 0]) {
+
+        x_end_base([3, 3, min((bushing_xy[0] - 3) * 2, 3), 2], len=42, offset=-5, thru=false);
+
+
+        translate([0, -z_delta - 2, 0]) difference(){
+            union(){
+                intersection() {
+                    translate([-15, -34, 30]) cube([20, 60, x_box_height], center = true);
+                    union() {
+                        translate([-14, -16 + z_delta / 2, 24]) cube_fillet([17.5, 10.5 + z_delta, 55], center = true, vertical=[0, 0, 3, 3], top=[0, 3, 6, 3], $fn=16);
+                        //lower arm holding outer stepper screw
+                        translate([-10.25, -34, 9]) intersection(){
+                            translate([0, 0, -5]) cube_fillet([10, 37, 28], center = true, vertical=[0, 0, 0, 0], top=[0, 3, 5, 3]);
+                            translate([-10/2, 10, -26]) rotate([45, 0, 0]) cube_fillet([10, 60, 60], radius=2);
+                        }
+                    }
+                }
+                translate([-16, -32, 30.25]) rotate([90, 0, 0])  rotate([0, 90, 0]) nema17(places=[1, 0, 1, 1], h=11);
+            }
+
+            // motor screw holes
+            translate([21-5, -21-11, 30.25]){
+                // belt hole
+                    translate([-30, 11, -0.25]) cube_fillet([11, 36, 22], vertical=0, top=[0, 1, 0, 1], bottom=[0, 1, 0, 1], center = true, $fn=4);
+                //motor mounting holes
+                translate([-29.5, 0, 0]) rotate([0, 0, 0])  rotate([0, 90, 0]) nema17(places=[1, 1, 0, 1], holes=true, shadow=5.5, $fn=small_hole_segments, h=8);
+            }
+        }
+        //smooth rod caps
+        //translate([-22, -10, 0]) cube([17, 2, 15]);
+        //translate([-22, -10, 45]) cube([17, 2, 10]);
+    }
+}
+
+module x_end_base(vfillet=[3, 3, 3, 3], thru=true, len=40, offset=0){
+
+    difference(){
+        union(){
+            translate([-10 - bushing_xy[0], -10 + len / 2 + offset, 30]) cube_fillet([x_box_width, len, x_box_height], center=true, vertical=vfillet, top=[5, 3, 5, 3]);
+
+            translate([0, 0, 4 - bushing_xy[0]]) {
+                //rotate([0, 0, 0]) translate([0, -9.5, 0]) 
+                translate([z_delta, 0, 0]) render(convexity = 5) linear(bushing_z, bearing_height);
+                // Nut trap
+                translate([-2, 18, 5]) cube_fillet([20, 14, 10], center = true, vertical=[8, 0, 0, 5]);
+                //}
+            }
+        }
+        // here are bushings/bearings
+        translate([z_delta, 0, 4 - bushing_xy[0]]) linear_negative(bushing_z, bearing_height);
+
+        // belt hole
+        translate([-5.5 - 10 + 1.5, 22 - 9 + offset, 30]) cube_fillet([max(idler_width + 2, 11), 55, 27], center = true, vertical=0, top=[0, 1, 0, 1], bottom=[0, 1, 0, 1], $fn=4);
+
+        //smooth rods
+        translate([-10 - bushing_xy[0], offset, 0]) {
+            if(thru == true){
+                translate([0, -11, 6]) rotate([-90, 0, 0]) pushfit_rod(bushing_xy[0] * 2 + 0.2, 50);
+                translate([0, -11, xaxis_rod_distance+6]) rotate([-90, 0, 0]) pushfit_rod(bushing_xy[0] * 2 + 0.2, 50);
+            } else {
+                translate([0, -7, 6]) rotate([-90, 0, 0]) pushfit_rod(bushing_xy[0] * 2 + 0.2, 50);
+                translate([0, -7, xaxis_rod_distance+6]) rotate([-90, 0, 0]) pushfit_rod(bushing_xy[0] * 2 + 0.2, 50);
+            }
+        }
+        translate([0, 0, 5 - bushing_xy[0]]) {  // m5 nut insert
+            translate([0, 17, 0]) rotate([0, 0, 10]){
+                //rod
+                translate([0, 0, -1]) cylinder(h=(4.1 / 2 + 5), r=3, $fn=32);
+                //nut
+                translate([0, 0, 9]) cylinder(r=4.6, h=14.1, center = true, $fn=6);
+
+            }
+        }
+    }
+    //threaded rod
+    translate([0, 17, 0]) %cylinder(h = 70, r=2.5+0.2);
+}
+
+module x_end_idler(){
+    difference() {
+        x_end_base(len=48 + z_delta / 3, offset=-10 - z_delta / 3);
+        // idler hole
+        translate([-20, -15 - z_delta / 2, 30]) {
+            rotate([0, 90, 0]) cylinder(r=m4_diameter / 2, h=33, center=true, $fn=small_hole_segments);
+            translate([15 - 2 * single_wall_width, 0, 0]) rotate([90, 0, 90]) cylinder(r=m4_nut_diameter_horizontal / 2, h=3, $fn=6);
+
+        }
+        translate([-6 - x_box_width, 11, 29.5 - (max(idler_bearing[0], 16) / 2)]) cube([x_box_width + 1, 11, 1.5 + max(idler_bearing[0], 16)]);
+    }
+        %translate([-14, -9, 30.5 - (max(idler_bearing[0], 16) / 2)]) x_tensioner();
+}
+
+module x_tensioner(len=62, idler_height=max(idler_bearing[0], 16)) {
+        idlermount(len=len, rod=m4_diameter / 2, idler_height=idler_height, narrow_len=46, narrow_width=idler_width + 2 - single_wall_width);
+}
+
+
+*translate([-40, 0, 4 - bushing_xy[0]]) x_tensioner();
+translate([0, -80, 0]) mirror([1, 0, 0]) x_end_idler(thru=true);
+translate([-50, 0, 0]) mirror([1, 0, 0]) translate([-50, 0, 0])
+    x_end_motor();
+
+module pushfit_rod(diameter, length){
+    cylinder(h = length, r=diameter/2, $fn=30);
+    translate([0, -diameter/4, length/2]) cube_fillet([diameter, diameter/2, length], vertical = [0, 0, 1, 1], center = true, $fn=4);
+
+    translate([0, -diameter/2-1.2, length/2]) cube([diameter - 1, 1, length], center = true);
+}
+
+if (idler_bearing[3] == 1) {
+    translate([-25, -30 - idler_bearing[0] / 2, 0]) {
+        render() bearing_guide_inner();
+        translate([idler_bearing[0]+10, 0, 0])
+            render()bearing_guide_outer();
+    }
+}