diff --git a/Hardware/CYCLONE_2/Cyclone.scad b/Hardware/CYCLONE_2/Cyclone.scad index fd87c74..49a3a00 100644 --- a/Hardware/CYCLONE_2/Cyclone.scad +++ b/Hardware/CYCLONE_2/Cyclone.scad @@ -4,6 +4,14 @@ // 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/ + + +// NOTE: For a proper rendering in OpenScad it is important to change a default setting: +// Go to: Edit --> Preferences --> Advanced +// And increase "Turn off rendering at 2000 elements" to a larger number like 20000 + + + // Increase the resolution of default shapes $fa = 5; // Minimum angle for fragments [degrees] $fs = 0.5; // Minimum fragment size [mm] @@ -161,7 +169,7 @@ render_2D_or_3D() { // TRANSLATE REFERENCE POSITION to the right frame, X lower smooth rod end - !translate([axes_Xreference_posX,axes_Xreference_posY,axes_Xreference_height]) { + translate([axes_Xreference_posX,axes_Xreference_posY,axes_Xreference_height]) { if(draw_references) %frame(); // Draw bottom X smooth rod diff --git a/Hardware/CYCLONE_2/Cyclone_X_carriage.scad b/Hardware/CYCLONE_2/Cyclone_X_carriage.scad index a7a57c7..c88fc6f 100644 --- a/Hardware/CYCLONE_2/Cyclone_X_carriage.scad +++ b/Hardware/CYCLONE_2/Cyclone_X_carriage.scad @@ -69,7 +69,7 @@ module Cyclone_X_carriage() { rotate([0,90,0]) bcube([axes_effective_Xsmooth_separation,armWidth,armThickness], cr=3,cres=10); } else { if(draw_references) %frame(); - #translate([-0.01+rod_nut_len/2+6,0,0]) + translate([-0.01+rod_nut_len/2+6,0,0]) hull() { rotate([0,0,-90]) hole_for_nut(size=8,nutAddedLen=-1.25,captiveLen=axes_Xthreaded_rodD*3,rot=90,tolerance=0.1); translate([2,0,0]) diff --git a/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad b/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad index ef483c4..96f9feb 100644 --- a/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad +++ b/Hardware/CYCLONE_2/Cyclone_Y_carriage.scad @@ -9,6 +9,8 @@ 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; @@ -71,7 +73,7 @@ module Cyclone_YsubPart_nutHolder() { use -module Cyclone_YsubPart_singleLinearBearingHolder() { +module Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=false) { linearBearingModel = "LM8UU"; linearBearingLength = linearBearing_L(linearBearingModel); linearBearingDiameter = linearBearing_D(linearBearingModel); @@ -89,50 +91,68 @@ module Cyclone_YsubPart_singleLinearBearingHolder() { footSeparation = screwSize*2; footThickness = 7; - workbed_screws_aditional_length = 10; + workbed_screws_aditional_length = PCBholder_height; linearBearing_pressureFitTolerance = 0.5; - difference() { - // Main part - union() { - translate([0,0,dimZ/2]) - bcube([dimX,dimY,dimZ], cr=3, cres=0); - translate([0,0,dimZ]) - hull() { - translate([screwSize/2,0,-footThickness/2]) - bcube([dimX+screwSize,dimY,footThickness], cr=3, cres=0); - translate([dimX/2+footSeparation,0,-footThickness/2]) - cylinder(r=screwSize+3,h=footThickness,center=true); - } - translate([0,0,-holderExtension/2]) - 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); + if(onlyScrews) { // 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); + } else { + difference() { + // Main part + union() { + translate([0,0,dimZ/2]) + bcube([dimX,dimY,dimZ], cr=3, cres=0); + translate([0,0,dimZ]) + hull() { + translate([screwSize/2,0,-footThickness/2]) + bcube([dimX+screwSize,dimY,footThickness], cr=3, cres=0); + translate([dimX/2+footSeparation,0,-footThickness/2]) + cylinder(r=screwSize+3,h=footThickness,center=true); + } + translate([0,0,-holderExtension/2]) + 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); + // 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); } - - translate([0,linearBearingLength/2,0]) - rotate([90,0,0]) linearBearing_single(model=linearBearingModel, echoPart=true); } -module Cyclone_YsubPart_linearBearingHolders() { +module Cyclone_YsubPart_linearBearingHolders(onlyScrews=false) { translate([axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2]) - Cyclone_YsubPart_singleLinearBearingHolder(); + Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=onlyScrews); translate([axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2]) - Cyclone_YsubPart_singleLinearBearingHolder(); + Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=onlyScrews); scale([-1,1,1]) translate([axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2]) - Cyclone_YsubPart_singleLinearBearingHolder(); + Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=onlyScrews); scale([-1,1,1]) translate([axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2]) - Cyclone_YsubPart_singleLinearBearingHolder(); + Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=onlyScrews); } + + + +module Cyclone_YsubPart_PCBholder() { + translate([0,0,PCBholder_height/2]) + bcube([workbed_size_X,workbed_size_Y,PCBholder_height], cr=25, cres=10); + translate([0,0,1.6/2+PCBholder_height]) + color("green") cube([160,100,1.6], center=true); +} + + + module Cyclone_Y_carriage() { - if(render_DXF_workbed) { + !if(render_DXF_workbed) { offset(delta = DXF_offset) projection(cut = true) translate([0,0,-workbed_separation_from_Y_threaded_rod]) { Cyclone_YsubPart_nutHolder(); @@ -144,8 +164,14 @@ module Cyclone_Y_carriage() { } else { if(draw_references) color("red") %frame(20); Cyclone_YsubPart_nutHolder(); - translate([0,0,axes_Y_smoothThreaded_verticalSeparation]) + translate([0,0,axes_Y_smoothThreaded_verticalSeparation]) { Cyclone_YsubPart_linearBearingHolders(); + difference() { + translate([0,0,workbed_separation_from_Y_threaded_rod+workbed_thickness-axes_Y_smoothThreaded_verticalSeparation]) + Cyclone_YsubPart_PCBholder(); + #Cyclone_YsubPart_linearBearingHolders(onlyScrews=true); + } + } color([0.9,0.8,0.8,0.5]) translate([0,0,workbed_separation_from_Y_threaded_rod+workbed_thickness]) beveledBase(size=[workbed_size_X,workbed_size_Y,workbed_thickness], radius=3, res=15, echoPart=true); } diff --git a/Hardware/CYCLONE_2/README.md b/Hardware/CYCLONE_2/README.md index 73436aa..15a6ec5 100644 --- a/Hardware/CYCLONE_2/README.md +++ b/Hardware/CYCLONE_2/README.md @@ -20,8 +20,7 @@ Work in progress. Pending tasks: * PCB holder * Fork Marlin firmware and add Cyclone parameters * Better plastic-saving holes for the X frames -* Add the X nut holder to the X carriage -* Add the Z nut holder to the X carriage +* Improve the nut holder in the X carriage * Re-design the [Z carriage](INHERITED) after testing performance. Integrate vacuum cleaner attachment * Re-design the [gears](INHERITED) with smoother edges