use spokes on wheels
[challenge-bot] / 3d-printables / wheel-data.scad
CommitLineData
25cd00a6 1/*
2 Copyright (C) 2015 Daniel Watson
3 See the end of the file for license conditions.
4*/
3d90aff0 5// challenge-bot
6// GNU AGPLv3 (or later at your option)
25cd00a6 7// project available here:
8// https://challenge-bot.com/
3d90aff0 9
10// use $fn = 20 while developing, 100 when about to print
11// 20 will make previews fast
12// 100 will make printing smooth
13$fn = 100;
14
3cfef3f3 15wheel_square_spoke_size = 45;
16wheel_square_spoke_thickness = 2;
3d90aff0 17
18wall_width = 3;
19
c513c8ee 20wheel_width = 7;
21c36d93 21wheel_radius =
22 sqrt(2 * pow(wheel_square_spoke_size / 2, 2)) + wall_width / 2 + 1;
3d90aff0 23
06ad635f 24motor_shaft_radius = 3.9;
25motor_shaft_flat_width = 5.2;
3d90aff0 26
27tread_radius = 4 / 2;
28
29module mounting_screw_flat() {
3d0dc05f 30 circle(1.1); }
3d90aff0 31
32module motor_shaft_flat(radius, flat_width) {
33 intersection() {
34 circle(radius);
35 square([flat_width, radius * 2], center = true); } }
36
37module motor_shaft(radius,
38 flat_width,
39 shaft_length) {
40 linear_extrude(height = shaft_length) {
41 motor_shaft_flat(radius, flat_width); } }
42
43module rim(radius, wall_width, wheel_width) {
44 linear_extrude(height = wheel_width) {
45 difference() {
46 circle(radius);
47 circle(radius - wall_width); } } }
48
49module motor_shaft_holder_flat(radius, flat_width, wall_width) {
50 difference() {
51 motor_shaft_flat(radius + wall_width,
52 flat_width + wall_width);
53 motor_shaft_flat(radius, flat_width); } }
54
55module motor_shaft_holder(radius, flat_width, wall_width, height) {
56 linear_extrude(height = height) {
57 motor_shaft_holder_flat(radius, flat_width, wall_width); } }
58
59module tread(wheel_radius, tread_radius) {
60 rotate_extrude(convexity = 10) {
61 translate([wheel_radius, 0]) {
62 circle(tread_radius); } } }
63
3d90aff0 64module wheel(radius,
65 width,
66 shaft_radius,
67 shaft_flat_width,
68 wall_width,
69 tread_radius) {
896e93d7 70 spoke_count = 7;
71 spoke_width = radius / 3;
3d90aff0 72 difference() {
73 rim(radius, wall_width * 2, width);
74 translate([0, 0, width / 2]) {
75 tread(radius, tread_radius); } }
3cfef3f3 76 linear_extrude(height = wheel_square_spoke_thickness) {
3d90aff0 77 difference() {
896e93d7 78 union(){
79 for(spoke = [0: spoke_count - 1]) {
80 rotate(spoke * 360 / spoke_count) {
81 translate([-spoke_width / 2, 0]){
82 square([spoke_width, radius - 2]); } } } }
3d90aff0 83 mounting_screw_flat(); } }
3cfef3f3 84 translate([0, 0, wheel_square_spoke_thickness]) {
3d90aff0 85 motor_shaft_holder(shaft_radius,
86 shaft_flat_width,
87 wall_width,
3cfef3f3 88 width - wheel_square_spoke_thickness); } }
25cd00a6 89
90/*
91 This file is part of challenge-bot.
92
93 Challenge-bot is free software: you can redistribute it and/or modify
94 it under the terms of the GNU Affero General Public License as published by
95 the Free Software Foundation, either version 3 of the License, or
96 (at your option) any later version.
97
98 GNU Affero Emacs is distributed in the hope that it will be useful,
99 but WITHOUT ANY WARRANTY; without even the implied warranty of
100 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
101 GNU Affero General Public License for more details.
102
103 You should have received a copy of the GNU Affero General Public License
104 along with challenge-bot. If not, see <http://www.gnu.org/licenses/>.
105*/