x-end: initial import of prusa mk3 belt tensioner
[clinton/prusa3.git] / box_frame / x-end-idler.scad
dissimilarity index 69%
index cbf2238..7bcff04 100644 (file)
@@ -1,57 +1,81 @@
-// PRUSA iteration3
-// X end idler
-// GNU GPL v3
-// Josef Průša <iam@josefprusa.cz> and contributors
-// http://www.reprap.org/wiki/Prusa_Mendel
-// http://prusamendel.org
-// Alterations for reprap wilson by M. Rice <mrice411@gmail.com>
-
-include <configuration.scad>
-use <x-end.scad>
-
-idler_offs_z = -1; // negative here means "up" when installed
-idler_offs_y = 4;
-
-center_z = 30.25 -1;
-tensioner_size_z = 12;
-
-module x_end_idler_base(){
- x_end_base();
-}
-
-module x_end_idler_holes(){
- x_end_holes();
- translate([0,idler_offs_y,idler_offs_z]) {
-      #translate(v=[0,-22,30.25]) rotate(a=[0,-90,0]) cylinder(h = 80, r=idler_bearing[2]/2+.3, $fn=30);
-      #translate(v=[2,-22,30.25]) rotate(a=[0,-90,0]) cylinder(h = 10, r=idler_bearing[2]/2 + 1, $fn=30);
-      #translate(v=[-21.5,-22,30.25]) rotate(a=[0,-90,0]) rotate(a=[0,0,30]) cylinder(h = 80, r=idler_bearing[2], $fn=6);
-
-      // create a notch for the X tensioner, to improve the length of
-      // travel available
-      translate (v=[0,-22,30.25]) translate(v=[-10,-20,1]) #difference()  {
-          rotate(a=[45,0,0])  cube(size=[30,22,22],center=true); 
-          translate(v=[0,14,0]) cube(size=[31,4,8],center=true);
-      }
- }
-}
-// Final part
-module x_end_idler(){
- mirror([0,1,0]) difference(){
-  x_end_idler_base();
-  x_end_idler_holes();
- }
-
- // added ridges to keep the tensioner from pitching
- for (x = [-9.8, -20.2], z = [center_z-tensioner_size_z/2 - .5, center_z+tensioner_size_z/2 + .5]) {
-      d = 2;
-      translate(v=[x,1, z]) intersection () {
-          rotate ([45, 0, 90]) cube(size=[20,d, d],center=true);
-          translate ([(x < -15) ? d  : -d, 0, 0]) rotate ([0, 0, 90]) cube(size=[20,d*2, d*2],center=true);
-      }
- }
-}
-
-x_end_idler();
-
-
+// PRUSA iteration3
+// X end idler
+// GNU GPL v3
+// Josef Průša <iam@josefprusa.cz> and contributors
+// http://www.reprap.org/wiki/Prusa_Mendel
+// http://prusamendel.org
+// Alterations for reprap wilson by M. Rice <mrice411@gmail.com>
+
+include <configuration.scad>
+use <x-end.scad>
+use <inc/bearing-guide.scad>
+use <y-drivetrain.scad>
+
+// todo:
+
+// Bearing is being moved back into mount and separate tensioner
+// removed, need to ensure the width of the slot is wide enough to fix
+// the bearing plus 1-2mm clearance. Can calculate along with
+// x_box_width in settings.scad. Unlikely there's any reason to
+// complicate x_box_width by checking if bearing exceeds the width
+// calculated based rod diameter.
+
+// radius of screw hole for pulley (todo: ideally would adjust to
+// closest screw diameter to idler_bearing inner diameter)
+pulley_mount_radius = m4_diameter/2;
+// Y position of the pulley mount, adjusted to clear z bearing
+// fixme: not sure about z_delta/2 anymore
+pulley_mount_y = x_base_inside()
+     // ensuring entire bearing fits inside idler
+     + idler_bearing[0]
+     // including flange (even if not using bearing guide since
+     // bearings without will have their own flanges and the size of
+     // those is not configurable)
+     + (idler_assy_r_outer(idler_bearing) - idler_assy_r_inner(idler_bearing))
+     // and recess by 2mm
+     + 2
+     - z_delta / 2;
+// Z position of pulley mount, adjusted so bottom of idler aligns with
+// bottom of motor pulley (note: in the x-carriage currently generated
+// this is backward since the belt runs above the carriage mounting
+// points)
+pulley_mount_z = x_motor_shaft_z () + (motor_pulley[0]/2 - idler_bearing[0]/2);
+
+module x_end_idler_base(){
+ x_end_base();
+}
+
+module x_end_idler_holes(){
+ x_end_holes();
+
+ // tensioner mount
+ translate([-20, pulley_mount_y, pulley_mount_z]) {
+      #rotate([0, 90, 0]) cylinder(r=pulley_mount_radius, 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);
+ }
+}
+
+// Final part
+module x_end_idler(){
+ mirror([0,1,0]) difference(){
+  x_end_idler_base();
+  x_end_idler_holes();
+ }
+
+ %translate([-14 - xy_delta / 2, 25, pulley_mount_z - (max(idler_width, 16) / 2)]) x_tensioner();
+}
+
+module x_tensioner(len=50, idler_height=max(idler_bearing[0], 16)) {
+     // todo: scal narrow_width with size of belt hole, if that becomes scalable
+     idlermount(len=len, rod=m4_diameter / 2 + 0.5, idler_height=idler_height, narrow_len=30, narrow_width=9);
+}
+
+translate([-40, 0, 4 - bushing_xy[0]]) x_tensioner();
+
+x_end_idler();
+
+if (idler_bearing[3] == 1) {  // bearing guides
+    translate([-39,  -60 - idler_bearing[0] / 2, 4 - bushing_xy[0]]) rotate([0, 0, 55]) {
+        render() bearing_assy();
+    }
+}