diff --git a/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad b/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad index 6e14605..c8ecc65 100644 --- a/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad +++ b/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad @@ -70,21 +70,50 @@ module Cyclone_YsubPart_nutHolder() { } +//use ; +module Cyclone_YsubPart_singleLinearBearingHolder() { + linearBearingModel = "LM8UU"; + linearBearingLength = linearBearing_L(linearBearingModel); + linearBearingDiameter = linearBearing_D(linearBearingModel); + + dimX = linearBearingDiameter+10; + dimY = linearBearingLength; + dimZ = workbed_separation_from_Y_smooth_rod+axes_Ysmooth_rodD/2; + + holderExtension = 10; + + footThickness = 10; + + difference() { + union() { + translate([0,0,dimZ/2]) + bcube([dimX,dimY,dimZ], cr=3, cres=10); + hull() { + translate([0,0,dimZ/2+footThickness/4]) + cylinder(r=dimY/2,h=footThickness,center=true); + translate([dimX/2,0,dimZ/2+footThickness/4]) + cylinder(r=dimY/2,h=footThickness,center=true); + } + translate([0,0,-holderExtension/2]) + bcube([dimX,dimY,holderExtension], cr=3, cres=10); + } + + translate([0,linearBearingLength/2,0]) + rotate([90,0,0]) linearBearingHole(model=linearBearingModel, renderPart=true); + } + translate([0,linearBearingLength/2,0]) + rotate([90,0,0]) linearBearing_single(model=linearBearingModel, echoPart=true); +} module Cyclone_YsubPart_linearBearingHolders() { - baseHeight = workbed_separation_from_Y_smooth_rod-1; - color("lightgreen") { - translate([0,0,axes_Y_smoothThreaded_verticalSeparation+baseHeight/2]) { - translate([axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2]) - cube([10,10,10+baseHeight], center=true); - translate([-axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2]) - cube([10,10,10+baseHeight], center=true); - translate([-axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2]) - cube([10,10,10+baseHeight], center=true); - translate([axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2]) - cube([10,10,10+baseHeight], center=true); - } - } + translate([axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2]) + Cyclone_YsubPart_singleLinearBearingHolder(); + translate([axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2]) + Cyclone_YsubPart_singleLinearBearingHolder(); + scale([-1,1,1]) translate([axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2]) + Cyclone_YsubPart_singleLinearBearingHolder(); + scale([-1,1,1]) translate([axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2]) + Cyclone_YsubPart_singleLinearBearingHolder(); } module Cyclone_Y_carriage() { @@ -92,13 +121,16 @@ module Cyclone_Y_carriage() { projection(cut = true) translate([0,0,-workbed_separation_from_Y_threaded_rod]) { Cyclone_YsubPart_nutHolder(); - Cyclone_YsubPart_linearBearingHolders(); + translate([0,0,axes_Y_smoothThreaded_verticalSeparation]) + Cyclone_YsubPart_linearBearingHolders(); color([0.9,0.8,0.8,0.5]) translate([0,0,workbed_separation_from_Y_threaded_rod+workbed_thickness]) beveledBase(size=[workbed_size_X,workbed_size_Y,workbed_thickness], radius=3, res=15, echoPart=true, renderPart=render_bases_outline); } } else { + if(draw_references) color("red") %frame(20); Cyclone_YsubPart_nutHolder(); - Cyclone_YsubPart_linearBearingHolders(); + translate([0,0,axes_Y_smoothThreaded_verticalSeparation]) + Cyclone_YsubPart_linearBearingHolders(); color([0.9,0.8,0.8,0.5]) translate([0,0,workbed_separation_from_Y_threaded_rod+workbed_thickness]) beveledBase(size=[workbed_size_X,workbed_size_Y,workbed_thickness], radius=3, res=15, echoPart=true); } diff --git a/Hardware/CYCLONE_2/libs/linear_bearing.scad b/Hardware/CYCLONE_2/libs/linear_bearing.scad new file mode 100644 index 0000000..8f98bf8 --- /dev/null +++ b/Hardware/CYCLONE_2/libs/linear_bearing.scad @@ -0,0 +1,98 @@ +//By Glen Chung, 2013. +//Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later + +include +include + +LINEAR_BEARING_dr = 0; //Inscribed circle +LINEAR_BEARING_D = 1; //Outer diameter +LINEAR_BEARING_L = 2; //Length +LINEAR_BEARING_B = 3; //Outer locking groove B +LINEAR_BEARING_D1 = 4; //Outer locking groove D1 +LINEAR_BEARING_W = 5; //W + + +// Common bearing names +LinearBearing = "LM8UU"; + +// Linear Bearing dimensions +// model == "XXXXX" ? [ dr, D, L, B, D1, W]: +function linearBearingDimensions(model) = + model == "LM3UU" ? [ 3*mm, 7*mm, 10*mm, 0.0*mm, 0.0*mm, 0.00*mm]: + model == "LM4UU" ? [ 4*mm, 8*mm, 12*mm, 0.0*mm, 0.0*mm, 0.00*mm]: + model == "LM5UU" ? [ 5*mm, 10*mm, 15*mm, 10.2*mm, 9.6*mm, 1.10*mm]: + model == "LM6UU" ? [ 6*mm, 12*mm, 19*mm, 13.5*mm, 11.5*mm, 1.10*mm]: + model == "LM8SUU" ? [ 8*mm, 15*mm, 17*mm, 11.5*mm, 14.3*mm, 1.10*mm]: + model == "LM10UU" ? [ 10*mm, 19*mm, 29*mm, 22.0*mm, 18.0*mm, 1.30*mm]: + model == "LM12UU" ? [ 12*mm, 21*mm, 30*mm, 23.0*mm, 20.0*mm, 1.30*mm]: + model == "LM13UU" ? [ 13*mm, 23*mm, 32*mm, 23.0*mm, 22.0*mm, 1.30*mm]: + model == "LM16UU" ? [ 16*mm, 28*mm, 37*mm, 26.5*mm, 27.0*mm, 1.60*mm]: + model == "LM20UU" ? [ 20*mm, 32*mm, 42*mm, 30.5*mm, 30.5*mm, 1.60*mm]: + model == "LM25UU" ? [ 25*mm, 40*mm, 59*mm, 41.0*mm, 38.0*mm, 1.85*mm]: + model == "LM30UU" ? [ 30*mm, 45*mm, 64*mm, 44.5*mm, 43.0*mm, 1.85*mm]: + model == "LM35UU" ? [ 35*mm, 52*mm, 70*mm, 49.5*mm, 49.0*mm, 2.10*mm]: + model == "LM40UU" ? [ 40*mm, 60*mm, 80*mm, 60.5*mm, 57.0*mm, 2.10*mm]: + model == "LM50UU" ? [ 50*mm, 80*mm, 100*mm, 74.0*mm, 76.5*mm, 2.60*mm]: + model == "LM60UU" ? [ 60*mm, 90*mm, 110*mm, 85.0*mm, 86.5*mm, 3.15*mm]: + model == "LM80UU" ? [ 80*mm, 120*mm, 140*mm, 105.5*mm, 116.0*mm, 4.15*mm]: + model == "LM100UU" ? [100*mm, 150*mm, 150*mm, 125.5*mm, 145.0*mm, 4.15*mm]: + /*model == "LM8UU" ?*/ [ 8*mm, 15*mm, 24*mm, 17.5*mm, 14.3*mm, 1.10*mm]; + + +function linearBearing_dr(model) = linearBearingDimensions(model)[LINEAR_BEARING_dr]; +function linearBearing_D(model) = linearBearingDimensions(model)[LINEAR_BEARING_D]; +function linearBearing_L(model) = linearBearingDimensions(model)[LINEAR_BEARING_L]; +function linearBearing_B(model) = linearBearingDimensions(model)[LINEAR_BEARING_B]; +function linearBearing_D1(model) = linearBearingDimensions(model)[LINEAR_BEARING_D1]; +function linearBearing_W(model) = linearBearingDimensions(model)[LINEAR_BEARING_W]; + +module linearBearing(pos=[0,0,0], angle=[0,0,0], model=LinearBearing, + material=Steel, sideMaterial=BlackPaint) { + dr = linearBearing_dr(model); + D = linearBearing_D(model); + L = linearBearing_L(model); + B = linearBearing_B(model); + D1 = linearBearing_D1(model); + W = linearBearing_W(model); + + innerRim = dr + (D - dr) * 0.2; + outerRim = D - (D - dr) * 0.2; + midSink = W/4; + + translate(pos) rotate(angle) union() { + color(material) + difference() { + // Basic ring + Ring([0,0,0], D, dr, L, material, material); + + if(W) { + // Side shields + Ring([0,0,-epsilon], outerRim, innerRim, L*epsilon+midSink, sideMaterial, material); + Ring([0,0,L-midSink-epsilon], outerRim, innerRim, L*epsilon+midSink, sideMaterial, material); + //Outer locking groove + Ring([0,0,(L-B)/2], D+epsilon, outerRim+W/2, W, material, material); + Ring([0,0,L-(L-B)/2], D+epsilon, outerRim+W/2, W, material, material); + } + } + if(W) + Ring([0,0,midSink], D-L*epsilon, dr+L*epsilon, L-midSink*2, sideMaterial, sideMaterial); + } + + module Ring(pos, od, id, h, material, holeMaterial) { + color(material) { + translate(pos) + difference() { + cylinder(r=od/2, h=h, $fn = 100); + color(holeMaterial) + translate([0,0,-10*epsilon]) + cylinder(r=id/2, h=h+20*epsilon, $fn = 100); + } + } + } + +} + + +//examples +//linearBearing(model="LM8UU"); +//linearBearing(model="LM10UU"); diff --git a/Hardware/CYCLONE_2/libs/standard_parts.scad b/Hardware/CYCLONE_2/libs/standard_parts.scad index 1eb4a0c..548ddf1 100644 --- a/Hardware/CYCLONE_2/libs/standard_parts.scad +++ b/Hardware/CYCLONE_2/libs/standard_parts.scad @@ -105,7 +105,7 @@ module screw_and_nut(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tole module nut(size=8, chamfer=false, renderPart=false, echoPart=false) { renderStandardPart(renderPart) - color(steel) + color(Steel) flat_nut(size, apply_chamfer=chamfer); if(echoPart) { if(chamfer) @@ -119,14 +119,13 @@ module nut(size=8, chamfer=false, renderPart=false, echoPart=false) { module hole_for_nut(size=3,nutAddedLen=0,captiveLen=0,tolerance=0.35) { radius = METRIC_NUT_AC_WIDTHS[size]/2+tolerance; height = METRIC_NUT_THICKNESS[size]+tolerance; - translate([0,height+nutAddedLen+nutDepth-0.01,0]) - scale([1,(height+nutAddedLen)/height,1]) - rotate([90,0,0]) - hull() { + scale([1,(height+nutAddedLen)/height,1]) + rotate([90,0,0]) + hull() { + nutHole(size=size, tolerance=tolerance, proj=-1); + translate([0,captiveLen,0]) nutHole(size=size, tolerance=tolerance, proj=-1); - translate([0,captiveLen,0]) - nutHole(size=size, tolerance=tolerance, proj=-1); - } + } } @@ -211,7 +210,7 @@ module radialBearing(model=608, renderPart=false, echoPart=false) { module washer_single(diam=15.8, thickness=1.6, tolerance=0, renderPart=false, echoPart=false) { renderStandardPart(renderPart) - color(steel) + color(Steel) rotate([90,0,0]) translate([0,0,-tolerance]) difference() { cylinder(r=diam/2+tolerance, h=thickness+2*tolerance); @@ -221,3 +220,20 @@ module washer_single(diam=15.8, thickness=1.6, tolerance=0, renderPart=false, ec } + + +include ; + +module linearBearing_single(model="LM8UU", renderPart=false, echoPart=false) { + renderStandardPart(renderPart) + linearBearing(model=model); + if(echoPart) echo(str("BOM: Linear bearing. Model ", model)); +} + +module linearBearingHole(model="LM8UU", tolerance=0.1) { + translate([0,0,-tolerance]) + cylinder(r=linearBearing_D(model)/2+tolerance, h=linearBearing_L(model)+2*tolerance); +} + + +