infty = 100;
eps = 0.01;
-wheel_d = 60;
-wheel_h = 4;
-wheel_thick = 1;
+/*
+// FT Mini Scout - 5 cm, light
+wheel_d = 50;
+wheel_h = 3;
+wheel_thick_outer = 0.5;
+wheel_thick_inner = 1.5;
+wheel_rim = 4.5;
+
+min_wall = 0.5;
+
+spokes = 5;
+spoke_w = 3.5;
+spoke_h = 2;
+spoke_xoff = 10;
+spoke_r = 11.5;
+spoke_center_h = 5;
+
+center_d = 12;
+center_d2 = 6;
+center_hole = 1.2 + 1.3;
+center_h = 8;
+*/
+
+// Sky Surfer 1400 - 6.5 cm, heavier
+wheel_d = 65;
+wheel_h = 5;
+wheel_thick_outer = 1.0;
+wheel_thick_inner = 2.0;
+wheel_rim = 6;
+
+min_wall = 1;
spokes = 5;
spoke_w = 5;
-spoke_h = 3;
+spoke_h = 3.5;
+spoke_xoff = 12;
+spoke_r = 15.3;
+spoke_center_h = 8;
+
+center_d = 16;
+center_d2 = 9;
+center_hole = 2.5 + 1.0;
+center_h = 12;
-center_d = 8;
-center_hole = 3;
+wheel_d1 = wheel_d + wheel_h/2; // center of the rim
+
+module spoke() {
+ intersection() {
+ translate([-spoke_r, spoke_xoff, 0])
+ rotate_extrude($fn = 128) {
+ translate([spoke_r, 0, 0])
+ polygon(points = [
+ [-spoke_w/2, 0], [spoke_w/2, 0],
+ [spoke_w/2, min_wall], [min_wall/2, spoke_h],
+ [-min_wall/2, spoke_h],
+ [-spoke_w/2, min_wall]]
+ );
+ }
+ cylinder(r = wheel_d/2, h = infty);
+ translate([-infty/2, spoke_xoff, 0]) cube(infty);
+ }
+ hull() {
+ // front bottom
+ translate([-spoke_w/2, spoke_xoff, 0])
+ cube([spoke_w, eps, min_wall]);
+ // front top
+ translate([-min_wall/2, spoke_xoff, 0])
+ cube([min_wall, eps, spoke_h]);
+ // center bottom
+ translate([-spoke_w, 0, 0])
+ cube([2*spoke_w, eps, min_wall]);
+ // center top
+ translate([-min_wall/2, 0, spoke_center_h])
+ cube([min_wall, eps, eps]);
+ }
+
+}
module body() {
// rim
difference() {
- cylinder(r = wheel_d/2, h = wheel_h, $fn = 128);
+ hull() {
+ cylinder(r = wheel_d/2, h = wheel_h, $fn = 128);
+ translate([0, 0, wheel_h/2-eps])
+ cylinder(r = wheel_d1/2, h = 2*eps, $fn = 128);
+ }
+ translate([0,0,min_wall-eps])
+ cylinder(r1 = wheel_d/2 - wheel_thick_inner,
+ r2 = wheel_d/2 - wheel_thick_outer,
+ h = wheel_h - min_wall+ 2*eps);
translate([0,0,-eps])
- cylinder(r = wheel_d/2 - wheel_thick, h = wheel_h + 2*eps);
+ cylinder(r = wheel_d/2 - wheel_rim,
+ h = min_wall+2*eps);
}
// spokes
for (a = [0:360/spokes:360-eps]) {
rotate([0, 0, a])
- translate([2, 0, 0])
- hull() {
- translate([-spoke_w/2, 0, 0])
- cube([spoke_w, wheel_d/2 - wheel_thick/2, eps]);
- translate([-eps/2, 0, spoke_h-eps])
- cube([eps, wheel_d/2 - wheel_thick/2, eps]);
- }
+ spoke();
}
- cylinder(r = center_d/2, h = wheel_h);
+ // center cylinders
+ cylinder(r1 = center_d/2, r2 = center_d2/2, h = center_h/2+eps, $fn = 4*spokes);
+ translate([0, 0, center_h/2])
+ cylinder(r1 = center_d2/2, r2 = center_hole/2 + 2*min_wall, h = center_h/2, $fn = 4*spokes);
+}
+
+module wheel() {
+ difference() {
+ body();
+ // center hole
+ translate([0, 0, -eps])
+ cylinder(r = center_hole/2, h = center_h + 2*eps);
+ }
}
-difference() {
- body();
- // center hole
- translate([0, 0, -eps])
- cylinder(r = center_hole/2, h = wheel_h + 2*eps);
+stopper_d = 6;
+stopper_h = 3;
+stopper_hole = 1.2 + 0.5;
+
+module stopper() {
+ difference() {
+ cylinder(r1 = stopper_d/2, r2 = stopper_hole/2 + 2*min_wall, h = stopper_h);
+ translate([0, 0, -eps])
+ cylinder(r = stopper_hole/2, h = stopper_h + 2*eps);
+ }
+}
+
+for (y = [-1, 1]) scale([1, y, 1]) translate([0, wheel_d/2 + 3, 0]) {
+ wheel();
+
+/*
+ translate([wheel_d/2 + stopper_d, 0, 0])
+ stopper();
+*/
}