diff --git a/tire/tire_81.6_50.scad b/tire/tire_81.6_50.scad index bc7d607..cfa6fab 100644 --- a/tire/tire_81.6_50.scad +++ b/tire/tire_81.6_50.scad @@ -5,10 +5,15 @@ $fn=60; // 81.6x50: +// rim offset is (SPOKE_THICKNESS+(R_I-SPACING-RIM_THICKNESS-CUT_BASE)/2), +// so offset=4mm if SPOKE_THICKNESS=12.85 + R=40.8; // outer radius R_I=26.5; // innermost radius BEVEL=2; +BEVEL_OUTER=0.8; THICKNESS=2.5; +BORDER_THICKNESS=2.5; PROT_DEPTH=1; PROT_L_WIDTH=2; PROT_A_WIDTH=2; @@ -19,14 +24,15 @@ B_P=4; // position of edge for the rim W=50; // tire width N_L=4; // number of lateral protectors N_A=10; // number of angular protectors -SPOKE_THICKNESS=10; // thickness of solid spoke part +SPOKE_THICKNESS=12.85; // thickness of solid spoke part RIM_THICKNESS=2; N_SPOKE=9; // number of spokes CUT_BASE=8; CUT_ANGLE=12; CUT_I_R=1.5; CUT_O_R=2; -SPACING=0.2; +SPACING=0.6; +HOLE_RADIUS=2.4; // my Wanhao Duplicator 4 makes no errors with Slic3r, 2.4mm is ideal lego hole // 6-spoke variant N_SPOKE=6; @@ -36,56 +42,65 @@ CUT_O_R=2; // small R=22; -BEVEL=1; -THICKNESS=1.5; -FIX_WIDTH=1; +BEVEL=0.6; +THICKNESS=1.2; +BORDER_THICKNESS=0.8; +PROT_DEPTH=0.4; +SPOKE_THICKNESS=8; +FIX_WIDTH=1.2; PROT_A_WIDTH=1; PROT_L_WIDTH=1; B_P=3; -B=1; +B_W=1; +B=1.6; R_I=15; CUT_O_R=1; CUT_BASE=5; N_L=2; -W=20; +N_A=0; +W=16; difference() { union() { translate([0, 0, W]) rotate([180, 0, 0]) { rim(); - // Support ... - translate([0, 0, SPOKE_THICKNESS+(R_I-SPACING-RIM_THICKNESS-CUT_BASE)/2+SPACING]) cylinder(r=CUT_BASE, h=W-(SPOKE_THICKNESS+(R_I-SPACING-RIM_THICKNESS-CUT_BASE)/2+SPACING)); - translate([0, 0, W-(B_P-FIX_WIDTH-SPACING)+SPACING]) cylinder(r=R_I+B-SPACING, h=(B_P-FIX_WIDTH-SPACING)-SPACING); -/* - translate([0, 0, W-(B_P-FIX_WIDTH-SPACING)-2-B+SPACING]) difference() { - cylinder(r=R_I+B+THICKNESS, h=(B_P-FIX_WIDTH-SPACING)+2+B-SPACING); - translate([0, 0, -1]) cylinder(r=R_I+B+SPACING, h=1+(B_P-FIX_WIDTH-SPACING)+2+B-SPACING-((B_P-FIX_WIDTH-SPACING)-SPACING)); - } -*/ } - tire(); + difference() { + tire(); + // first layer usually becomes slightly bigger... + difference() { + cylinder(r=R, h=0.3); + translate([0, 0, -0.1]) cylinder(r=R-BEVEL_OUTER-0.2, h=1); + } + } + /* + // "Manual support material" needed to print tire + difference() { + hull() { + cylinder(r=R_I+B-0.2, h=B_P-0.2-(BEVEL-0.2*(2-sqrt(2)))); + cylinder(r=R_I+B-0.2-(BEVEL-0.2*(2-sqrt(2))), h=B_P-0.2); + } + translate([0, 0, -0.1]) cylinder(r=R_I+B-0.2-2, h=B_P); + } + translate([0, 0, B_P+B_W+0.3]) + difference() { + cylinder(r=R_I+B+THICKNESS, h=W-2*(B_P+B_W+0.3)); + cylinder(r=R_I, h=W); + }*/ } // to cut and look inside :) translate([0, 0, -0.5]) cube(size=[R+10, R+10, W+1]); } module rim() { + V_SPACING=0.2; color([0.5, 0.5, 1]) { difference() { union() { - cylinder(r=R_I-SPACING, h=W-(B_P-FIX_WIDTH-SPACING)); + cylinder(r=R_I-SPACING, h=W-(B_P-FIX_WIDTH-V_SPACING)); // outer fixing edges - cylinder(r=R_I+B-SPACING, h=FIX_WIDTH+(B_P-FIX_WIDTH-SPACING)); - translate([0, 0, W-(B_P-FIX_WIDTH-SPACING)-FIX_WIDTH]) cylinder(r=R_I+B-SPACING, h=FIX_WIDTH); - // inner fixing edges, 45 degree slope for easier printing - translate([0, 0, FIX_WIDTH+(B_P-FIX_WIDTH-SPACING)+(B_W+SPACING)+SPACING]) hull() { - cylinder(r=R_I+B+THICKNESS, h=FIX_WIDTH); - translate([0, 0, B+THICKNESS+SPACING]) cylinder(r=R_I-SPACING, h=FIX_WIDTH); - } - translate([0, 0, W-(FIX_WIDTH+(B_P-FIX_WIDTH-SPACING)+(B_W+SPACING))-FIX_WIDTH-SPACING]) hull() { - cylinder(r=R_I+B+THICKNESS, h=FIX_WIDTH); - translate([0, 0, -(B+THICKNESS+SPACING)]) cylinder(r=R_I-SPACING, h=FIX_WIDTH); - } + cylinder(r=R_I+B-SPACING, h=FIX_WIDTH+(B_P-FIX_WIDTH-V_SPACING)); + translate([0, 0, W-(B_P-FIX_WIDTH-V_SPACING)-FIX_WIDTH]) cylinder(r=R_I+B-SPACING, h=FIX_WIDTH); } // make spokes by cutting space between them for (i = [1 : N_SPOKE]) @@ -104,9 +119,9 @@ module rim() { translate([0, 0, -1]) cylinder(r=CUT_BASE-2, h=5+(B_P-FIX_WIDTH-SPACING)); // make spokes convex using another toroidal cut difference() { - translate([0, 0, -1]) cylinder(r=1+R_I+B-0.5/*R_I-2*/, h=1+(B_P-FIX_WIDTH-SPACING)); - translate([0, 0, (B_P-FIX_WIDTH-SPACING)]) - scale([1, 1, (B_P-FIX_WIDTH-SPACING)/((R_I-SPACING-RIM_THICKNESS-CUT_BASE+2)/2)]) + translate([0, 0, -1]) cylinder(r=1+R_I+B-0.5/*R_I-2*/, h=1+(B_P-FIX_WIDTH-V_SPACING)); + translate([0, 0, (B_P-FIX_WIDTH-V_SPACING)]) + scale([1, 1, (B_P-FIX_WIDTH-V_SPACING)/((R_I-SPACING-RIM_THICKNESS-CUT_BASE+2)/2)]) rotate_extrude(convexity = 10) translate([(R_I-SPACING-CUT_BASE)/2+CUT_BASE-RIM_THICKNESS, 0, 0]) circle(r = (R_I-SPACING-CUT_BASE)/2); } @@ -131,38 +146,55 @@ module rim_cut() { } module tire() { +b_i = BEVEL; +bo_i = max(BEVEL, BEVEL_OUTER-THICKNESS*(2-sqrt(2))); difference() { hull() { - translate([0, 0, BEVEL]) cylinder(r=R, h=W-BEVEL*2); - cylinder(r=R-BEVEL, h=W); + translate([0, 0, BEVEL_OUTER]) cylinder(r=R, h=W-BEVEL_OUTER*2); + cylinder(r=R-BEVEL_OUTER, h=W); } // center hole through all piece translate([0, 0, -0.5]) cylinder(r=R_I, h=W+1); // top hole - translate([0, 0, W-B_P]) cylinder(r=R_I+B, h=B_P+1); + hull() { + translate([0, 0, W-B_P+BEVEL]) cylinder(r=R_I+B, h=B_P+1); + translate([0, 0, W-B_P]) cylinder(r=R_I+B-BEVEL, h=B_P+1); + } hull() { translate([0, 0, W-BEVEL]) cylinder(r=R_I+B, h=BEVEL); translate([0, 0, W]) cylinder(r=R_I+B+BEVEL, h=1); } // bottom hole - translate([0, 0, -1]) cylinder(r=R_I+B, h=B_P+1); + hull() { + translate([0, 0, -1]) cylinder(r=R_I+B-BEVEL, h=B_P+1); + translate([0, 0, -1]) cylinder(r=R_I+B, h=B_P+1-BEVEL); + } hull() { translate([0, 0, 0]) cylinder(r=R_I+B, h=BEVEL); translate([0, 0, -1]) cylinder(r=R_I+B+BEVEL, h=1); } // inside cut - translate([0, 0, B_P+B_W]) cylinder(r=R-THICKNESS-PROT_DEPTH/2, h=W-(B_P+B_W)*2); + translate([0, 0, B_P+B_W]) cylinder(r=R-THICKNESS, h=W-(B_P+B_W)*2); difference() { - translate([0, 0, THICKNESS]) cylinder(r=R-THICKNESS-PROT_DEPTH/2, h=W-THICKNESS*2); + hull() { + translate([0, 0, BORDER_THICKNESS]) cylinder(r=R-THICKNESS-bo_i, h=W-BORDER_THICKNESS*2); + translate([0, 0, BORDER_THICKNESS+bo_i]) cylinder(r=R-THICKNESS, h=W-BORDER_THICKNESS*2-bo_i*2); + } cylinder(r=R_I+B+THICKNESS, h=W); + translate([0, 0, W-BORDER_THICKNESS-b_i]) + linear_extrude(height=b_i, scale=(R_I+B+THICKNESS+b_i)/(R_I+B+THICKNESS)) + circle(r=R_I+B+THICKNESS); + translate([0, 0, BORDER_THICKNESS]) + linear_extrude(height=b_i, scale=(R_I+B+THICKNESS)/(R_I+B+THICKNESS+b_i)) + circle(r=R_I+B+THICKNESS+b_i); } // lateral protector if (N_L > 0) for (i = [1 : N_L]) translate([0, 0, -PROT_L_WIDTH/2+i*W/(N_L+1)]) difference() { cylinder(r=R+1, h=PROT_L_WIDTH); - translate([0, 0, -0.01]) linear_extrude(height=min(PROT_L_WIDTH/2-0.1, PROT_DEPTH/2)+0.01, scale=(R-PROT_DEPTH)/(R+0.01)) circle(r=R+0.01); - translate([0, 0, PROT_L_WIDTH]) rotate([180, 0, 0]) translate([0, 0, -0.01]) linear_extrude(height=min(PROT_L_WIDTH/2-0.1, PROT_DEPTH/2)+0.01, scale=(R-PROT_DEPTH)/(R+0.01)) circle(r=R+0.01); + translate([0, 0, -0.01]) linear_extrude(height=PROT_L_WIDTH/2+0.01, scale=(R-PROT_DEPTH)/(R+0.01)) circle(r=R+0.01); + translate([0, 0, PROT_L_WIDTH]) rotate([180, 0, 0]) translate([0, 0, -0.01]) linear_extrude(height=PROT_L_WIDTH/2+0.01, scale=(R-PROT_DEPTH)/(R+0.01)) circle(r=R+0.01); translate([0, 0, -0.1]) cylinder(r=R-PROT_DEPTH, h=PROT_L_WIDTH+0.2); } // angular protector @@ -185,7 +217,6 @@ module protector_angular() { module axle(height) { axle_gap = 1.95; - HOLE_RADIUS = 2.55; union() { translate([-HOLE_RADIUS, -axle_gap/2, 0]) roundedRect(HOLE_RADIUS * 2, axle_gap, .2);