libs/Threading/Threading.scad

changeset 0
15eac37578b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libs/Threading/Threading.scad	Wed Sep 12 12:48:28 2018 +0200
@@ -0,0 +1,93 @@
+// Threading.scad - library for threadings
+// Autor: Rudolf Huttary, Berlin 2016 
+
+use <Naca_sweep.scad> // http://www.thingiverse.com/thing:900137
+
+// examples 
+showexample = 10;   // choose your example number
+
+example(showexample)
+{
+// #1 ACME thread
+  threading(pitch = 2, d=20, windings = 5, angle = 29); 
+
+// #2 threaded rod 20°
+  threading(pitch = 2, d=20, windings = 30, angle = 20, full = true); 
+
+// #3 nut for threaded rod 20°
+  Threading(pitch = 2, d=20, windings = 10, angle = 20, full = true); 
+
+// #4 nut for threaded rod 20°, own diameter 25 mm, hires 
+  Threading(D = 25, pitch = 2, d=20, windings = 10, angle = 20, full = true, step = 50, $fn=100); 
+
+// #5 triple helix threaded rod
+  threading(pitch = 2, d=20, windings = 30, helices = 3, angle = 20, full = true); 
+
+// #6 toothed rod (no pitch) 
+   threading(helices = 0, angle = 20, full = true); 
+
+// #7 toothed cube (no pitch) 
+   threading(helices = 0, angle = 60, full = true, steps=4); 
+
+// #8 M8 hex bolt
+   union(){
+     threading(pitch = 1.25, d=8, windings=20, full=true); cylinder(d=14.6, h=4, $fn=6);} 
+// #9 M8 hex nut
+   Threading(D=14.6, pitch = 1.25, d=8, windings=5, full=true, $fn=6);  
+// #10 M8 four socket nut
+   Threading(D=16, pitch = 1.25, d=8, windings=5, full=true, $fn=4);  
+}
+
+module example(number=0) if(number) children(number-1);
+
+help(); 
+module help()
+{
+  helpstr = 
+  "Thread library - Rudolf Huttary \n
+    D = {0=auto};  // Cyl diameter Threading() \n
+    d = 6;         // outer diameter thread() \n
+    windings = 10; // number of windings \n
+    helices = 1;   // number of threads \n
+    angle = 60;    // open angle <76, bolts: 60°, ACME: 29°, toothed Racks: 20° \n
+    steps = 40;    // resolution \n
+    help();        // show help in console
+    threading(pitch = 1, d = 6, windings = 10, helices = 1, angle = 60, steps=40, full = false) \n
+    Threading(D = 0, pitch = 1, r = 6, windings = 10, helices = 1, angle = 60, steps=40) \n
+  ";
+  echo (helpstr);
+}
+
+//Threading(R=12, pitch = pitch, r=radius, windings= windings, angle = angle); 
+
+module Threading(D = 0, pitch = 1, d = 12, windings = 10, helices = 1, angle = 60, steps=40)
+{
+  R = D==0?d/2+2*pitch/PI:D/2; 
+  translate([0,0,-pitch])
+  difference()
+  { 
+    translate([0,0,pitch]) 
+    cylinder (r=R, h =pitch*(windings-helices)); 
+    threading(pitch, d, windings, helices, angle, steps, true); 
+  }
+}
+
+module threading(pitch = 1, d = 12, windings = 10, helices = 1, angle = 60, steps=40, full = false)
+{  // tricky: glue two 180° pieces together to get a proper manifold  
+  r = d/2;
+  Steps = steps/2; 
+  Pitch = pitch*helices; 
+  if(full) cylinder(r = r-.5-pitch/PI, h=pitch*(windings+helices), $fn=steps); 
+  sweep(gen_dat());   // half screw
+  rotate([0, 0, 180]) translate([0, 0, Pitch/2])
+  sweep(gen_dat());   // half screw
+echo(steps); 
+  function gen_dat() = let(ang = 180, bar = R_(180, -90, 0, Ty_(-r+.5, vec3D(pitch/PI*Rack(windings, angle)))))
+        [for (i=[0:Steps]) Tz_(i/2/Steps*Pitch, Rz_(i*ang/Steps, bar))]; 
+
+  function Rack(w, angle) = 
+     concat([[0, 2]], [for (i=[0:windings-1], j=[0:3])
+     let(t = [ [0, 1], [2*tan(angle/2), -1], [PI/2, -1], [2*tan(angle/2)+PI/2, 1]])
+        [t[j][0]+i*PI, t[j][1]]], [[w*PI, 1], [w*PI, 2]]);
+}
+

mercurial