fix tire (now prints and looks ok with "manual support")
parent
d6a3326b82
commit
9d2cf369f5
|
@ -5,10 +5,15 @@ $fn=60;
|
||||||
|
|
||||||
// 81.6x50:
|
// 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=40.8; // outer radius
|
||||||
R_I=26.5; // innermost radius
|
R_I=26.5; // innermost radius
|
||||||
BEVEL=2;
|
BEVEL=2;
|
||||||
|
BEVEL_OUTER=0.8;
|
||||||
THICKNESS=2.5;
|
THICKNESS=2.5;
|
||||||
|
BORDER_THICKNESS=2.5;
|
||||||
PROT_DEPTH=1;
|
PROT_DEPTH=1;
|
||||||
PROT_L_WIDTH=2;
|
PROT_L_WIDTH=2;
|
||||||
PROT_A_WIDTH=2;
|
PROT_A_WIDTH=2;
|
||||||
|
@ -19,14 +24,15 @@ B_P=4; // position of edge for the rim
|
||||||
W=50; // tire width
|
W=50; // tire width
|
||||||
N_L=4; // number of lateral protectors
|
N_L=4; // number of lateral protectors
|
||||||
N_A=10; // number of angular 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;
|
RIM_THICKNESS=2;
|
||||||
N_SPOKE=9; // number of spokes
|
N_SPOKE=9; // number of spokes
|
||||||
CUT_BASE=8;
|
CUT_BASE=8;
|
||||||
CUT_ANGLE=12;
|
CUT_ANGLE=12;
|
||||||
CUT_I_R=1.5;
|
CUT_I_R=1.5;
|
||||||
CUT_O_R=2;
|
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
|
// 6-spoke variant
|
||||||
N_SPOKE=6;
|
N_SPOKE=6;
|
||||||
|
@ -36,56 +42,65 @@ CUT_O_R=2;
|
||||||
|
|
||||||
// small
|
// small
|
||||||
R=22;
|
R=22;
|
||||||
BEVEL=1;
|
BEVEL=0.6;
|
||||||
THICKNESS=1.5;
|
THICKNESS=1.2;
|
||||||
FIX_WIDTH=1;
|
BORDER_THICKNESS=0.8;
|
||||||
|
PROT_DEPTH=0.4;
|
||||||
|
SPOKE_THICKNESS=8;
|
||||||
|
FIX_WIDTH=1.2;
|
||||||
PROT_A_WIDTH=1;
|
PROT_A_WIDTH=1;
|
||||||
PROT_L_WIDTH=1;
|
PROT_L_WIDTH=1;
|
||||||
B_P=3;
|
B_P=3;
|
||||||
B=1;
|
B_W=1;
|
||||||
|
B=1.6;
|
||||||
R_I=15;
|
R_I=15;
|
||||||
CUT_O_R=1;
|
CUT_O_R=1;
|
||||||
CUT_BASE=5;
|
CUT_BASE=5;
|
||||||
N_L=2;
|
N_L=2;
|
||||||
W=20;
|
N_A=0;
|
||||||
|
W=16;
|
||||||
|
|
||||||
difference() {
|
difference() {
|
||||||
union() {
|
union() {
|
||||||
translate([0, 0, W]) rotate([180, 0, 0]) {
|
translate([0, 0, W]) rotate([180, 0, 0]) {
|
||||||
rim();
|
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));
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
difference() {
|
||||||
tire();
|
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 :)
|
// to cut and look inside :)
|
||||||
translate([0, 0, -0.5]) cube(size=[R+10, R+10, W+1]);
|
translate([0, 0, -0.5]) cube(size=[R+10, R+10, W+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
module rim() {
|
module rim() {
|
||||||
|
V_SPACING=0.2;
|
||||||
color([0.5, 0.5, 1]) {
|
color([0.5, 0.5, 1]) {
|
||||||
difference() {
|
difference() {
|
||||||
union() {
|
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
|
// outer fixing edges
|
||||||
cylinder(r=R_I+B-SPACING, h=FIX_WIDTH+(B_P-FIX_WIDTH-SPACING));
|
cylinder(r=R_I+B-SPACING, h=FIX_WIDTH+(B_P-FIX_WIDTH-V_SPACING));
|
||||||
translate([0, 0, W-(B_P-FIX_WIDTH-SPACING)-FIX_WIDTH]) cylinder(r=R_I+B-SPACING, h=FIX_WIDTH);
|
translate([0, 0, W-(B_P-FIX_WIDTH-V_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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// make spokes by cutting space between them
|
// make spokes by cutting space between them
|
||||||
for (i = [1 : N_SPOKE])
|
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));
|
translate([0, 0, -1]) cylinder(r=CUT_BASE-2, h=5+(B_P-FIX_WIDTH-SPACING));
|
||||||
// make spokes convex using another toroidal cut
|
// make spokes convex using another toroidal cut
|
||||||
difference() {
|
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, -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-SPACING)])
|
translate([0, 0, (B_P-FIX_WIDTH-V_SPACING)])
|
||||||
scale([1, 1, (B_P-FIX_WIDTH-SPACING)/((R_I-SPACING-RIM_THICKNESS-CUT_BASE+2)/2)])
|
scale([1, 1, (B_P-FIX_WIDTH-V_SPACING)/((R_I-SPACING-RIM_THICKNESS-CUT_BASE+2)/2)])
|
||||||
rotate_extrude(convexity = 10)
|
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);
|
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() {
|
module tire() {
|
||||||
|
b_i = BEVEL;
|
||||||
|
bo_i = max(BEVEL, BEVEL_OUTER-THICKNESS*(2-sqrt(2)));
|
||||||
difference() {
|
difference() {
|
||||||
hull() {
|
hull() {
|
||||||
translate([0, 0, BEVEL]) cylinder(r=R, h=W-BEVEL*2);
|
translate([0, 0, BEVEL_OUTER]) cylinder(r=R, h=W-BEVEL_OUTER*2);
|
||||||
cylinder(r=R-BEVEL, h=W);
|
cylinder(r=R-BEVEL_OUTER, h=W);
|
||||||
}
|
}
|
||||||
// center hole through all piece
|
// center hole through all piece
|
||||||
translate([0, 0, -0.5]) cylinder(r=R_I, h=W+1);
|
translate([0, 0, -0.5]) cylinder(r=R_I, h=W+1);
|
||||||
// top hole
|
// 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() {
|
hull() {
|
||||||
translate([0, 0, W-BEVEL]) cylinder(r=R_I+B, h=BEVEL);
|
translate([0, 0, W-BEVEL]) cylinder(r=R_I+B, h=BEVEL);
|
||||||
translate([0, 0, W]) cylinder(r=R_I+B+BEVEL, h=1);
|
translate([0, 0, W]) cylinder(r=R_I+B+BEVEL, h=1);
|
||||||
}
|
}
|
||||||
// bottom hole
|
// 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() {
|
hull() {
|
||||||
translate([0, 0, 0]) cylinder(r=R_I+B, h=BEVEL);
|
translate([0, 0, 0]) cylinder(r=R_I+B, h=BEVEL);
|
||||||
translate([0, 0, -1]) cylinder(r=R_I+B+BEVEL, h=1);
|
translate([0, 0, -1]) cylinder(r=R_I+B+BEVEL, h=1);
|
||||||
}
|
}
|
||||||
// inside cut
|
// 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() {
|
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);
|
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
|
// lateral protector
|
||||||
if (N_L > 0) for (i = [1 : N_L])
|
if (N_L > 0) for (i = [1 : N_L])
|
||||||
translate([0, 0, -PROT_L_WIDTH/2+i*W/(N_L+1)])
|
translate([0, 0, -PROT_L_WIDTH/2+i*W/(N_L+1)])
|
||||||
difference() {
|
difference() {
|
||||||
cylinder(r=R+1, h=PROT_L_WIDTH);
|
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, -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=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=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);
|
translate([0, 0, -0.1]) cylinder(r=R-PROT_DEPTH, h=PROT_L_WIDTH+0.2);
|
||||||
}
|
}
|
||||||
// angular protector
|
// angular protector
|
||||||
|
@ -185,7 +217,6 @@ module protector_angular() {
|
||||||
|
|
||||||
module axle(height) {
|
module axle(height) {
|
||||||
axle_gap = 1.95;
|
axle_gap = 1.95;
|
||||||
HOLE_RADIUS = 2.55;
|
|
||||||
union() {
|
union() {
|
||||||
translate([-HOLE_RADIUS, -axle_gap/2, 0])
|
translate([-HOLE_RADIUS, -axle_gap/2, 0])
|
||||||
roundedRect(HOLE_RADIUS * 2, axle_gap, .2);
|
roundedRect(HOLE_RADIUS * 2, axle_gap, .2);
|
||||||
|
|
Loading…
Reference in New Issue