/* Copyright (C) 2015 Daniel Watson See the end of the file for license conditions. */ // challenge-bot // GNU AGPLv3 (or later at your option) // project available here: // https://challenge-bot.com/ // use $fn = 20 while developing, 100 when about to print // 20 will make previews fast // 100 will make printing smooth $fn = 100; wheel_square_spoke_size = 45; wheel_square_spoke_thickness = 2; wall_width = 3; wheel_width = 7; wheel_radius = sqrt(2 * pow(wheel_square_spoke_size / 2, 2)) + wall_width / 2 + 1; motor_shaft_radius = 3.9; motor_shaft_flat_width = 5.2; tread_radius = 4 / 2; module mounting_screw_flat() { circle(1.1); } 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 tread(wheel_radius, tread_radius) { rotate_extrude(convexity = 10) { translate([wheel_radius, 0]) { circle(tread_radius); } } } module wheel(radius, width, shaft_radius, shaft_flat_width, wall_width, tread_radius) { spoke_count = 7; spoke_width = radius / 3; difference() { rim(radius, wall_width * 2, width); translate([0, 0, width / 2]) { tread(radius, tread_radius); } } linear_extrude(height = wheel_square_spoke_thickness) { difference() { union(){ for(spoke = [0: spoke_count - 1]) { rotate(spoke * 360 / spoke_count) { translate([-spoke_width / 2, 0]){ square([spoke_width, radius - 2]); } } } } mounting_screw_flat(); } } translate([0, 0, wheel_square_spoke_thickness]) { motor_shaft_holder(shaft_radius, shaft_flat_width, wall_width, width - wheel_square_spoke_thickness); } } /* This file is part of challenge-bot. Challenge-bot is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNU Affero Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with challenge-bot. If not, see . */