/
wheel.scad
149 lines (146 loc) · 7.71 KB
/
wheel.scad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
include <dimensions.scad>
module rail() {
difference() {
translate([0, -tool_magnet_width / 2 - tool_wall_thickness, 0]) {
difference() {
cube([tool_wall_thickness * 2, tool_magnet_width + 2 * tool_wall_thickness, tool_magnet_height * 1.5]);
translate([2 * tool_wall_thickness, tool_magnet_width / 2 + tool_wall_thickness, tool_magnet_height * 1.25 + 0.3]) {
rotate([90, 0, 0]) {
cylinder(h = tool_magnet_width + 2 * tool_wall_thickness + 1, d = tool_magnet_height / 2 + 0.2, center = true, $fn = 4);
}
}
}
}
// Slice of corners
/*translate([tool_wall_thickness * 2, tool_magnet_width / 2 + tool_wall_thickness - tool_magnet_height / 2, tool_magnet_height]) {
rotate([0, 0, 45]) {
cube([50, 50, 50], center = false);
}
}*/
translate([tool_wall_thickness * 2, -tool_magnet_width / 2 + tool_magnet_height / 2, tool_magnet_height]) {
rotate([0, 0, -120]) {
cube([50, 50, 50], center = false);
}
}
}
}
module wheel(add_tool = false) {
difference() {
union() {
difference() {
cylinder(h = o_ring_cross_section_diameter, r = o_ring_inner_diameter / 2 + o_ring_cross_section_diameter, center = false, $fn = 200);
translate([0, 0, -0.1]) {
difference() {
cylinder(h = o_ring_cross_section_diameter + 0.2, r = o_ring_inner_diameter / 2 + o_ring_cross_section_diameter - wheel_thickness, center = false, $fn = 200);
translate([0, 0, o_ring_cross_section_diameter / 2]) {
rotate_extrude(convexity = 10, $fn = 200) {
translate([o_ring_inner_diameter / 2 + o_ring_cross_section_diameter - wheel_thickness, 0, 0]) {
circle(r = o_ring_cross_section_diameter / 2 + 0.2, $fn = 4);
}
}
}
}
}
}
if (add_tool) {
for (i = [0:2]) {
rotate([0, 0, 360 * i / 3 + 30]) {
// Magnet holder
translate([tool_magnet_distance_from_center - tool_wall_thickness, -tool_magnet_width / 2 - tool_wall_thickness, 0]) {
cube([tool_magnet_length + 2 * tool_wall_thickness, tool_magnet_width + 2 * tool_wall_thickness, tool_magnet_height]);
}
// Bottom rail
translate([tool_magnet_distance_from_center - tool_wall_thickness * 3, 0, 0]) {
rail();
}
// Top rail
translate([tool_magnet_distance_from_center + tool_magnet_length + tool_wall_thickness * 3, 0, 0]) {
mirror([1, 0, 0]) {
rail();
}
}
// Pin holders
translate([tool_magnet_distance_from_center + tool_wall_thickness + (tool_pin_diameter + tool_wall_thickness), tool_magnet_width + tool_wall_thickness / 2, 0]) {
cylinder(h = tool_magnet_height, d = tool_pin_diameter + tool_wall_thickness, $fn = 50);
}
translate([tool_magnet_distance_from_center + tool_magnet_length - tool_wall_thickness * 1.5, tool_magnet_width + tool_wall_thickness / 2, 0]) {
cylinder(h = tool_magnet_height, d = tool_pin_diameter + tool_wall_thickness, $fn = 50);
}
}
}
}
// Wheel spokes
for (i = [0:5]) {
hull() {
rotate([0, 0, 360 * i / 6]) {
translate([0, -rim_diameter / 2 + wheel_screw_diameter / 2 + rim_thickness, 0]) {
cylinder(h = wheel_thickness, r = wheel_screw_diameter / 2 + rim_thickness, center = false, $fn = 32);
}
}
rotate([0, 0, 360 * i / 6 + 20]) {
translate([0, -o_ring_inner_diameter / 2 - o_ring_cross_section_diameter + wheel_thickness / 2, 0]) {
cylinder(h = wheel_thickness, d = wheel_thickness, center = false, $fn = 32);
}
}
}
hull() {
rotate([0, 0, 360 * i / 6]) {
translate([0, -rim_diameter / 2 + wheel_screw_diameter / 2 + rim_thickness, 0]) {
cylinder(h = wheel_thickness, r = wheel_screw_diameter / 2 + rim_thickness, center = false, $fn = 32);
}
}
rotate([0, 0, 360 * i / 6 - 20]) {
translate([0, -o_ring_inner_diameter / 2 - o_ring_cross_section_diameter + wheel_thickness / 2, 0]) {
cylinder(h = wheel_thickness, d = wheel_thickness, center = false, $fn = 32);
}
}
}
hull() {
rotate([0, 0, 360 * i / 6]) {
translate([0, -rim_diameter / 2 + wheel_screw_diameter / 2 + rim_thickness, 0]) {
cylinder(h = wheel_thickness, r = wheel_screw_diameter / 2 + rim_thickness, center = false, $fn = 32);
}
}
rotate([0, 0, 360 * i / 6]) {
translate([0, -o_ring_inner_diameter / 2 - o_ring_cross_section_diameter + wheel_thickness / 2, 0]) {
cylinder(h = wheel_thickness, d = wheel_thickness, center = false, $fn = 32);
}
}
}
}
}
translate([0, 0, o_ring_cross_section_diameter / 2]) {
rotate_extrude(convexity = 10, $fn = 200) {
translate([o_ring_inner_diameter / 2 + o_ring_cross_section_diameter, 0, 0]) {
circle(r = o_ring_cross_section_diameter / 2 + 0.01, $fn = 4);
}
}
}
// Wheel holes
for (i = [0:5]) {
rotate([0, 0, 360 * i / 6]) {
translate([0, -rim_diameter / 2 + wheel_screw_diameter / 2 + rim_thickness, -0.01]) {
cylinder(h = wheel_thickness + 0.02, r = wheel_screw_diameter / 2 + 0.2, center = false, $fn = 32);
}
}
}
if (add_tool) {
for (i = [0:2]) {
rotate([0, 0, 360 * i / 3 + 30]) {
// Magnet hole
translate([tool_magnet_distance_from_center, -tool_magnet_width / 2, -0.1]) {
cube([tool_magnet_length, tool_magnet_width, tool_magnet_height + 1]);
}
// Pin holes
translate([tool_magnet_distance_from_center + tool_wall_thickness + (tool_pin_diameter + tool_wall_thickness), tool_magnet_width + tool_wall_thickness / 2, -0.1]) {
cylinder(h = tool_magnet_height + 1, d = tool_pin_diameter - 0.1, $fn = 50);
}
translate([tool_magnet_distance_from_center + tool_magnet_length - tool_wall_thickness * 1.5, tool_magnet_width + tool_wall_thickness / 2, -0.1]) {
cylinder(h = tool_magnet_height + 1, d = tool_pin_diameter - 0.1, $fn = 50);
}
}
}
}
}
}
wheel(add_tool = true);