Added configs/Default_config.h
Added configs/Default_config.h to make it easy to chance parameters like screw size and tolerancespull/26/merge^2
parent
78b2cac39f
commit
a4695d548e
|
@ -7,14 +7,11 @@
|
|||
|
||||
use <libs/linear_bearing.scad>
|
||||
module Cyclone_X_carriage() {
|
||||
linearBearingModel = "LM8UU";
|
||||
linearBearingLength = linearBearing_L(linearBearingModel);
|
||||
linearBearingDiameter = linearBearing_D(linearBearingModel);
|
||||
linearBearingLength = linearBearing_L(X_linearBearingModel);
|
||||
linearBearingDiameter = linearBearing_D(X_linearBearingModel);
|
||||
|
||||
// Correction is needed to account for 3D printer tolerances
|
||||
axes_effective_Xsmooth_separation = axes_Xsmooth_separation-0.5;
|
||||
|
||||
linearBearingSeparation = 0;
|
||||
axes_effective_Xsmooth_separation = axes_Xsmooth_separation-axes_Xsmooth_separation_tolerance;
|
||||
|
||||
sideExtensions = linearBearingDiameter/3+2;
|
||||
|
||||
|
@ -26,14 +23,14 @@ module Cyclone_X_carriage() {
|
|||
|
||||
screwExtension = screwSize*1.2;
|
||||
|
||||
linearBearingLengthExtension = 6+max(axes_Zsmooth_rodD+axes_Zsmooth_separation-2*linearBearingLength-linearBearingSeparation, linearBearingSeparation);
|
||||
linearBearingLengthExtension = 6+max(axes_Zsmooth_rodD+axes_Zsmooth_separation-2*linearBearingLength-X_linearBearingSeparation, X_linearBearingSeparation);
|
||||
|
||||
dimX = 2*linearBearingLength+linearBearingLengthExtension;
|
||||
|
||||
module Cyclone_XsubPart_ZnutHolder(holes=false) {
|
||||
rod_nut_len = 0.8*axes_Zthreaded_rodD;
|
||||
rodTolerance = 0.5;
|
||||
rodSize = 8; // M3, M4, etc (integers only)
|
||||
rodTolerance = X_threaded_rod_Tolerance;
|
||||
rodSize = Z_threaded_rodNutSize; // M3, M4, etc (integers only)
|
||||
dimZ = rod_nut_len+3; // Nut holder thickness
|
||||
|
||||
if(!holes) {
|
||||
|
@ -55,21 +52,18 @@ module Cyclone_X_carriage() {
|
|||
|
||||
module Cyclone_XsubPart_XnutHolder(holes=false) {
|
||||
rod_nut_len = 0.8*axes_Xthreaded_rodD;
|
||||
rodTolerance = 0.5;
|
||||
rodSize = 8; // M3, M4, etc (integers only)
|
||||
washer_D = 15.8-0.5;
|
||||
washer_thickness = 1.6-0.9;
|
||||
rodSize = X_threaded_rodNutSize; // M3, M4, etc (integers only)
|
||||
washer_D = X_backlash_washer_D;
|
||||
washer_thickness = X_backlash_washer_thickness;
|
||||
|
||||
holderExtension = 10;
|
||||
|
||||
armWidth = axes_Xthreaded_rodD*2+6;
|
||||
|
||||
armThickness = 30;
|
||||
|
||||
if(!holes) {
|
||||
// Main shape
|
||||
translate([armThickness/2,0,-axes_effective_Xsmooth_separation/2+holderExtension])
|
||||
rotate([0,90,0]) bcube([axes_effective_Xsmooth_separation,armWidth,armThickness], cr=3,cres=10);
|
||||
translate([X_backlash_armThickness/2,0,-axes_effective_Xsmooth_separation/2+holderExtension])
|
||||
rotate([0,90,0]) bcube([axes_effective_Xsmooth_separation,armWidth,X_backlash_armThickness], cr=3,cres=10);
|
||||
*translate([32/2,0,0])
|
||||
rotate([180,0,0]) rotate([0,0,90]) Cyclone_YsubPart_nutHolder();
|
||||
} else {
|
||||
|
@ -89,12 +83,12 @@ module Cyclone_X_carriage() {
|
|||
}
|
||||
// Hole for the sliding nut
|
||||
translate([0,-rod_nut_len-3-washer_thickness/2,0]) hull() {
|
||||
rotate([0,180,0]) hole_for_nut(size=rodSize,nutAddedLen=armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.3);
|
||||
rotate([0,180,0]) hole_for_nut(size=rodSize,nutAddedLen=X_backlash_armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.3);
|
||||
translate([0,-2.25,0])
|
||||
rotate([0,180,0]) hole_for_nut(size=rodSize,nutAddedLen=armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.3);
|
||||
rotate([0,180,0]) hole_for_nut(size=rodSize,nutAddedLen=X_backlash_armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.3);
|
||||
}
|
||||
// Hole for the rod
|
||||
rotate([0,180,0])hole_for_nut(size=rodSize-2,nutAddedLen=armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
rotate([0,180,0])hole_for_nut(size=rodSize-2,nutAddedLen=X_backlash_armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
}
|
||||
// Hole for the washer
|
||||
translate([rod_nut_len/2+3+1,0,0]) rotate([0,0,-90]) rotate([180,0,0])
|
||||
|
@ -116,25 +110,23 @@ module Cyclone_X_carriage() {
|
|||
translate([2,0,0])
|
||||
rotate([0,0,-90]) hole_for_nut(size=rodSize-2,nutAddedLen=0,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
}
|
||||
*translate([armThickness+0.01,0,0])
|
||||
rotate([0,0,-90]) hole_for_nut(size=rodSize-2,nutAddedLen=armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
*translate([X_backlash_armThickness+0.01,0,0])
|
||||
rotate([0,0,-90]) hole_for_nut(size=rodSize-2,nutAddedLen=X_backlash_armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
}
|
||||
}
|
||||
|
||||
module Cyclone_XsubPart_XnutHolder_SINGLE_NUT(holes=false) {
|
||||
rod_nut_len = 0.8*axes_Xthreaded_rodD;
|
||||
rodTolerance = 0.5;
|
||||
rodSize = 8; // M3, M4, etc (integers only)
|
||||
washer_D = 15.8;
|
||||
washer_thickness = 1.6;
|
||||
rodSize = X_threaded_rodNutSize; // M3, M4, etc (integers only)
|
||||
washer_D = X_backlash_washer_D;
|
||||
|
||||
armWidth = axes_Xthreaded_rodD*2+5;
|
||||
|
||||
armThickness = rod_nut_len*2;
|
||||
X_backlash_armThickness = rod_nut_len*2;
|
||||
|
||||
if(!holes) {
|
||||
translate([armThickness/2,0,-axes_effective_Xsmooth_separation/2+washer_D/2])
|
||||
rotate([0,90,0]) bcube([axes_effective_Xsmooth_separation,armWidth,armThickness], cr=3,cres=10);
|
||||
translate([X_backlash_armThickness/2,0,-axes_effective_Xsmooth_separation/2+washer_D/2])
|
||||
rotate([0,90,0]) bcube([axes_effective_Xsmooth_separation,armWidth,X_backlash_armThickness], cr=3,cres=10);
|
||||
} else {
|
||||
if(draw_references) %frame();
|
||||
translate([-0.01+rod_nut_len/2+6,0,0])
|
||||
|
@ -143,8 +135,8 @@ module Cyclone_X_carriage() {
|
|||
translate([2,0,0])
|
||||
rotate([0,0,-90]) hole_for_nut(size=6,nutAddedLen=0,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
}
|
||||
translate([armThickness+0.01,0,0])
|
||||
rotate([0,0,-90]) hole_for_nut(size=6,nutAddedLen=armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
translate([X_backlash_armThickness+0.01,0,0])
|
||||
rotate([0,0,-90]) hole_for_nut(size=6,nutAddedLen=X_backlash_armThickness,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,10 +170,10 @@ module Cyclone_X_carriage() {
|
|||
rotate([0,90,0])
|
||||
bcube([linearBearingDiameter+sideExtensions,linearBearingDiameter+screwExtension, dimX], cr=3, cres=5);
|
||||
// Bottom right screw
|
||||
translate([-linearBearingLength/2-linearBearingSeparation/2,0,-linearBearingDiameter/2-screwExtension/2])
|
||||
translate([-linearBearingLength/2-X_linearBearingSeparation/2,0,-linearBearingDiameter/2-screwExtension/2])
|
||||
rotate([90,0,0]) cylinder(r=screwSize*2,h=screwLength, center=true, $fn=6);
|
||||
// Bottom left screw
|
||||
translate([linearBearingLength/2+linearBearingSeparation/2,0,-linearBearingDiameter/2-screwExtension/2])
|
||||
translate([linearBearingLength/2+X_linearBearingSeparation/2,0,-linearBearingDiameter/2-screwExtension/2])
|
||||
rotate([90,0,0]) cylinder(r=screwSize*2,h=screwLength, center=true, $fn=6);
|
||||
// Top screw
|
||||
translate([0,axes_effective_Xsmooth_separation+screwExtension/2+linearBearingDiameter/2,axes_effective_Xsmooth_separation])
|
||||
|
@ -211,21 +203,21 @@ module Cyclone_X_carriage() {
|
|||
|
||||
// ----- Holes for the linear bearings ------
|
||||
// Bottom right linear bearing
|
||||
translate([-linearBearingLength/2-linearBearingSeparation/2,0,0])
|
||||
rotate([0,0,90]) linearBearingHole(model=linearBearingModel, lateralExtension=sideExtensions*2+screwExtension*2, lengthExtension=linearBearingLengthExtension);
|
||||
translate([-linearBearingLength/2-X_linearBearingSeparation/2,0,0])
|
||||
rotate([0,0,90]) linearBearingHole(model=X_linearBearingModel, lateralExtension=sideExtensions*2+screwExtension*2, lengthExtension=linearBearingLengthExtension);
|
||||
// Bottom left linear bearing
|
||||
translate([linearBearingLength/2+linearBearingSeparation/2,0,0])
|
||||
rotate([0,0,90]) linearBearingHole(model=linearBearingModel, lateralExtension=sideExtensions*2+screwExtension*2, lengthExtension=linearBearingLengthExtension);
|
||||
translate([linearBearingLength/2+X_linearBearingSeparation/2,0,0])
|
||||
rotate([0,0,90]) linearBearingHole(model=X_linearBearingModel, lateralExtension=sideExtensions*2+screwExtension*2, lengthExtension=linearBearingLengthExtension);
|
||||
// Top linear bearing
|
||||
translate([0,axes_effective_Xsmooth_separation,axes_effective_Xsmooth_separation])
|
||||
rotate([90,0,0]) rotate([0,0,90]) linearBearingHole(model=linearBearingModel, lateralExtension=sideExtensions*2+screwExtension*2, lengthExtension=linearBearingLength+linearBearingLengthExtension+linearBearingSeparation);
|
||||
rotate([90,0,0]) rotate([0,0,90]) linearBearingHole(model=X_linearBearingModel, lateralExtension=sideExtensions*2+screwExtension*2, lengthExtension=linearBearingLength+linearBearingLengthExtension+X_linearBearingSeparation);
|
||||
|
||||
// ----- Holes for the screws ------
|
||||
// Bottom right screw
|
||||
translate([-linearBearingLength/2-linearBearingSeparation/2,-screwLength/2-screwAditionalLength/2,-linearBearingDiameter/2-screwExtension/2])
|
||||
translate([-linearBearingLength/2-X_linearBearingSeparation/2,-screwLength/2-screwAditionalLength/2,-linearBearingDiameter/2-screwExtension/2])
|
||||
rotate([0,0,180]) hole_for_screw(size=screwSize,length=screwLength+screwAditionalLength,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
// Bottom left screw
|
||||
translate([linearBearingLength/2+linearBearingSeparation/2,-screwLength/2-screwAditionalLength/2,-linearBearingDiameter/2-screwExtension/2])
|
||||
translate([linearBearingLength/2+X_linearBearingSeparation/2,-screwLength/2-screwAditionalLength/2,-linearBearingDiameter/2-screwExtension/2])
|
||||
rotate([0,0,180]) hole_for_screw(size=screwSize,length=screwLength+screwAditionalLength,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
// Top screw
|
||||
translate([0,axes_effective_Xsmooth_separation+screwExtension/2+linearBearingDiameter/2,axes_effective_Xsmooth_separation+screwLength/2+screwAditionalLength/2])
|
||||
|
@ -250,9 +242,9 @@ module Cyclone_X_carriage() {
|
|||
}
|
||||
}
|
||||
// Draw linear bearings
|
||||
rotate([0,90,0]) linearBearing_single(model=linearBearingModel, echoPart=true);
|
||||
rotate([0,-90,0]) linearBearing_single(model=linearBearingModel, echoPart=true);
|
||||
rotate([0,90,0]) linearBearing_single(model=X_linearBearingModel, echoPart=true);
|
||||
rotate([0,-90,0]) linearBearing_single(model=X_linearBearingModel, echoPart=true);
|
||||
translate([linearBearingLength/2,axes_effective_Xsmooth_separation,axes_effective_Xsmooth_separation])
|
||||
rotate([0,-90,0]) linearBearing_single(model=linearBearingModel, echoPart=true);
|
||||
rotate([0,-90,0]) linearBearing_single(model=X_linearBearingModel, echoPart=true);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,13 +7,8 @@
|
|||
|
||||
Xmotor_sideLen = 42.20;
|
||||
|
||||
axes_XgearSeparation = 37;
|
||||
X_rodGearRatio = 21; // Number of tooth
|
||||
X_motorGearRatio = 21; // Number of tooth
|
||||
axes_XgearRatio = X_motorGearRatio/X_rodGearRatio; // Number of tooth (motor/rod)
|
||||
|
||||
X_frames_additional_thickness = 5;
|
||||
|
||||
module Cyclone_X_leftFrame() {
|
||||
scale([-1,1,1]) Cyclone_X_rightFrame(isLeft=true);
|
||||
}
|
||||
|
@ -36,54 +31,37 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
|
||||
|
||||
footSeparation = footScrewSize*3;
|
||||
footThickness = 10;
|
||||
footWidth = dimX+2*footSeparation;
|
||||
|
||||
rod_nut_len = 0.8*axes_Xthreaded_rodD;
|
||||
gear_thickness = 10;
|
||||
|
||||
|
||||
bearingDepth = 3;
|
||||
|
||||
corner_radius = 10;
|
||||
|
||||
X_motorModel = Nema17;
|
||||
|
||||
module Cyclone_XsubPart_gearCover() {
|
||||
margin = 4;
|
||||
rodGearAddedMargin = 0;
|
||||
effectiveXgearSeparation = axes_XgearSeparation+0.5;
|
||||
wallThickness = 0.4*4;
|
||||
screwHeadSpaceHeight = 4;
|
||||
screwHeadSpaceDiam = 6;
|
||||
coverHeight = 16;
|
||||
coverExtraHeight = 5;
|
||||
coverExtraRadius = -7;
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, Nema17);
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, X_motorModel);
|
||||
|
||||
truncationAngle = 10;
|
||||
|
||||
motorGearRadius = axes_XgearSeparation/(1+axes_XgearRatio)+margin;
|
||||
rodGearRadius = axes_XgearSeparation/(1+1/axes_XgearRatio)+margin+rodGearAddedMargin;
|
||||
motorGearRadius = axes_XgearSeparation/(1+axes_XgearRatio)+gearCover_margin;
|
||||
rodGearRadius = axes_XgearSeparation/(1+1/axes_XgearRatio)+gearCover_margin+rodGearAddedgearCover_margin;
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
// Cover for the rod gear
|
||||
rotate([0,90,0])
|
||||
cylinder(r=rodGearRadius+wallThickness, h=coverHeight);
|
||||
cylinder(r=rodGearRadius+gearCover_wallThickness, h=coverHeight);
|
||||
translate([coverHeight,0,0])
|
||||
rotate([0,90,0])
|
||||
cylinder(r1=rodGearRadius+wallThickness, r2=rodGearRadius+wallThickness+coverExtraRadius, h=coverExtraHeight+wallThickness);
|
||||
cylinder(r1=rodGearRadius+gearCover_wallThickness, r2=rodGearRadius+gearCover_wallThickness+coverExtraRadius, h=coverExtraHeight+gearCover_wallThickness);
|
||||
// Translate to motor position
|
||||
rotate([motorRotatedOffset,0,0]) {
|
||||
translate([0,effectiveXgearSeparation,0])
|
||||
rotate([-motorRotatedOffset,0,0]) {
|
||||
// Cover for the motor gear
|
||||
rotate([0,90,0]) cylinder(r=motorGearRadius+wallThickness, h=coverHeight);
|
||||
rotate([0,90,0]) cylinder(r=motorGearRadius+gearCover_wallThickness, h=coverHeight);
|
||||
translate([coverHeight,0,0])
|
||||
rotate([0,90,0]) cylinder(r1=motorGearRadius+wallThickness, r2=motorGearRadius+wallThickness+coverExtraRadius, h=coverExtraHeight+wallThickness);
|
||||
rotate([0,90,0]) cylinder(r1=motorGearRadius+gearCover_wallThickness, r2=motorGearRadius+gearCover_wallThickness+coverExtraRadius, h=coverExtraHeight+gearCover_wallThickness);
|
||||
// Cylinder for the support screw
|
||||
translate([0,-nema_screw_separation/2,nema_screw_separation/2])
|
||||
rotate([0,90,0]) cylinder(r=screwHeadSpaceDiam/2+wallThickness, h=coverHeight);
|
||||
rotate([0,90,0]) cylinder(r=gearCover_screwHeadSpaceDiam/2+gearCover_wallThickness, h=coverHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -91,7 +69,7 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
union() {
|
||||
// Truncation for avoiding collisions with Y carriage (needed for the Y gear cover)
|
||||
translate([0,-rodGearRadius/2,-rodGearRadius-0.5])
|
||||
rotate([0,90+truncationAngle,0]) cube(rodGearRadius);
|
||||
rotate([0,90+gearCover_truncationAngle,0]) cube(rodGearRadius);
|
||||
// Hole for the rod gear
|
||||
rotate([0,90,0])
|
||||
cylinder(r=rodGearRadius, h=coverHeight);
|
||||
|
@ -99,7 +77,7 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
rotate([0,90,0])
|
||||
cylinder(r1=rodGearRadius, r2=rodGearRadius+coverExtraRadius, h=coverExtraHeight);
|
||||
rotate([0,90,0])
|
||||
cylinder(r=rodGearRadius+coverExtraRadius, h=coverHeight+coverExtraHeight+wallThickness+0.1);
|
||||
cylinder(r=rodGearRadius+coverExtraRadius, h=coverHeight+coverExtraHeight+gearCover_wallThickness+0.1);
|
||||
// Translate to motor position
|
||||
rotate([motorRotatedOffset,0,0]) {
|
||||
translate([0,effectiveXgearSeparation,0])
|
||||
|
@ -110,33 +88,33 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
rotate([0,90,0]) cylinder(r=motorGearRadius, h=coverHeight);
|
||||
translate([coverHeight-0.02,0,0])
|
||||
rotate([0,90,0]) cylinder(r1=motorGearRadius, r2=motorGearRadius+coverExtraRadius, h=coverExtraHeight);
|
||||
rotate([0,90,0]) cylinder(r=motorGearRadius+coverExtraRadius, h=coverHeight+coverExtraHeight+wallThickness+0.1);
|
||||
rotate([0,90,0]) cylinder(r=motorGearRadius+coverExtraRadius, h=coverHeight+coverExtraHeight+gearCover_wallThickness+0.1);
|
||||
// Outer hole for the support screw
|
||||
translate([0,-nema_screw_separation/2,nema_screw_separation/2])
|
||||
rotate([0,90,0]) cylinder(r=screwHeadSpaceDiam/2, h=coverHeight+coverExtraHeight*2);
|
||||
rotate([0,90,0]) cylinder(r=gearCover_screwHeadSpaceDiam/2, h=coverHeight+coverExtraHeight*2);
|
||||
}
|
||||
// Support screw holder
|
||||
translate([0,-nema_screw_separation/2,nema_screw_separation/2])
|
||||
rotate([0,90,0]) cylinder(r=screwHeadSpaceDiam/2+wallThickness, h=wallThickness);
|
||||
rotate([0,90,0]) cylinder(r=gearCover_screwHeadSpaceDiam/2+gearCover_wallThickness, h=gearCover_wallThickness);
|
||||
}
|
||||
// Inner hole for the support screw
|
||||
translate([0,-nema_screw_separation/2,nema_screw_separation/2])
|
||||
rotate([0,90,0]) cylinder(r=(screwHeadSpaceDiam+1)/2, h=coverHeight+0.1);
|
||||
rotate([0,90,0]) cylinder(r=(gearCover_screwHeadSpaceDiam+1)/2, h=coverHeight+0.1);
|
||||
// Holes for the other three screws
|
||||
translate([0,nema_screw_separation/2,nema_screw_separation/2])
|
||||
rotate([0,90,0]) cylinder(r=screwHeadSpaceDiam/2, h=screwHeadSpaceHeight/2);
|
||||
translate([screwHeadSpaceHeight/2,nema_screw_separation/2,nema_screw_separation/2])
|
||||
rotate([0,90,0]) sphere(r=screwHeadSpaceDiam/2);
|
||||
rotate([0,90,0]) cylinder(r=gearCover_screwHeadSpaceDiam/2, h=gearCover_screwHeadSpaceHeight/2);
|
||||
translate([gearCover_screwHeadSpaceHeight/2,nema_screw_separation/2,nema_screw_separation/2])
|
||||
rotate([0,90,0]) sphere(r=gearCover_screwHeadSpaceDiam/2);
|
||||
|
||||
translate([0,nema_screw_separation/2,-nema_screw_separation/2])
|
||||
rotate([0,90,0]) cylinder(r=screwHeadSpaceDiam/2, h=screwHeadSpaceHeight/2);
|
||||
translate([screwHeadSpaceHeight/2,nema_screw_separation/2,-nema_screw_separation/2])
|
||||
rotate([0,90,0]) sphere(r=screwHeadSpaceDiam/2);
|
||||
rotate([0,90,0]) cylinder(r=gearCover_screwHeadSpaceDiam/2, h=gearCover_screwHeadSpaceHeight/2);
|
||||
translate([gearCover_screwHeadSpaceHeight/2,nema_screw_separation/2,-nema_screw_separation/2])
|
||||
rotate([0,90,0]) sphere(r=gearCover_screwHeadSpaceDiam/2);
|
||||
|
||||
translate([0,-nema_screw_separation/2,-nema_screw_separation/2])
|
||||
rotate([0,90,0]) cylinder(r=screwHeadSpaceDiam/2, h=screwHeadSpaceHeight/2);
|
||||
translate([screwHeadSpaceHeight/2,-nema_screw_separation/2,-nema_screw_separation/2])
|
||||
rotate([0,90,0]) sphere(r=screwHeadSpaceDiam/2);
|
||||
rotate([0,90,0]) cylinder(r=gearCover_screwHeadSpaceDiam/2, h=gearCover_screwHeadSpaceHeight/2);
|
||||
translate([gearCover_screwHeadSpaceHeight/2,-nema_screw_separation/2,-nema_screw_separation/2])
|
||||
rotate([0,90,0]) sphere(r=gearCover_screwHeadSpaceDiam/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -157,7 +135,6 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
|
||||
// Crocodile clip holders and wire guide
|
||||
module Cyclone_X_frameHoles() {
|
||||
frameFrontalThickness = 15;
|
||||
holeWidth = dimY/2;
|
||||
holeHeight = dimZ-footThickness-axes_Xsmooth_separation-27;
|
||||
|
||||
|
@ -246,7 +223,7 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
translate([+0.01,axes_Xsmooth_separation,0]) {
|
||||
|
||||
// Rod radial bearing hole
|
||||
rotate([0,-90,0]) bearingHole(depth=bearingDepth, thickness=partThickness);
|
||||
rotate([0,-90,0]) bearingHole(depth=X_threaded_rod_bearingDepth, thickness=partThickness);
|
||||
|
||||
// Translate to motor position
|
||||
if(!isLeft)
|
||||
|
@ -292,10 +269,10 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
// TRANSLATE REFERENCE POSITION to the threaded rod
|
||||
translate([0,axes_Xsmooth_separation,0]) {
|
||||
if(draw_references) color("green") %frame(20);
|
||||
translate([-bearingDepth,0,0]) rotate([0,90,0])
|
||||
translate([-X_threaded_rod_bearingDepth,0,0]) rotate([0,90,0])
|
||||
radialBearing(echoPart=true);
|
||||
if(!isLeft) {
|
||||
translate([gear_thickness*2+axes_Xthreaded_rodD-7,0,0])
|
||||
translate([X_gear_thickness*2+axes_Xthreaded_rodD-7,0,0])
|
||||
rotate([0,-90,0])
|
||||
rotate([0,0,45]) nut(size=axes_Xthreaded_rodD, chamfer=true, echoPart=true);
|
||||
translate([axes_Xthreaded_rodD,0,0]){
|
||||
|
@ -303,7 +280,7 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
nut(size=axes_Xthreaded_rodD, echoPart=true);
|
||||
translate([axes_Xthreaded_rodD-7,0,0])
|
||||
rotate([0,-90,0]) color(color_movingPart)
|
||||
cyclone_rod_gear(Gear_N_Teeth=X_rodGearRatio,gearHeight=gear_thickness,nutSize=8,tolerance=0);
|
||||
cyclone_rod_gear(Gear_N_Teeth=X_rodGearRatio,gearHeight=X_gear_thickness,nutSize=8,tolerance=0);
|
||||
}
|
||||
// Translate to motor position
|
||||
rotate([motorRotatedOffset,0,0]) {
|
||||
|
@ -313,7 +290,7 @@ module Cyclone_X_rightFrame(isLeft=false) {
|
|||
stepperMotor(screwHeight=motorWallSeparation, echoPart=true);
|
||||
translate([axes_Xthreaded_rodD+1.5,0,0])
|
||||
rotate([0,-90,0]) color(color_movingPart)
|
||||
cyclone_motor_gear(Gear_N_Teeth=X_motorGearRatio,gearHeight=gear_thickness,tolerance=0);
|
||||
cyclone_motor_gear(Gear_N_Teeth=X_motorGearRatio,gearHeight=X_gear_thickness,tolerance=0);
|
||||
}
|
||||
}
|
||||
translate([0.1,0,0])
|
||||
|
|
|
@ -9,8 +9,6 @@ include <libs/MCAD/nuts_and_bolts.scad>
|
|||
|
||||
workbed_separation_from_Y_threaded_rod = axes_Y_smoothThreaded_verticalSeparation+workbed_separation_from_Y_smooth_rod+axes_Ysmooth_rodD/2;
|
||||
|
||||
PCBholder_height = 10;
|
||||
|
||||
module Cyclone_YsubPart_nutHolder() {
|
||||
footThickness = 10;
|
||||
screwSeparation = 10;
|
||||
|
@ -19,10 +17,9 @@ module Cyclone_YsubPart_nutHolder() {
|
|||
dimY = screwSeparation+22;
|
||||
dimZ = workbed_separation_from_Y_threaded_rod;
|
||||
holderExtension = 10;
|
||||
rodTolerance = 0.5;
|
||||
rodSize = 8; // M3, M4, etc (integers only)
|
||||
washer_D = 15.8;
|
||||
washer_thickness = 1.6;
|
||||
rodNutSize = Y_threaded_rodNutSize;
|
||||
washer_D = Y_backlash_washer_D;
|
||||
washer_thickness = Y_backlash_washer_thickness;
|
||||
screwSize = Y_nutHolder_screwSize;
|
||||
|
||||
difference() {
|
||||
|
@ -31,23 +28,23 @@ module Cyclone_YsubPart_nutHolder() {
|
|||
color(color_movingPart) bcube([dimX,dimY,dimZ+holderExtension],cr=2,cres=10);
|
||||
// Hole for the rod
|
||||
hull() {
|
||||
standard_rod(diam=axes_Ythreaded_rodD+rodTolerance, length=dimY*4, threaded=true, renderPart=true, center=true);
|
||||
standard_rod(diam=axes_Ythreaded_rodD+Y_threaded_rod_Tolerance, length=dimY*4, threaded=true, renderPart=true, center=true);
|
||||
translate([0,0,-holderExtension*2])
|
||||
standard_rod(diam=axes_Ythreaded_rodD+rodTolerance, length=dimY*4, threaded=true, renderPart=true, center=true);
|
||||
standard_rod(diam=axes_Ythreaded_rodD+Y_threaded_rod_Tolerance, length=dimY*4, threaded=true, renderPart=true, center=true);
|
||||
}
|
||||
// Hole for the main nut
|
||||
translate([0,dimY/2+0.01+rod_nut_len/2,0])
|
||||
hull() {
|
||||
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=0,captiveLen=0,tolerance=0.1);
|
||||
rotate([0,90,0]) hole_for_nut(size=rodNutSize,nutAddedLen=0,captiveLen=0,tolerance=0.1);
|
||||
translate([0,0,-holderExtension*2])
|
||||
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=0,captiveLen=0,tolerance=0.1);
|
||||
rotate([0,90,0]) hole_for_nut(size=rodNutSize,nutAddedLen=0,captiveLen=0,tolerance=0.1);
|
||||
}
|
||||
translate([0,dimY/2+0.01-rod_nut_len/2-3,0]) {
|
||||
// Hole for the sliding nut
|
||||
hull() {
|
||||
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=dimY,captiveLen=0,tolerance=0.3);
|
||||
rotate([0,90,0]) hole_for_nut(size=rodNutSize,nutAddedLen=dimY,captiveLen=0,tolerance=0.3);
|
||||
translate([0,0,-holderExtension*2])
|
||||
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=dimY,captiveLen=0,tolerance=0.3);
|
||||
rotate([0,90,0]) hole_for_nut(size=rodNutSize,nutAddedLen=dimY,captiveLen=0,tolerance=0.3);
|
||||
}
|
||||
// Hole for the washer
|
||||
hull() {
|
||||
|
@ -75,9 +72,8 @@ module Cyclone_YsubPart_nutHolder() {
|
|||
|
||||
use <libs/linear_bearing.scad>
|
||||
module Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=false) {
|
||||
linearBearingModel = "LM8UU";
|
||||
linearBearingLength = linearBearing_L(linearBearingModel);
|
||||
linearBearingDiameter = linearBearing_D(linearBearingModel);
|
||||
linearBearingLength = linearBearing_L(Y_linearBearingModel);
|
||||
linearBearingDiameter = linearBearing_D(Y_linearBearingModel);
|
||||
|
||||
plasticHolderLength = 3;
|
||||
|
||||
|
@ -94,7 +90,7 @@ module Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=false) {
|
|||
|
||||
workbed_screws_aditional_length = PCBholder_height;
|
||||
|
||||
linearBearing_pressureFitTolerance = 0.5;
|
||||
//Y_linearBearing_pressureFitTolerance = 0.5;
|
||||
|
||||
if(onlyScrews) {
|
||||
// Hole for the screw and nut
|
||||
|
@ -117,15 +113,15 @@ module Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=false) {
|
|||
bcube([dimX,dimY,holderExtension], cr=3, cres=0);
|
||||
}
|
||||
// Hole for linear bearing
|
||||
linearBearingHole(model=linearBearingModel, lateralExtension=holderExtension, lengthExtension=2*plasticHolderLength, holderLength=plasticHolderLength/2);
|
||||
//linearBearingHole(model=linearBearingModel);
|
||||
linearBearingHole(model=Y_linearBearingModel, lateralExtension=holderExtension, lengthExtension=2*plasticHolderLength, holderLength=plasticHolderLength/2);
|
||||
//linearBearingHole(model=Y_linearBearingModel);
|
||||
// Hole for the screw and nut
|
||||
translate([dimX/2+footSeparation,0,dimZ+workbed_thickness+workbed_screws_aditional_length])
|
||||
rotate([90,0,0]) hole_for_screw(size=screwSize,length=workbed_screws_aditional_length+footThickness+workbed_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
}
|
||||
|
||||
translate([0,linearBearingLength/2,0])
|
||||
rotate([90,0,0]) linearBearing_single(model=linearBearingModel, echoPart=true);
|
||||
rotate([90,0,0]) linearBearing_single(model=Y_linearBearingModel, echoPart=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -144,13 +140,6 @@ module Cyclone_YsubPart_linearBearingHolders(onlyScrews=false) {
|
|||
|
||||
|
||||
module Cyclone_YsubPart_PCBholder() {
|
||||
PCB_dimX = 160;
|
||||
PCB_dimY = 100;
|
||||
PCB_dimZ = 1.6;
|
||||
|
||||
PCB_holder_edge_length = 3;
|
||||
PCB_holder_tolerance = 1;
|
||||
|
||||
holderArmLength = 30;
|
||||
|
||||
holderL_thickness = 2;
|
||||
|
|
|
@ -14,12 +14,8 @@ module mirrorOrNot(mirrorPart=false, axes=[-1,1,1]) {
|
|||
use <libs/MCAD/bearing.scad>
|
||||
|
||||
|
||||
|
||||
Ymotor_sideLen = 42.20;
|
||||
|
||||
axes_YgearSeparation = 37;
|
||||
Y_rodGearRatio = 21; // Number of tooth
|
||||
Y_motorGearRatio = 21; // Number of tooth
|
||||
Y_motorModel = Nema17;
|
||||
Ymotor_sideLen = lookup(NemaSideSize, Y_motorModel); //42.20;
|
||||
axes_YgearRatio = Y_motorGearRatio/Y_rodGearRatio; // Number of tooth (motor/rod)
|
||||
|
||||
|
||||
|
@ -33,9 +29,9 @@ module Cyclone_Y_frontFrame() {
|
|||
motor_YgearSeparation_projected = axes_YgearSeparation*cos(-motorRotatedOffset);
|
||||
|
||||
rod_nut_len = 0.8*axes_Ythreaded_rodD;
|
||||
gear_thickness = 5;
|
||||
bearing_width = bearingWidth(608);
|
||||
bearing_diam = bearingOuterDiameter(608);
|
||||
gear_thickness = Y_gear_thickness;
|
||||
bearing_width = bearingWidth(Y_threaded_rodBearingModel);
|
||||
bearing_diam = bearingOuterDiameter(Y_threaded_rodBearingModel);
|
||||
bearingDepth = 3;
|
||||
partThickness = 5+screwSize*2;
|
||||
|
||||
|
@ -58,7 +54,7 @@ module Cyclone_Y_frontFrame() {
|
|||
coverHeight = 16;
|
||||
coverExtraHeight = 5;
|
||||
coverExtraRadius = -7;
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, Nema17);
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, Y_motorModel);
|
||||
|
||||
truncationAngle = 10;
|
||||
|
||||
|
@ -267,8 +263,8 @@ module Cyclone_Y_backFrame() {
|
|||
screwSize = Y_backFrame_footScrewSize;
|
||||
|
||||
rod_nut_len = 0.8*axes_Ythreaded_rodD;
|
||||
bearing_width = bearingWidth(608);
|
||||
bearing_diam = bearingOuterDiameter(608);
|
||||
bearing_width = bearingWidth(Y_threaded_rodBearingModel);
|
||||
bearing_diam = bearingOuterDiameter(Y_threaded_rodBearingModel);
|
||||
bearingDepth = 3;
|
||||
partThickness = 5+screwSize*2;
|
||||
|
||||
|
|
|
@ -19,33 +19,12 @@ use <libs/obiscad/obiscad/bcube.scad>
|
|||
use <libs/standard_parts.scad>
|
||||
use <libs/MCAD/materials.scad>
|
||||
|
||||
Z_linearBearingModel = "LM8UU";
|
||||
|
||||
spindle_motor_diam_top = 51.3;
|
||||
spindle_motor_diam_top_smaller = 47.5;
|
||||
spindle_motor_diam = 47.5;
|
||||
spindle_motor_sidelen = 32;
|
||||
spindle_holder_thickness = 8;
|
||||
spindle_motor_length = 90;
|
||||
spindle_holder_screwSize = 3; //Screw size - M3, M4, etc (integers only)
|
||||
|
||||
bottom_thickness = 4;
|
||||
base_width = 20;
|
||||
base_length = 25;
|
||||
base_screw_diameter = 5;
|
||||
|
||||
motor_width = 43;
|
||||
motor_length = 49; // not used
|
||||
motor_screw_distance = 31.3;
|
||||
motor_center_diameter = 23;
|
||||
|
||||
motor_adjust_margin = 5;
|
||||
Z_motorModel = Nema17;
|
||||
motor_width = lookup(NemaSideSize, Z_motorModel); //43;
|
||||
|
||||
motor_screw_head_diameter = 8;
|
||||
|
||||
Z_bearing_width = bearingWidth(608);
|
||||
|
||||
M8_rod_diameter = 8.2;
|
||||
Z_bearing_width = bearingWidth(Z_threaded_rodBearingModel);
|
||||
|
||||
axis_distance = 21;
|
||||
|
||||
|
@ -53,21 +32,16 @@ wall_thickness = 9;
|
|||
wall_height = motor_width;
|
||||
wall_width = 54;
|
||||
|
||||
Z_rodGearRatio = 15; // Number of tooth
|
||||
Z_motorGearRatio = 8; // Number of tooth
|
||||
axes_ZgearRatio = Z_motorGearRatio/Z_rodGearRatio; // Number of tooth (motor/rod)
|
||||
|
||||
Z_smooth_rods_sep = 40;
|
||||
|
||||
textHscale = 0.8;
|
||||
textThickness = 1.5;
|
||||
Z_smooth_rods_sep = axes_Xsmooth_separation;
|
||||
|
||||
module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, exploded=false) {
|
||||
// Settings
|
||||
linearBearingDiameter = linearBearing_D(Z_linearBearingModel);
|
||||
linearBearingLength = linearBearing_L(Z_linearBearingModel);
|
||||
spindle_holder_distance = linearBearingLength*2+3;
|
||||
gear_thickness = 10;
|
||||
gear_thickness = Z_gear_thickness;
|
||||
|
||||
ZthreadedOffset = -3.5;
|
||||
axes_Xsmooth_separation = 16+ZthreadedOffset;
|
||||
|
@ -86,9 +60,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
}
|
||||
|
||||
// Derived from Spindle mount for ShapeOko by Misan (http://www.thingiverse.com/thing:26740)
|
||||
module spindle_holder_holes(length,spindiam, basediam,top_part) {
|
||||
translate([20,8,-0.05]) cylinder(r=basediam/2,h=length+2);
|
||||
translate([-20,8,-0.05]) cylinder(r=basediam/2,h=length+2);
|
||||
module spindle_holder_holes(length,spindiam,top_part) {
|
||||
translate([0,spindle_front_offset,0])
|
||||
if (top_part){
|
||||
translate([0,38,0]) rotate([0,0,0]) {
|
||||
|
@ -118,7 +90,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
}
|
||||
|
||||
module motorHolesZ() {
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, Nema17);
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, Z_motorModel);
|
||||
|
||||
// Screws for holding the motor
|
||||
translate([0,0,-wall_thickness/1.9])
|
||||
|
@ -132,9 +104,9 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
for(i=[-1,1]) for(j=[-1,1])
|
||||
translate([i*nema_screw_separation/2,j*nema_screw_separation/2,2.5-wall_thickness/2+3]) {
|
||||
hull() {
|
||||
translate([0,motor_adjust_margin/2,0])
|
||||
translate([0,Z_motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false);
|
||||
translate([0,-motor_adjust_margin/2,0])
|
||||
translate([0,-Z_motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false);
|
||||
}
|
||||
}
|
||||
|
@ -142,6 +114,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
|
||||
|
||||
module motor_stand_holes_Z() {
|
||||
partThickness = wall_thickness;
|
||||
// Position relative to motor shaft
|
||||
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
|
||||
motorHolesZ();
|
||||
|
@ -151,9 +124,9 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
bearingHole(depth=Z_bearing_width, thickness=partThickness);
|
||||
|
||||
hull() {
|
||||
cylinder(r=(M8_rod_diameter*2)/2,h=10*wall_thickness,center=true);
|
||||
cylinder(r=(axes_Zsmooth_rodD*2)/2,h=10*wall_thickness,center=true);
|
||||
translate([0,-axis_distance,0])
|
||||
cylinder(r=(M8_rod_diameter*2)/2,h=10*wall_thickness,center=true);
|
||||
cylinder(r=(axes_Zsmooth_rodD*2)/2,h=10*wall_thickness,center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -162,7 +135,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
|
||||
module linearBearingHolderZ(h=10) {
|
||||
linearBearingDiameter = linearBearing_D(Z_linearBearingModel);
|
||||
translate([0,0,1.5]) cylinder(r=linearBearingDiameter/2,h=h);
|
||||
translate([0,0,1.5]) cylinder(r=linearBearingDiameter/2+Z_linearBearingHole_tolerance,h=h);
|
||||
cylinder(r=linearBearingDiameter/2.5,h=10*h,center=true);
|
||||
}
|
||||
|
||||
|
@ -206,7 +179,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
// Write text in the front
|
||||
color([0.5,0.5,0.5])
|
||||
rotate([0,0,180]) scale([-1,1,-textHscale])
|
||||
writecylinder("CYCLONE",[0,0,-wall_thickness/(2*textHscale)],spindle_motor_diam_top/2+spindle_holder_thickness,0,font="orbitron.dxf",space=1.1,h=wall_thickness,t=textThickness,center=true,ccw=true);
|
||||
writecylinder(topText,[0,0,-wall_thickness/(2*textHscale)],spindle_motor_diam_top/2+spindle_holder_thickness,0,font="orbitron.dxf",space=1.1,h=wall_thickness,t=textThickness,center=true,ccw=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -218,7 +191,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
translate([spindle_motor_diam/2,-7-0.5,0]) cube([22,20,wall_thickness]);
|
||||
color([0.2,0.2,0.5])
|
||||
scale([1,1,textHscale])
|
||||
writecylinder("PCB Factory",[0,0,wall_thickness/(2*textHscale)+1],spindle_motor_diam/2+spindle_holder_thickness,0,font="orbitron.dxf",space=1.1,h=wall_thickness-2,t=textThickness,center=true,ccw=true);
|
||||
writecylinder(bottomText,[0,0,wall_thickness/(2*textHscale)+1],spindle_motor_diam/2+spindle_holder_thickness,0,font="orbitron.dxf",space=1.1,h=wall_thickness-2,t=textThickness,center=true,ccw=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -232,7 +205,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
Z_solid_body(top_part);
|
||||
if(top_part) motor_stand_holes_Z();
|
||||
translate([wall_height/2,wall_width-4,0])
|
||||
spindle_holder_holes(wall_thickness,spindle_motor_diam,base_screw_diameter,top_part);
|
||||
spindle_holder_holes(wall_thickness,spindle_motor_diam,top_part);
|
||||
translate([wall_height/2-Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
||||
linearBearingHolderZ(wall_thickness);
|
||||
translate([wall_height/2+Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
||||
|
@ -243,7 +216,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
// Hole for the threaded rod
|
||||
if(!top_part) {
|
||||
translate([-axes_Xsmooth_separation,0,0])
|
||||
cylinder(r=6+M8_rod_diameter,h=wall_thickness*10,center=true);
|
||||
cylinder(r=6+axes_Zsmooth_rodD,h=wall_thickness*10,center=true);
|
||||
}
|
||||
|
||||
// Truncation in the base for avoiding collision with the X axis
|
||||
|
@ -301,7 +274,7 @@ module Cyclone_Z_carriage(z_thread_rod_length=120, with_extra_parts=false, explo
|
|||
color([0.9,0.9,0.9]) %cylinder(r1=0.5/2, r2=3/2, h=20);
|
||||
}
|
||||
|
||||
if(z_thread_rod_length)
|
||||
translate([-axes_Xsmooth_separation,0,-z_thread_rod_length/2+spindle_holder_distance]) rotate([90,0,0])
|
||||
%rod(len=z_thread_rod_length, threaded=true);
|
||||
//if(z_thread_rod_length)
|
||||
// translate([-axes_Xsmooth_separation,0,-z_thread_rod_length/2+spindle_holder_distance]) rotate([90,0,0])
|
||||
// %rod(len=z_thread_rod_length, threaded=true);
|
||||
}
|
||||
|
|
|
@ -49,76 +49,8 @@ animated_timePerPart = 1/animated_parts_number;
|
|||
function animationBump(tbegin,tend,t=$t%1) = ((t >= tbegin) && (t <= tend)) ? (1+sin((t-tbegin)*360/(tend-tbegin)-90)) : 0;
|
||||
function animatePart(n,dist=30,overlap=animated_timePerPart*0.25) = dist*animationBump((n-1)*animated_timePerPart-overlap,n*animated_timePerPart+overlap);
|
||||
|
||||
|
||||
// Parameters for the bottom base
|
||||
base_size_X = 304.8 + animatePart(1,overlap=0);
|
||||
base_size_Y = 261.62 + animatePart(2);
|
||||
base_thickness = 8;
|
||||
base_corner_radius = 20;
|
||||
base_corner_res = 0;
|
||||
foot_offset = 25;
|
||||
|
||||
|
||||
// Parameters for the axes sizes
|
||||
axes_Xsmooth_rodLen = 250 + animatePart(1,overlap=0);
|
||||
axes_Ysmooth_rodLen = 210 + animatePart(2);
|
||||
axes_Zsmooth_rodLen = 110 + animatePart(3);
|
||||
|
||||
axes_Xthreaded_rodLen = axes_Xsmooth_rodLen+50;
|
||||
axes_Ythreaded_rodLen = axes_Ysmooth_rodLen-10;
|
||||
axes_Zthreaded_rodLen = 90;
|
||||
|
||||
axes_Xsmooth_rodD = 8.5 + animatePart(4,dist=5);
|
||||
axes_Ysmooth_rodD = 8.5 + animatePart(4,dist=5);
|
||||
axes_Zsmooth_rodD = 8.2 + animatePart(4,dist=5);
|
||||
|
||||
axes_Xthreaded_rodD = 8.5 + animatePart(4,dist=5);
|
||||
axes_Ythreaded_rodD = 8.5 + animatePart(4,dist=5);
|
||||
axes_Zthreaded_rodD = 8.5 + animatePart(4,dist=5);
|
||||
|
||||
// Parameters for the axes reference position
|
||||
// Note: The reference coordinates are centered like this:
|
||||
// Y axis reference is the Y smooth rod end, BACK of RIGHT FRAME
|
||||
// X axis reference is the frontal X smooth rod end, RIGHT FRAME
|
||||
// Z axis reference is the Z threaded rod, at the height of the Z nut, and relative to the X reference
|
||||
axes_Yreference_height = 40 + animatePart(5);
|
||||
axes_Xreference_height = 74 + animatePart(6); // relative to Y reference
|
||||
axes_Zreference_height = -3 + animatePart(7) + animatePart(9); // relative to X reference
|
||||
|
||||
axes_Xreference_posY = -81-animatePart(8)-animatePart(9); // relative to Y reference. Moves the X axis towards the front of the machine
|
||||
axes_Zreference_posY = 14; // relative to X reference. Positions Z rods between the Y rods
|
||||
|
||||
axes_Y_threaded_height = 30 + animatePart(5);
|
||||
|
||||
axes_Ysmooth_separation = 165 + animatePart(1,overlap=0);
|
||||
axes_Xsmooth_separation = 40 + animatePart(9);
|
||||
axes_Zsmooth_separation = 40 + animatePart(10,overlap=0);
|
||||
|
||||
|
||||
// Carriage positions (for rendering)
|
||||
axes_Xcarriage_pos = axes_Xsmooth_rodLen/2+sin($t*360)*axes_Xsmooth_rodLen/3;
|
||||
axes_Ycarriage_pos = axes_Ysmooth_rodLen/2+sin($t*360)*axes_Ysmooth_rodLen/4.1;
|
||||
axes_Zcarriage_pos = axes_Zsmooth_rodLen/2+sin($t*360)*axes_Zsmooth_rodLen/8;
|
||||
|
||||
|
||||
|
||||
|
||||
// Parameters for the workbed
|
||||
Ycarriage_linearBearingSeparation = 50;
|
||||
workbed_size_X = axes_Ysmooth_separation+50;
|
||||
workbed_size_Y = Ycarriage_linearBearingSeparation+70;
|
||||
workbed_thickness = 8+3;
|
||||
workbed_separation_from_Y_smooth_rod = 10;
|
||||
|
||||
|
||||
// Part colors
|
||||
blueColor = [0.3,0.6,0.9];
|
||||
redColor = [0.8,0.3,0.3];
|
||||
yellowColor = [0.9,0.9,0.1];
|
||||
blackColor = [0.2,0.2,0.2];
|
||||
color_movingPart = yellowColor+[0.1,0.1,0.1];
|
||||
color_stillPart = yellowColor;
|
||||
|
||||
// Include config file (size and render options)
|
||||
include <configs/Default_config.h>
|
||||
|
||||
// Calculations
|
||||
axes_Xreference_posX = (axes_Ysmooth_separation-axes_Xsmooth_rodLen)/2; // relative to Y reference
|
||||
|
@ -126,29 +58,6 @@ axes_Y_smoothThreaded_verticalSeparation = axes_Yreference_height-axes_Y_threade
|
|||
|
||||
axes_ZthreadedReference_posY = axes_Xsmooth_separation-axes_Zreference_posY-axes_Zreference_posY; // Relative to X carriage reference
|
||||
|
||||
// Activate/Deactivate rendering auxiliary references (LCS axis, etc)
|
||||
draw_references = false;
|
||||
render_DXF_base = false;
|
||||
render_DXF_workbed = false;
|
||||
render_bases_outline = false; // Toggle for rendering outline DXFs
|
||||
DXF_offset = 0.4; // Needed to adjust the tolerance of the laser cutter
|
||||
|
||||
//Screw size - M3, M4, etc (integers only), at the moment only M3 and M4 will work.
|
||||
Y_frontFrame_footScrewSize = 3;
|
||||
Y_backFrame_footScrewSize = 3;
|
||||
Y_rightSmoothRodIdler_footScrewSize = 3;
|
||||
X_Frame_footScrewSize = 3;
|
||||
|
||||
Y_nutHolder_screwSize = 3;
|
||||
Y_singleLinearBearingHolder_screwSize = 3;
|
||||
Y_PCBholder_screwSize = 3;
|
||||
|
||||
X_carriage_screwSize = 3;
|
||||
|
||||
Y_rightSmoothRodIdler_rodScrewSize = 3;
|
||||
X_Frame_rodScrewSize = 3;
|
||||
|
||||
|
||||
// Include Cyclone parts
|
||||
include <Cycl_X_carriage.scad>
|
||||
include <Cycl_Z_carriage.scad>
|
||||
|
@ -259,9 +168,6 @@ render_2D_or_3D() {
|
|||
translate([axes_Xsmooth_rodLen/2,0,0])
|
||||
control_board(plasticColor=color_stillPart);
|
||||
|
||||
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the FRONT LEFT Y rod idler, Y smooth rod end
|
||||
translate([-axes_Ysmooth_separation/2,-axes_Ysmooth_rodLen/2,axes_Yreference_height]) {
|
||||
if(draw_references) %frame();
|
||||
|
@ -301,7 +207,7 @@ render_2D_or_3D() {
|
|||
if(draw_references) %frame();
|
||||
|
||||
if(render_DXF_workbed)
|
||||
Cyclone_Y_carriage(); // Render carriage exclusively
|
||||
!Cyclone_Y_carriage(); // Render carriage exclusively
|
||||
else Cyclone_Y_carriage();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,199 @@
|
|||
// This file is part of Cyclone PCB Factory: an open-source 3D printable CNC machine for PCB manufacture
|
||||
// http://reprap.org/wiki/Cyclone_PCB_Factory
|
||||
// Original author: Carlosgs (http://carlosgs.es)
|
||||
// License: CC BY-SA 4.0 (Attribution-ShareAlike 4.0 International, http://creativecommons.org/licenses/by-sa/4.0/)
|
||||
// Designed with http://www.openscad.org/
|
||||
|
||||
// Default machine config file
|
||||
|
||||
|
||||
// --- Size parameters ---
|
||||
|
||||
// --- Bottom base ---
|
||||
base_size_X = 304.8 + animatePart(1,overlap=0);
|
||||
base_size_Y = 261.62 + animatePart(2);
|
||||
base_thickness = 8;
|
||||
base_corner_radius = 20;
|
||||
base_corner_res = 0;
|
||||
foot_offset = 25;
|
||||
|
||||
// --- Axes reference position ---
|
||||
// Note: The reference coordinates are centred like this:
|
||||
// Y axis reference is the Y smooth rod end, BACK of RIGHT FRAME
|
||||
// X axis reference is the frontal X smooth rod end, RIGHT FRAME
|
||||
// Z axis reference is the Z threaded rod, at the height of the Z nut, and relative to the X reference
|
||||
axes_Yreference_height = 40 + animatePart(5);
|
||||
axes_Xreference_height = 74 + animatePart(6); // relative to Y reference
|
||||
axes_Zreference_height = -3 + animatePart(7) + animatePart(9); // relative to X reference
|
||||
|
||||
axes_Xreference_posY = -81-animatePart(8)-animatePart(9); // relative to Y reference. Moves the X axis towards the front of the machine
|
||||
axes_Zreference_posY = 14; // relative to X reference. Positions Z rods between the Y rods
|
||||
|
||||
axes_Y_threaded_height = 30 + animatePart(5);
|
||||
|
||||
axes_Ysmooth_separation = 165 + animatePart(1,overlap=0);
|
||||
axes_Xsmooth_separation = 40 + animatePart(9);
|
||||
axes_Zsmooth_separation = 40 + animatePart(10,overlap=0);
|
||||
|
||||
|
||||
// --- Work bed ---
|
||||
Ycarriage_linearBearingSeparation = 50;
|
||||
workbed_size_X = axes_Ysmooth_separation+50;
|
||||
workbed_size_Y = Ycarriage_linearBearingSeparation+70;
|
||||
workbed_thickness = 8+3;
|
||||
workbed_separation_from_Y_smooth_rod = 10;
|
||||
PCBholder_height = 10;
|
||||
PCB_dimX = 160;
|
||||
PCB_dimY = 100;
|
||||
PCB_dimZ = 1.6;
|
||||
PCB_holder_edge_length = 3;
|
||||
|
||||
// --- Z carriage ---
|
||||
X_backlash_armThickness = 30;
|
||||
|
||||
// --- X frames ---
|
||||
X_frames_additional_thickness = 5;
|
||||
footThickness = 10;
|
||||
corner_radius = 10;
|
||||
frameFrontalThickness = 15;
|
||||
|
||||
// --- Axes sizes ---
|
||||
// *_rodLen = length
|
||||
// *_rodD = diameter
|
||||
// Y smooth rod
|
||||
axes_Ysmooth_rodLen = 210 + animatePart(2);
|
||||
axes_Ysmooth_rodD = 8.5 + animatePart(4,dist=5);
|
||||
// Y threaded rod
|
||||
axes_Ythreaded_rodLen = axes_Ysmooth_rodLen-10;
|
||||
axes_Ythreaded_rodD = 8.5 + animatePart(4,dist=5);
|
||||
// X smooth rod
|
||||
axes_Xsmooth_rodLen = 250 + animatePart(1,overlap=0);
|
||||
axes_Xsmooth_rodD = 8.5 + animatePart(4,dist=5);
|
||||
// X threaded rod
|
||||
axes_Xthreaded_rodLen = axes_Xsmooth_rodLen+50;
|
||||
axes_Xthreaded_rodD = 8.5 + animatePart(4,dist=5);
|
||||
// Z smooth rod
|
||||
axes_Zsmooth_rodLen = 110 + animatePart(3);
|
||||
axes_Zsmooth_rodD = 8.2 + animatePart(4,dist=5);
|
||||
// Z threaded rod
|
||||
axes_Zthreaded_rodLen = 90;
|
||||
axes_Zthreaded_rodD = 8.5 + animatePart(4,dist=5);
|
||||
|
||||
// --- Bearings ---
|
||||
Y_linearBearingModel = "LM8UU";
|
||||
X_linearBearingModel = "LM8UU";
|
||||
X_linearBearingSeparation = 0;
|
||||
X_threaded_rod_bearingDepth = 3;
|
||||
Z_linearBearingModel = "LM8UU";
|
||||
Z_threaded_rodBearingModel = 608;
|
||||
Y_threaded_rodBearingModel = 608;
|
||||
|
||||
// --- Steppers ---
|
||||
//Y_motorModel = Nema17;
|
||||
//X_motorModel = Nema17;
|
||||
//Z_motorModel = Nema17;
|
||||
Z_motor_adjust_margin = 5;
|
||||
|
||||
// --- Screw sizes ---
|
||||
// M3, M4, etc (integers only), at the moment only M3 and M4 will work.
|
||||
Y_frontFrame_footScrewSize = 3;
|
||||
Y_backFrame_footScrewSize = 3;
|
||||
Y_rightSmoothRodIdler_footScrewSize = 3;
|
||||
X_Frame_footScrewSize = 3;
|
||||
|
||||
Y_threaded_rodNutSize = 8;
|
||||
X_threaded_rodNutSize = 8;
|
||||
Z_threaded_rodNutSize = 8;
|
||||
|
||||
Y_nutHolder_screwSize = 3;
|
||||
Y_singleLinearBearingHolder_screwSize = 3;
|
||||
Y_PCBholder_screwSize = 3;
|
||||
|
||||
Y_backlash_washer_D = 15.8;
|
||||
Y_backlash_washer_thickness = 1.6;
|
||||
X_backlash_washer_D = 15.8-0.5;
|
||||
X_backlash_washer_thickness = 1.6-0.9;
|
||||
|
||||
X_carriage_screwSize = 3;
|
||||
|
||||
Y_rightSmoothRodIdler_rodScrewSize = 3;
|
||||
X_Frame_rodScrewSize = 3;
|
||||
|
||||
spindle_holder_screwSize = 3;
|
||||
|
||||
// --- Gears ---
|
||||
axes_XgearSeparation = 37;
|
||||
X_rodGearRatio = 21; // Number of tooth
|
||||
X_motorGearRatio = 21; // Number of tooth
|
||||
X_gear_thickness = 10;
|
||||
Z_rodGearRatio = 15; // Number of tooth
|
||||
Z_motorGearRatio = 8; // Number of tooth
|
||||
Z_gear_thickness = 10;
|
||||
axes_YgearSeparation = 37;
|
||||
Y_rodGearRatio = 21; // Number of tooth
|
||||
Y_motorGearRatio = 21; // Number of tooth
|
||||
Y_gear_thickness = 5;
|
||||
|
||||
// --- Gear Cover ---
|
||||
gearCover_margin = 4;
|
||||
rodGearAddedgearCover_margin = 0;
|
||||
gearCover_wallThickness = 0.4*4;
|
||||
gearCover_screwHeadSpaceHeight = 4;
|
||||
gearCover_screwHeadSpaceDiam = 6;
|
||||
coverHeight = 16;
|
||||
coverExtraHeight = 5;
|
||||
coverExtraRadius = -7;
|
||||
gearCover_truncationAngle = 10;
|
||||
|
||||
// --- Spindle Motor ---
|
||||
spindle_motor_diam_top = 51.3;
|
||||
spindle_motor_diam_top_smaller = 47.5;
|
||||
spindle_motor_diam = 47.5;
|
||||
spindle_motor_sidelen = 32;
|
||||
spindle_holder_thickness = 8;
|
||||
spindle_motor_length = 90;
|
||||
|
||||
// --- Text ---
|
||||
textHscale = 0.8;
|
||||
textThickness = 1.5;
|
||||
topText = "CYCLONE";
|
||||
bottomText = "PCB Factory";
|
||||
|
||||
// --- Tolerances ---
|
||||
Y_threaded_rod_Tolerance = 0.5;
|
||||
Y_linearBearing_pressureFitTolerance = 0.5;
|
||||
PCB_holder_tolerance = 1;
|
||||
axes_Xsmooth_separation_tolerance = 0.5;
|
||||
X_threaded_rod_Tolerance = 0.5;
|
||||
Z_linearBearingHole_tolerance = 0.5;
|
||||
|
||||
// --- Render options ---
|
||||
|
||||
// --- Part colours ---
|
||||
blueColor = [0.3,0.6,0.9];
|
||||
redColor = [0.8,0.3,0.3];
|
||||
yellowColor = [0.9,0.9,0.1];
|
||||
blackColor = [0.2,0.2,0.2];
|
||||
color_movingPart = yellowColor+[0.1,0.1,0.1];
|
||||
color_stillPart = yellowColor;
|
||||
|
||||
// --- DXF output ---
|
||||
// Activate/Deactivate rendering auxiliary references (LCS axis, etc)
|
||||
draw_references = false; // Show reference axis's
|
||||
render_DXF_base = false; // Render bottom base for DXF export
|
||||
render_DXF_workbed = false; // Render work bed for DXF export
|
||||
render_bases_outline = false; //Toggle for rendering outline DXFs
|
||||
DXF_offset = 0.4; //Needed to adjust the tolerance of the laser cutter
|
||||
|
||||
// --- Carriage positions ---
|
||||
axes_Xcarriage_pos = axes_Xsmooth_rodLen/2+sin($t*360)*axes_Xsmooth_rodLen/3;
|
||||
axes_Ycarriage_pos = axes_Ysmooth_rodLen/2+sin($t*360)*axes_Ysmooth_rodLen/4.1;
|
||||
axes_Zcarriage_pos = axes_Zsmooth_rodLen/2+sin($t*360)*axes_Zsmooth_rodLen/8;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ module beveledBase(size=[100,200,10], radius=10, res=15, renderPart=false, echoP
|
|||
|
||||
include <MCAD/nuts_and_bolts.scad>
|
||||
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.02,rot=0,invert=false, echoPart=false) {
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.4,rot=0,invert=false, echoPart=false) {
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
rotate([0,0,invert ? 180 : 0])
|
||||
translate([0,invert ? length/2 : -length/2,0]) {
|
||||
|
@ -123,7 +123,7 @@ module nut(size=8, chamfer=false, renderPart=false, echoPart=false) {
|
|||
}
|
||||
|
||||
|
||||
module hole_for_nut(size=3,nutAddedLen=0,captiveLen=0,rot=0,tolerance=0.035) {
|
||||
module hole_for_nut(size=3,nutAddedLen=0,captiveLen=0,rot=0,tolerance=0.35) {
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
scale([1,(height+nutAddedLen)/height,1])
|
||||
rotate([90,0,0])
|
||||
|
|
Loading…
Reference in New Issue