Added configs/Default_config.h

Added configs/Default_config.h to make it easy to chance parameters like
screw size and tolerances
pull/26/merge^2
Arne Durr 2014-12-07 23:09:11 +01:00
parent 78b2cac39f
commit a4695d548e
8 changed files with 311 additions and 279 deletions

View File

@ -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);
}

View File

@ -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])

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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])