From a4695d548eee3341fa611c8c57f23ffa002641a5 Mon Sep 17 00:00:00 2001 From: Arne Durr Date: Sun, 7 Dec 2014 23:09:11 +0100 Subject: [PATCH] Added configs/Default_config.h Added configs/Default_config.h to make it easy to chance parameters like screw size and tolerances --- .../Source_files/Cycl_X_carriage.scad | 78 +++---- .../CYCLONE_2/Source_files/Cycl_X_frames.scad | 81 +++---- .../Source_files/Cycl_Y_carriage.scad | 41 ++-- .../CYCLONE_2/Source_files/Cycl_Y_frames.scad | 20 +- .../Source_files/Cycl_Z_carriage.scad | 67 ++---- Hardware/CYCLONE_2/Source_files/Cyclone.scad | 100 +-------- .../Source_files/configs/Default_config.h | 199 ++++++++++++++++++ .../Source_files/libs/standard_parts.scad | 4 +- 8 files changed, 311 insertions(+), 279 deletions(-) create mode 100644 Hardware/CYCLONE_2/Source_files/configs/Default_config.h diff --git a/Hardware/CYCLONE_2/Source_files/Cycl_X_carriage.scad b/Hardware/CYCLONE_2/Source_files/Cycl_X_carriage.scad index 1b9cd6e..f116799 100644 --- a/Hardware/CYCLONE_2/Source_files/Cycl_X_carriage.scad +++ b/Hardware/CYCLONE_2/Source_files/Cycl_X_carriage.scad @@ -7,14 +7,11 @@ use 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); } diff --git a/Hardware/CYCLONE_2/Source_files/Cycl_X_frames.scad b/Hardware/CYCLONE_2/Source_files/Cycl_X_frames.scad index b7049ad..a0df86a 100644 --- a/Hardware/CYCLONE_2/Source_files/Cycl_X_frames.scad +++ b/Hardware/CYCLONE_2/Source_files/Cycl_X_frames.scad @@ -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]) diff --git a/Hardware/CYCLONE_2/Source_files/Cycl_Y_carriage.scad b/Hardware/CYCLONE_2/Source_files/Cycl_Y_carriage.scad index cabb1af..1a342b6 100644 --- a/Hardware/CYCLONE_2/Source_files/Cycl_Y_carriage.scad +++ b/Hardware/CYCLONE_2/Source_files/Cycl_Y_carriage.scad @@ -9,8 +9,6 @@ include 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 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; diff --git a/Hardware/CYCLONE_2/Source_files/Cycl_Y_frames.scad b/Hardware/CYCLONE_2/Source_files/Cycl_Y_frames.scad index 064380e..82f4d48 100644 --- a/Hardware/CYCLONE_2/Source_files/Cycl_Y_frames.scad +++ b/Hardware/CYCLONE_2/Source_files/Cycl_Y_frames.scad @@ -14,12 +14,8 @@ module mirrorOrNot(mirrorPart=false, axes=[-1,1,1]) { use - -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; diff --git a/Hardware/CYCLONE_2/Source_files/Cycl_Z_carriage.scad b/Hardware/CYCLONE_2/Source_files/Cycl_Z_carriage.scad index 7ad5f91..9954b74 100644 --- a/Hardware/CYCLONE_2/Source_files/Cycl_Z_carriage.scad +++ b/Hardware/CYCLONE_2/Source_files/Cycl_Z_carriage.scad @@ -19,33 +19,12 @@ use use use -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); } diff --git a/Hardware/CYCLONE_2/Source_files/Cyclone.scad b/Hardware/CYCLONE_2/Source_files/Cyclone.scad index 6fd5fd1..e2f0f26 100644 --- a/Hardware/CYCLONE_2/Source_files/Cyclone.scad +++ b/Hardware/CYCLONE_2/Source_files/Cyclone.scad @@ -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 // 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 include @@ -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(); } } diff --git a/Hardware/CYCLONE_2/Source_files/configs/Default_config.h b/Hardware/CYCLONE_2/Source_files/configs/Default_config.h new file mode 100644 index 0000000..83d04d3 --- /dev/null +++ b/Hardware/CYCLONE_2/Source_files/configs/Default_config.h @@ -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; + + + + + + + + \ No newline at end of file diff --git a/Hardware/CYCLONE_2/Source_files/libs/standard_parts.scad b/Hardware/CYCLONE_2/Source_files/libs/standard_parts.scad index eb4cfd2..c50e4bb 100644 --- a/Hardware/CYCLONE_2/Source_files/libs/standard_parts.scad +++ b/Hardware/CYCLONE_2/Source_files/libs/standard_parts.scad @@ -74,7 +74,7 @@ module beveledBase(size=[100,200,10], radius=10, res=15, renderPart=false, echoP include -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])