e = 0.1; $fn = 60; module motor() { translate([0, 0, 18+21]) cylinder(3, d=6.5, d=6.5); translate([0, 0, 18]) cylinder(18, d=23.5, d=23.5); cylinder(21, d=25, d=25); } module wheel() { spokes = 5; r = 20; // Wheel radius w = 2; // Spoke radius rt = 4; // Rim thickness module spokes() { rotate([0, 90, 0]) for (i = [0:360/spokes:360]) { rotate([i, 0, 0]) cylinder(r, w, w); } } module hub() { translate([0, 0, -w]) cylinder(w*2, d=19, d=19); } module slot(o) { t = 1; translate([0, 0, o]) difference() { translate([0, 0, -w]) linear_extrude(t) circle(r+rt+e); translate([0, 0, -w-e]) linear_extrude(t+2*e) circle(r+rt-t); } } module rim() { difference() { translate([0, 0, -w]) linear_extrude(w*2) circle(r+rt); translate([0, 0, -w-e]) linear_extrude(w*2+2*e) circle(r); slot((rt-1)/2); } } module cap() { v = 6; cylinder(v, 5, 5); translate([0, 0, v]) sphere(5); } translate([0, 0, w]) union() { // spokes(); hub(); // rim(); cap(); } } module shaft() { h = 9.8+3; r = 2 + 0.4; difference() { translate([0, 0, -2]) cylinder(h, r, r); translate([2*2-2.5, -2*r, -2-e]) cube([4, 4*r, h+e*2]); } translate([0, 0, -e]) cylinder(0.6, r+1, r+1); } difference() { wheel(); shaft(); }