// 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/ use module Cyclone_X_carriage() { linearBearingModel = "LM8UU"; linearBearingLength = linearBearing_L(linearBearingModel); linearBearingDiameter = linearBearing_D(linearBearingModel); // Correction is needed to account for 3D printer tolerances axes_effective_Xsmooth_separation = axes_Xsmooth_separation-1; linearBearingSeparation = 0; sideExtensions = linearBearingDiameter/3; ZrodHolderLength = 30; linearBearingLengthExtension = 6+max(axes_Zsmooth_rodD+axes_Zsmooth_separation-2*linearBearingLength-linearBearingSeparation, linearBearingSeparation); dimX = 2*linearBearingLength+linearBearingLengthExtension; echo(str(axes_Xsmooth_separation-2*axes_ZthreadedReference_posY, "######################################################")); difference() { // color("lightblue") translate([-(axes_Zsmooth_separation+10)/2,-5,-5]) // cube([axes_Zsmooth_separation+10,axes_Xsmooth_separation+10,axes_Zreference_height+5]); *color("lightblue") translate([-dimX/2,-5,-sideExtensions]) cube([dimX,axes_Xsmooth_separation+10,ZrodHolderLength]); hull() { rotate([0,90,0]) bcube([linearBearingDiameter,linearBearingDiameter+sideExtensions, dimX], cr=3, cres=5);// cylinder(r=linearBearingDiameter/2, h=dimX, center=true); translate([0,axes_effective_Xsmooth_separation,axes_effective_Xsmooth_separation]) rotate([0,90,0]) bcube([linearBearingDiameter+sideExtensions,linearBearingDiameter, dimX], cr=3, cres=5);// cylinder(r=linearBearingDiameter/2, h=dimX, center=true); } translate([-dimX/2-0.5,0,-sideExtensions+ZrodHolderLength]) cube([dimX+1,axes_effective_Xsmooth_separation-axes_ZthreadedReference_posY,axes_effective_Xsmooth_separation]); // ----- 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, lengthExtension=linearBearingLengthExtension); // Bottom left linear bearing translate([linearBearingLength/2+linearBearingSeparation/2,0,0]) rotate([0,0,90]) linearBearingHole(model=linearBearingModel, lateralExtension=sideExtensions*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, lengthExtension=linearBearingLength+linearBearingLengthExtension+linearBearingSeparation); // ----- Holes for the rods ------ // TRANSLATE REFERENCE POSITION to the Z axis origin (right smooth rod) translate([-axes_Zsmooth_separation/2,axes_Zreference_posY,axes_Zreference_height]) { if(draw_references) %frame(); // Z smooth rod (right) rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false, renderPart=true); // Z smooth rod (left) translate([axes_Zsmooth_separation,0,0]) rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false, renderPart=true); // Z threaded rod translate([axes_Zsmooth_separation/2,axes_ZthreadedReference_posY,0]) rotate([90,0,0]) standard_rod(diam=1.5*axes_Zthreaded_rodD, length=axes_Zthreaded_rodLen, threaded=true, renderPart=true); } } // Draw linear bearings rotate([0,90,0]) linearBearing_single(model=linearBearingModel, echoPart=true); rotate([0,-90,0]) linearBearing_single(model=linearBearingModel, echoPart=true); translate([linearBearingLength/2,axes_effective_Xsmooth_separation,axes_effective_Xsmooth_separation]) rotate([0,-90,0]) linearBearing_single(model=linearBearingModel, echoPart=true); }