X-Git-Url: http://challenge-bot.com/repos/?a=blobdiff_plain;f=3d-printables%2Fwheel.scad;fp=3d-printables%2Fwheel.scad;h=87ec2865c38c456da267159bce0b19b41291c92d;hb=fa6c6440266670ea11fda3d8bb5a9d48553e00d2;hp=0000000000000000000000000000000000000000;hpb=45417e719505bd89c62203632a5f5e325cef78b8;p=challenge-bot diff --git a/3d-printables/wheel.scad b/3d-printables/wheel.scad new file mode 100644 index 0000000..87ec286 --- /dev/null +++ b/3d-printables/wheel.scad @@ -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();