// 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 = 100; use qr_size = 54; qr_height = 2; wall_width = 3; wheel_width = 6; wheel_radius = sqrt(2 * pow(qr_size / 2, 2)) + wall_width / 2; motor_shaft_radius = 3.7; motor_shaft_flat_width = 4.8; module mounting_screw_flat(){ square(2, center = true);} module motor_shaft_flat(radius, flat_width){ intersection(){ circle(radius); square([flat_width, radius * 2], center = true);}} module motor_shaft(radius, flat_width, shaft_length){ linear_extrude(height = shaft_length){ motor_shaft_flat(radius, flat_width);}} module rim(radius, wall_width, wheel_width){ linear_extrude(height = wheel_width){ difference(){ circle(radius); circle(radius - wall_width);}}} module motor_shaft_holder_flat(radius, flat_width, wall_width){ difference(){ motor_shaft_flat(radius + wall_width, flat_width + wall_width); motor_shaft_flat(radius, flat_width);}} module motor_shaft_holder(radius, flat_width, wall_width, height){ linear_extrude(height = height){ motor_shaft_holder_flat(radius, flat_width, wall_width);}} module wheel_black(radius, width, shaft_radius, shaft_flat_width, wall_width){ color("black"){ rim(radius, wall_width, width); linear_extrude(height = qr_height){ difference(){ qr_black_flat(); mounting_screw_flat();}} translate([0, 0, qr_height]){ motor_shaft_holder(shaft_radius, shaft_flat_width, wall_width, width - qr_height);}}} module wheel_white(){ color("white"){ linear_extrude(height = qr_height){ difference(){ qr_white_flat(); mounting_screw_flat();}}}} module wheel(radius, width, shaft_radius, shaft_flat_width, wall_width){ wheel_black(radius, width, shaft_radius, shaft_flat_width, wall_width); wheel_white();} wheel(wheel_radius, wheel_width, motor_shaft_radius, motor_shaft_flat_width, wall_width);