put sketches and 3d printables into sub-dirs
[challenge-bot] / 3d-printables / wheel.scad
diff --git a/3d-printables/wheel.scad b/3d-printables/wheel.scad
new file mode 100644 (file)
index 0000000..87ec286
--- /dev/null
@@ -0,0 +1,73 @@
+// challenge-bot
+// GNU AGPLv3 (or later at your option)
+// project available at these locations:
+// https://gitorious.org/ozzloy/challenge-bot
+// https://github.com/waynegramlich/challenge-bot
+
+// use $fn = 20 while developing, 100 when about to print
+//  20 will make previews fast
+//  100 will make printing smooth
+$fn = 20;
+
+wheel_depth = 6;
+wheel_radius = 68/2;
+
+module encoder_shaft(){
+  // measured with calipers, checked against the motor shaft
+  motor_shaft_big = 3.7; // radius, gets doubled in cylinder
+  motor_shaft_small = 4.8; // total length of box
+  motor_shaft_length = wheel_depth * 3 / 4;
+
+  intersection(){
+    cylinder(h = motor_shaft_length, r = motor_shaft_big, center = true);
+    // x direction is multiplied by 2 because the radius of the cylinder
+    // goes in both directions.  the extra .1 is for overlap
+    cube([motor_shaft_big * 2.1, motor_shaft_small, motor_shaft_length],
+         center = true);}}
+
+module mounting_screw(){
+  cylinder(h = wheel_depth * 1.1, r = 1, center = true);}
+
+module wheel(){
+  translate([0, 0, wheel_depth / 2]){
+    difference(){
+      cylinder(h = wheel_depth, r = wheel_radius, center = true);
+      translate([0, 0, wheel_depth / 4]){
+        scale([1, 1, 1.1]){
+          encoder_shaft();}}
+      mounting_screw();
+      for(i = [1 : 5]){
+        rotate(i * 360/5, [0, 0, 1]){
+          translate([0, 0, -0.6 * wheel_depth])
+            between_spokes();}}
+      translate([0, 0, wheel_depth / 4]){
+        difference(){
+          cylinder(h = wheel_depth / 1.2,
+                   r = 0.85 * wheel_radius,
+                   center = true);
+          cylinder(h = wheel_depth / 1.2,
+                   r = 0.23 * wheel_radius,
+                   center = true);}}}}}
+
+module wheel_block(){
+  cube([wheel_radius, wheel_radius, wheel_depth]);}
+
+module pie_slice(){
+  intersection(){
+    translate([0, 0, wheel_depth / 2]){
+      cylinder(h = wheel_depth,
+               r = 0.85 * wheel_radius,
+               center = true);}
+    translate([0, wheel_radius * 0.3, 0]){
+      rotate([0, 0, (360 / 5) / 2]){
+        intersection(){
+          wheel_block();
+          rotate([0, 0, 90 - 360 / 5])
+            wheel_block();}}}}}
+
+module between_spokes(){
+  minkowski(){
+    pie_slice();
+    cylinder(h = wheel_depth / 2, r = 1);}}
+
+wheel();