Added X frames
parent
25a6b7c271
commit
8be38c4b62
|
@ -13,7 +13,6 @@ use <libs/obiscad/obiscad/vector.scad>
|
|||
use <libs/obiscad/obiscad/attach.scad>
|
||||
use <libs/obiscad/obiscad/bcube.scad>
|
||||
use <libs/standard_parts.scad>
|
||||
use <libs/helpers.scad>
|
||||
|
||||
// Functions for animations. Quick and dirty implementation, will need some cleanup
|
||||
animated_parts_number = 10;
|
||||
|
@ -32,7 +31,7 @@ base_corner_res = 0;
|
|||
|
||||
// Parameters for the axes sizes
|
||||
axes_Xsmooth_rodLen = 265+animatePart(1,overlap=0);
|
||||
axes_Ysmooth_rodLen = 240+animatePart(2);
|
||||
axes_Ysmooth_rodLen = 240+animatePart(2)-30;
|
||||
axes_Zsmooth_rodLen = 100+animatePart(3);
|
||||
|
||||
axes_Xthreaded_rodLen = axes_Xsmooth_rodLen+50;
|
||||
|
@ -53,7 +52,7 @@ axes_Zthreaded_rodD = 8+animatePart(4,dist=5);
|
|||
// 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 = 42+animatePart(5);
|
||||
axes_Xreference_height = 60+animatePart(6); // relative to Y reference
|
||||
axes_Xreference_height = 70+animatePart(6); // relative to Y reference
|
||||
axes_Zreference_height = 45+animatePart(7)+animatePart(9); // relative to X reference
|
||||
|
||||
axes_Xreference_posY = -70-animatePart(8)-animatePart(9); // relative to Y reference. Moves the X axis towards the front of the machine
|
||||
|
@ -66,6 +65,9 @@ axes_Xsmooth_separation = 40+animatePart(9);
|
|||
axes_Zsmooth_separation = 35+animatePart(10,overlap=0);
|
||||
|
||||
|
||||
motor_sideLen = 42.20;
|
||||
axialBearingD = 22;
|
||||
|
||||
|
||||
// Carriage positions (for rendering)
|
||||
axes_Xcarriage_pos = axes_Xsmooth_rodLen/2+sin($t*360)*axes_Xsmooth_rodLen/3;
|
||||
|
@ -81,8 +83,6 @@ axes_Y_smoothThreaded_verticalSeparation = axes_Yreference_height-axes_Y_threade
|
|||
// Activate/Deactivate rendering auxiliary references (LCS axis, etc)
|
||||
draw_references = true;
|
||||
|
||||
|
||||
|
||||
// Include Cyclone parts
|
||||
include <Cyclone_X_carriage.scad>
|
||||
include <Cyclone_Z_carriage.scad>
|
||||
|
@ -95,25 +95,25 @@ include <Cyclone_Y_frames.scad>
|
|||
if(draw_references) %frame();
|
||||
|
||||
// Main base for the machine
|
||||
beveledBase([base_size_X,base_size_Y,base_thickness], radius=base_corner_radius, res=base_corner_res);
|
||||
beveledBase([base_size_X,base_size_Y,base_thickness], radius=base_corner_radius, res=base_corner_res, echoPart=true);
|
||||
//%color("brown") translate([0,0,-base_thickness/2]) bcube([base_size_X,base_size_Y,base_thickness], cr=base_corner_radius, cres=base_corner_res);
|
||||
|
||||
|
||||
// A4 paper sheet for reference
|
||||
standard_paperSheet_A4();
|
||||
standard_paperSheet_A4(echoPart=true);
|
||||
|
||||
|
||||
// Cyclone foot stands
|
||||
foot_offset = 40;
|
||||
translate([0,0,-base_thickness]) {
|
||||
translate([base_size_X/2-foot_offset,base_size_Y/2-foot_offset])
|
||||
rubberFoot();
|
||||
rubberFoot(echoPart=true);
|
||||
translate([-base_size_X/2+foot_offset,base_size_Y/2-foot_offset])
|
||||
rubberFoot();
|
||||
rubberFoot(echoPart=true);
|
||||
translate([-base_size_X/2+foot_offset,-base_size_Y/2+foot_offset])
|
||||
rubberFoot();
|
||||
rubberFoot(echoPart=true);
|
||||
translate([base_size_X/2-foot_offset,-base_size_Y/2+foot_offset])
|
||||
rubberFoot();
|
||||
rubberFoot(echoPart=true);
|
||||
}
|
||||
|
||||
|
||||
|
@ -123,7 +123,7 @@ translate([-axes_Ysmooth_separation/2,axes_Ysmooth_rodLen/2,axes_Yreference_heig
|
|||
if(draw_references) %frame();
|
||||
|
||||
// Draw right Y smooth rod
|
||||
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false);
|
||||
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
Cyclone_X_rightFrame();
|
||||
|
||||
|
@ -133,7 +133,7 @@ translate([-axes_Ysmooth_separation/2,axes_Ysmooth_rodLen/2,axes_Yreference_heig
|
|||
if(draw_references) %frame();
|
||||
|
||||
// Draw right Y smooth rod
|
||||
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false);
|
||||
rotate([0,0,180]) standard_rod(diam=axes_Ysmooth_rodD, length=axes_Ysmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
Cyclone_X_leftFrame();
|
||||
}
|
||||
|
@ -144,13 +144,13 @@ translate([-axes_Ysmooth_separation/2,axes_Ysmooth_rodLen/2,axes_Yreference_heig
|
|||
if(draw_references) %frame();
|
||||
|
||||
// Draw bottom X smooth rod
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false);
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw X threaded rod
|
||||
translate([-(axes_Xthreaded_rodLen-axes_Xsmooth_rodLen)/2,axes_Xsmooth_separation,0])
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xthreaded_rodD, length=axes_Xthreaded_rodLen, threaded=true);
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xthreaded_rodD, length=axes_Xthreaded_rodLen, threaded=true, echoPart=true);
|
||||
// Draw top X smooth rod
|
||||
translate([0,axes_Xsmooth_separation,axes_Xsmooth_separation])
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false);
|
||||
rotate([0,0,-90]) standard_rod(diam=axes_Xsmooth_rodD, length=axes_Xsmooth_rodLen, threaded=false, echoPart=true);
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the X carriage (centered)
|
||||
|
@ -165,13 +165,13 @@ translate([-axes_Ysmooth_separation/2,axes_Ysmooth_rodLen/2,axes_Yreference_heig
|
|||
if(draw_references) %frame();
|
||||
|
||||
// Draw Z smooth rod (right)
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false);
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw 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);
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zsmooth_rodD, length=axes_Zsmooth_rodLen, threaded=false, echoPart=true);
|
||||
// Draw Z threaded rod
|
||||
translate([axes_Zsmooth_separation/2,0,0])
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zthreaded_rodD, length=axes_Zthreaded_rodLen, threaded=true);
|
||||
rotate([90,0,0]) standard_rod(diam=axes_Zthreaded_rodD, length=axes_Zthreaded_rodLen, threaded=true, echoPart=true);
|
||||
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the Z axis reference
|
||||
|
|
|
@ -5,19 +5,210 @@
|
|||
// Designed with http://www.openscad.org/
|
||||
|
||||
|
||||
/*module Cyclone_X_rightFrame() {*/
|
||||
/* color("lightyellow")*/
|
||||
/* translate([axes_Xreference_posX,axes_Xreference_posY-5,-axes_Yreference_height]) {*/
|
||||
/* cube([15,-axes_Xreference_posY+5,axes_Yreference_height+axes_Xreference_height+axes_Xsmooth_separation+5]);*/
|
||||
/* }*/
|
||||
/* color("lightyellow") // smooth rod idler*/
|
||||
/* translate([axes_Xreference_posX,-10,-axes_Yreference_height]) {*/
|
||||
/* cube([abs(axes_Xreference_posX)+5,10,axes_Yreference_height+5]);*/
|
||||
/* }*/
|
||||
/*}*/
|
||||
|
||||
|
||||
/*module Cyclone_X_leftFrame() {*/
|
||||
/* scale([-1,1,1]) Cyclone_X_rightFrame();*/
|
||||
/*}*/
|
||||
|
||||
|
||||
axes_XgearSeparation = 37;
|
||||
axes_XgearRatio = 0.6;
|
||||
|
||||
module Cyclone_X_rightFrame() {
|
||||
color("lightyellow")
|
||||
translate([axes_Xreference_posX,axes_Xreference_posY-5,-axes_Yreference_height]) {
|
||||
cube([15,-axes_Xreference_posY+5,axes_Yreference_height+axes_Xreference_height+axes_Xsmooth_separation+5]);
|
||||
scale([-1,1,1]) Cyclone_X_leftFrame(isLeft=false);
|
||||
}
|
||||
|
||||
module Cyclone_X_leftFrame(isLeft=true) {
|
||||
|
||||
screwSize = 3; // M3, M4, etc (integers only)
|
||||
|
||||
motorWallSeparation = 5;
|
||||
motorRotatedOffset = 10;
|
||||
gearWallSeparation = 5;
|
||||
|
||||
partThickness = 10+screwSize*2;
|
||||
|
||||
dimX = partThickness;
|
||||
dimY = max(-axes_Xreference_posY,axes_Xsmooth_separation+axes_XgearSeparation*cos(motorRotatedOffset)+motor_sideLen/2+2);
|
||||
dimZ = axes_Yreference_height+axes_Xreference_height+axes_Xsmooth_separation;
|
||||
|
||||
|
||||
footSeparation = screwSize*3;
|
||||
footThickness = 10;
|
||||
footWidth = dimX+2*footSeparation;
|
||||
|
||||
bearingDepth = 3;
|
||||
|
||||
|
||||
difference() {
|
||||
// Main block
|
||||
union() {
|
||||
translate([-axes_Xreference_posX-dimX-0.01,axes_Xreference_posY,-axes_Yreference_height]) {
|
||||
cube([dimX,dimY,dimZ-axes_Xsmooth_separation]);
|
||||
translate([-footWidth/2+dimX,dimY/2,footThickness/2]) bcube([footWidth,dimY,footThickness],cr=3,cres=10);
|
||||
}
|
||||
//translate([-axes_Xreference_posX-dimX-0.01,axes_Xreference_posY+axes_Xsmooth_separation,-axes_Yreference_height])
|
||||
// cube([dimX,dimY-axes_Xsmooth_separation,dimZ]);
|
||||
rodHolder(rodD=axes_Ysmooth_rodD, screwSize=screwSize, height=axes_Yreference_height, sideLen=-axes_Xreference_posX-1);
|
||||
// TRANSLATE REFERENCE POSITION to the left frame, X lower smooth rod end
|
||||
translate([-axes_Xreference_posX,axes_Xreference_posY,axes_Xreference_height]) {
|
||||
// TRANSLATE REFERENCE POSITION to the threaded rod
|
||||
translate([-0.01,axes_Xsmooth_separation,0]) {
|
||||
rotate([0,-90,0]) cylinder(r=axes_Xsmooth_separation,h=partThickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
color("lightyellow") // smooth rod idler
|
||||
translate([axes_Xreference_posX,-10,-axes_Yreference_height]) {
|
||||
cube([abs(axes_Xreference_posX)+5,10,axes_Yreference_height+5]);
|
||||
|
||||
// TRANSLATE REFERENCE POSITION to the left frame, X lower smooth rod end
|
||||
translate([-axes_Xreference_posX,axes_Xreference_posY,axes_Xreference_height]) {
|
||||
rotate([0,0,90]) standard_rod(diam=axes_Xsmooth_rodD, length=partThickness*4, threaded=false, renderPart=true, center=true);
|
||||
rotate([0,0,-90])
|
||||
rotate([0,90,0])
|
||||
rodHolder(rodD=axes_Xsmooth_rodD, screwSize=screwSize, negative=true);
|
||||
// TRANSLATE REFERENCE POSITION to the threaded rod
|
||||
translate([0,axes_Xsmooth_separation,0]) {
|
||||
translate([0,-15,-40]) rotate([0,-90,0]) cylinder(r=15,h=partThickness*2);
|
||||
translate([0,30,-40]) rotate([0,-90,0]) cylinder(r=15,h=partThickness*2);
|
||||
translate([0,-15,-80]) rotate([0,-90,0]) cylinder(r=15,h=partThickness*2);
|
||||
rotate([0,-90,0]) {
|
||||
cylinder(r=axialBearingD/2,h=bearingDepth);
|
||||
translate([0,0,bearingDepth-0.01]) cylinder(r1=axialBearingD/2,r2=axialBearingD/2-1,h=1.5);
|
||||
cylinder(r=axialBearingD/2-1,h=partThickness*2);
|
||||
}
|
||||
//rotate([0,0,90]) standard_rod(diam=axes_Xthreaded_rodD+10, length=partThickness*4, threaded=false, renderPart=true, center=true);
|
||||
// Translate to motor position
|
||||
if(isLeft)
|
||||
translate([-motorWallSeparation,0,0])
|
||||
rotate([motorRotatedOffset,0,0])
|
||||
translate([0,axes_XgearSeparation,0])
|
||||
rotate([-motorRotatedOffset,0,0])
|
||||
rotate([0,90,0]) stepperMotor_mount(motorWallSeparation, slide_distance=5, sideLen=motor_sideLen, slideOut=true);
|
||||
translate([0,0,axes_Xsmooth_separation]) {
|
||||
rotate([0,0,90]) standard_rod(diam=axes_Xsmooth_rodD, length=partThickness*4, threaded=false, renderPart=true, center=true);
|
||||
rotate([0,0,-90])
|
||||
rodHolder(rodD=axes_Xsmooth_rodD, screwSize=screwSize, negative=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Holes for the screws
|
||||
translate([-axes_Xreference_posX-dimX-footSeparation,axes_Xreference_posY+footSeparation,-axes_Yreference_height+footThickness]) {
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
translate([0,dimY/3,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
translate([0,dimY-2*footSeparation,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw rod holders, motor, gears, screws
|
||||
// TRANSLATE REFERENCE POSITION to the left frame, X lower smooth rod end
|
||||
translate([-axes_Xreference_posX,axes_Xreference_posY,axes_Xreference_height]) {
|
||||
if(draw_references) color("red") %frame(20);
|
||||
rotate([0,0,-90])
|
||||
rotate([0,90,0])
|
||||
rodHolder(rodD=axes_Ysmooth_rodD, screwSize=screwSize);
|
||||
// TRANSLATE REFERENCE POSITION to the threaded rod
|
||||
translate([0,axes_Xsmooth_separation,0]) {
|
||||
if(draw_references) color("green") %frame(20);
|
||||
if(isLeft) {
|
||||
translate([gearWallSeparation,0,0]) rotate([0,90,0]) rodGear(r=axes_XgearSeparation*(1-axes_XgearRatio), echoPart=true);
|
||||
// Translate to motor position
|
||||
rotate([motorRotatedOffset,0,0]) {
|
||||
translate([0,axes_XgearSeparation,0])
|
||||
rotate([-motorRotatedOffset,0,0]) {
|
||||
translate([-motorWallSeparation,0,0]) rotate([0,90,0]) stepperMotor(screwHeight=motorWallSeparation, echoPart=true);
|
||||
translate([gearWallSeparation,0,0]) rotate([0,90,0]) rodGear(r=axes_XgearSeparation*axes_XgearRatio, echoPart=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0,0,axes_Xsmooth_separation])
|
||||
rotate([0,0,-90])
|
||||
rodHolder(rodD=axes_Ysmooth_rodD, screwSize=screwSize);
|
||||
}
|
||||
}
|
||||
translate([-axes_Xreference_posX-dimX-footSeparation,axes_Xreference_posY+footSeparation,-axes_Yreference_height+footThickness]) {
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
screw_and_nut(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, autoNutOffset=true, echoPart=true);
|
||||
translate([0,dimY/3,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
screw_and_nut(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, autoNutOffset=true, echoPart=true);
|
||||
translate([0,dimY-2*footSeparation,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
screw_and_nut(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, autoNutOffset=true, echoPart=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module Cyclone_X_leftFrame() {
|
||||
scale([-1,1,1]) Cyclone_X_rightFrame();
|
||||
|
||||
|
||||
|
||||
|
||||
module rodHolder(rodD=8.5, screwSize=3, height=0, sideLen=0, thickness=5, space=2, negative=false) {
|
||||
screwAditionalDistance = rodD/2;
|
||||
dimX = rodD+4*screwSize+screwAditionalDistance;
|
||||
dimY = 10+screwSize*2;
|
||||
dimZ = rodD/2+thickness;
|
||||
if(negative) {
|
||||
translate([screwSize+screwAditionalDistance,-dimY/2,dimZ])
|
||||
rotate([-90,0,0])
|
||||
rotate([0,0,180])
|
||||
hole_for_screw(size=screwSize,length=dimZ+15,nutDepth=5,nutAddedLen=0,captiveLen=10);
|
||||
translate([-screwSize-screwAditionalDistance,-dimY/2,dimZ])
|
||||
rotate([-90,0,0])
|
||||
rotate([0,0,180])
|
||||
hole_for_screw(size=screwSize,length=dimZ+15,nutDepth=5,nutAddedLen=0,captiveLen=10);
|
||||
} else {
|
||||
difference() {
|
||||
union() {
|
||||
translate([0,-dimY/2,dimZ/2+space/4]) bcube([dimX,dimY,dimZ-space/2],cr=3,cres=10);
|
||||
if(sideLen>dimX/2)
|
||||
translate([sideLen/2-dimX/4,-dimY/2,-height/2-space/4]) bcube([dimX/2+sideLen,dimY,height-space/2],cr=3,cres=10);
|
||||
else
|
||||
translate([0,-dimY/2,-height/2-space/4]) bcube([dimX,dimY,height-space/2],cr=3,cres=10);
|
||||
}
|
||||
translate([screwSize+screwAditionalDistance,-dimY/2,dimZ])
|
||||
rotate([-90,0,0])
|
||||
rotate([0,0,180])
|
||||
hole_for_screw(size=screwSize,length=dimZ+15,nutDepth=5,nutAddedLen=0,captiveLen=10);
|
||||
translate([-screwSize-screwAditionalDistance,-dimY/2,dimZ])
|
||||
rotate([-90,0,0])
|
||||
rotate([0,0,180])
|
||||
hole_for_screw(size=screwSize,length=dimZ+15,nutDepth=5,nutAddedLen=0,captiveLen=10);
|
||||
standard_rod(diam=rodD, length=dimY*4, threaded=false, renderPart=true, center=true);
|
||||
rodHolder(rodD=rodD, screwSize=screwSize, negative=true);
|
||||
}
|
||||
// Draw screws
|
||||
translate([screwSize+screwAditionalDistance,-dimY/2,dimZ+0.01])
|
||||
rotate([-90,0,0])
|
||||
rotate([0,0,180])
|
||||
screw_and_nut(size=screwSize,length=dimZ+15,nutDepth=5,nutAddedLen=0,captiveLen=0, echoPart=true);
|
||||
translate([-screwSize-screwAditionalDistance,-dimY/2,dimZ+0.01])
|
||||
rotate([-90,0,0])
|
||||
rotate([0,0,180])
|
||||
screw_and_nut(size=screwSize,length=dimZ+15,nutDepth=5,nutAddedLen=0,captiveLen=0, echoPart=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ module Cyclone_Y_carriage() {
|
|||
}
|
||||
}
|
||||
|
||||
translate([0,0,8+5+axes_Y_smoothThreaded_verticalSeparation+baseHeight])
|
||||
beveledBase(size=[axes_Ysmooth_separation+50,Ycarriage_linearBearingSeparation+100,8], radius=3, res=15);
|
||||
*translate([0,0,8+5+axes_Y_smoothThreaded_verticalSeparation+baseHeight])
|
||||
beveledBase(size=[axes_Ysmooth_separation+50,Ycarriage_linearBearingSeparation+100,8], radius=3, res=15, echoPart=true);
|
||||
}
|
||||
|
||||
|
|
|
@ -32,12 +32,12 @@ module Cyclone_Y_backFrame() {
|
|||
|
||||
|
||||
module Cyclone_logo(sizemm = 30, thickness = 10, mirrorLogo = false) {
|
||||
dxf_logo_size = 50;
|
||||
dxf_logo_size = 50; // Real size of the logo in the DXF file
|
||||
scale_factor = sizemm/dxf_logo_size;
|
||||
if(mirrorLogo)
|
||||
mirror([ 1, 0, 0 ]) linear_extrude(height=thickness) scale(scale_factor) import("dxf/CycloneLogo.dxf", layer="logo");
|
||||
else
|
||||
linear_extrude(height=thickness) scale(scale_factor) import("dxf/CycloneLogo.dxf");
|
||||
linear_extrude(height=thickness) scale(scale_factor) import("dxf/CycloneLogo.dxf", layer="logo");
|
||||
}
|
||||
|
||||
module Cyclone_Y_rightSmoothRodIdler(mirrorLogo = false) {
|
||||
|
@ -92,18 +92,37 @@ module Cyclone_Y_rightSmoothRodIdler(mirrorLogo = false) {
|
|||
translate([-holderOuterRadius-footSeparation,0,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
hole_for_screw(size=screwSize,length=footThickness*2,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
translate([holderOuterRadius*2+footSeparation,0,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
hole_for_screw(size=screwSize,length=footThickness*2,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
translate([holderOuterRadius/2,dimY/2+footSeparation,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
hole_for_screw(size=screwSize,length=footThickness*2,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Draw nuts and bolts
|
||||
translate([2.5+holderOuterRadius,dimY/2,holderOuterRadius])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
screw_and_nut(size=screwSize,length=screwLength+10,nutDepth=10,nutAddedLen=0,captiveLen=0, echoPart=true);
|
||||
translate([0,dimY/2,-axes_Yreference_height+footThickness]) {
|
||||
translate([-holderOuterRadius-footSeparation,0,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
screw_and_nut(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, autoNutOffset=true, echoPart=true);
|
||||
translate([holderOuterRadius*2+footSeparation,0,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
screw_and_nut(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, autoNutOffset=true, echoPart=true);
|
||||
translate([holderOuterRadius/2,dimY/2+footSeparation,0])
|
||||
rotate([0,90,0])
|
||||
rotate([0,0,90])
|
||||
screw_and_nut(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, autoNutOffset=true, echoPart=true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 42 KiB |
|
@ -6,7 +6,7 @@
|
|||
|
||||
include <MCAD/nuts_and_bolts.scad>
|
||||
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.5) {
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.15) {
|
||||
radius = METRIC_NUT_AC_WIDTHS[size]/2+tolerance;
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
translate([0,-length/2,0]) {
|
||||
|
@ -18,10 +18,21 @@ module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tol
|
|||
translate([0,captiveLen,0])
|
||||
nutHole(size=size, tolerance=tolerance, proj=-1);
|
||||
}
|
||||
translate([0,length/2-2.6,0])
|
||||
translate([0,length/2-height+0.01,0]) //TODO (from MCAD): proper screw cap values: instead of "height" will use METRIC_BOLT_CAP_HEIGHTS[size]+tolerance;
|
||||
rotate([90,0,0])
|
||||
render() boltHole(size=size, length=length-2.6+0.5, tolerance=tolerance, proj=-1);
|
||||
}
|
||||
}
|
||||
|
||||
module screw_and_nut(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0) {
|
||||
color("black")
|
||||
difference() {
|
||||
hole_for_screw(size,length,nutDepth,nutAddedLen,captiveLen,tolerance);
|
||||
rotate([0,45,0]) {
|
||||
cube([1,1,10],center=true);
|
||||
cube([10,1,1],center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hole_for_screw(size=3,length=20,nutDepth=0,nutAddedLen=0,captiveLen=10);
|
||||
|
|
|
@ -6,40 +6,148 @@
|
|||
|
||||
use <obiscad/obiscad/bcube.scad>
|
||||
|
||||
$render_standard_parts = false;
|
||||
// Activate to generate STL for the fully assembled machine
|
||||
render_all_parts = false;
|
||||
|
||||
// Selects if the part is fully rendered or only in preview mode
|
||||
module renderStandardPart(renderPart) {
|
||||
if(renderPart) children();
|
||||
if(renderPart || render_all_parts) children();
|
||||
else %children();
|
||||
}
|
||||
|
||||
module standard_paperSheet_A4(t=0.05, renderPart=false) {
|
||||
module standard_paperSheet_A4(t=0.05, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
translate([0,0,t/2])
|
||||
color("white") cube([297,210,t], center=true);
|
||||
if(echoPart) echo(str("BOM: Paper sheet. A4. Thickness ", t, "mm"));
|
||||
}
|
||||
|
||||
module standard_rod(diam=8, length=10, threaded=true, center=false, renderPart=false) {
|
||||
module standard_rod(diam=8, length=10, threaded=true, center=false, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
if(threaded) {
|
||||
color("black") rotate([-90,0,0]) cylinder(r=diam/2, h=length, center=center);
|
||||
if(echoPart) echo(str("BOM: Rod. Threaded. Diameter ", diam, "mm. Length ", length, "mm"));
|
||||
} else {
|
||||
color("grey") rotate([-90,0,0]) cylinder(r=diam/2, h=length, center=center);
|
||||
if(echoPart) echo(str("BOM: Rod. Smooth. Diameter ", diam, "mm. Length ", length, "mm"));
|
||||
}
|
||||
}
|
||||
|
||||
module rubberFoot(diam=40, thickness=8, renderPart=false) {
|
||||
module rubberFoot(diam=40, thickness=8, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
color("black")
|
||||
translate([0,0,-thickness])
|
||||
cylinder(r=diam/2, h=thickness);
|
||||
if(echoPart) echo(str("BOM: Rubber foot. Diameter ", diam, "mm. Thickness ", thickness, "mm"));
|
||||
}
|
||||
|
||||
|
||||
module beveledBase(size=[100,200,10], radius=10, res=15, renderPart=false) {
|
||||
module beveledBase(size=[100,200,10], radius=10, res=15, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
color("brown")
|
||||
translate([0,0,-size.z/2])
|
||||
bcube(size, cr=radius, cres=res);
|
||||
if(echoPart) echo(str("BOM: Base. Size ", size, "mm"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
include <MCAD/nuts_and_bolts.scad>
|
||||
|
||||
module hole_for_screw(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0.15, echoPart=false) {
|
||||
radius = METRIC_NUT_AC_WIDTHS[size]/2+tolerance;
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
translate([0,-length/2,0]) {
|
||||
translate([0,-length/2+height+nutAddedLen+nutDepth-0.01,0])
|
||||
scale([1,(height+nutAddedLen)/height,1])
|
||||
rotate([90,0,0])
|
||||
hull() {
|
||||
nutHole(size=size, tolerance=tolerance, proj=-1);
|
||||
translate([0,captiveLen,0])
|
||||
nutHole(size=size, tolerance=tolerance, proj=-1);
|
||||
}
|
||||
translate([0,length/2-height+0.01,0]) //TODO (from MCAD): proper screw cap values: instead of "height" will use METRIC_BOLT_CAP_HEIGHTS[size]+tolerance;
|
||||
rotate([90,0,0])
|
||||
render() boltHole(size=size, length=length-2.6+0.5, tolerance=tolerance, proj=-1);
|
||||
}
|
||||
if(echoPart) echo(str("BOM: Screw. M", size, ". Length ", length, "mm"));
|
||||
if(echoPart) echo(str("BOM: Nut. M", size, "."));
|
||||
}
|
||||
|
||||
module screw_and_nut(size=3,length=20,nutDepth=5,nutAddedLen=0,captiveLen=0,tolerance=0, autoNutOffset=false, renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
color("black")
|
||||
difference() {
|
||||
if(autoNutOffset)
|
||||
hole_for_screw(size,length+METRIC_NUT_THICKNESS[size],nutDepth,nutAddedLen,captiveLen,tolerance, echoPart=echoPart);
|
||||
else
|
||||
hole_for_screw(size,length,nutDepth,nutAddedLen,captiveLen,tolerance, echoPart=echoPart);
|
||||
rotate([0,45,0]) {
|
||||
cube([1,1,10],center=true);
|
||||
cube([10,1,1],center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module screw_single(size=3,length=10,tolerance=0, renderPart=false, echoPart=false) {
|
||||
height = METRIC_NUT_THICKNESS[size]+tolerance;
|
||||
color("black")
|
||||
renderStandardPart(renderPart)
|
||||
difference() {
|
||||
translate([0,-length/2,0]) {
|
||||
translate([0,length/2-height+0.01,0]) //TODO (from MCAD): proper screw cap values: instead of "height" will use METRIC_BOLT_CAP_HEIGHTS[size]+tolerance;
|
||||
rotate([90,0,0])
|
||||
boltHole(size=size, length=length-2.6+0.5, tolerance=tolerance, proj=-1);
|
||||
}
|
||||
rotate([0,45,0]) {
|
||||
cube([1,1,10],center=true);
|
||||
cube([10,1,1],center=true);
|
||||
}
|
||||
}
|
||||
if(echoPart) echo(str("BOM: Screw. M", size, ". Length ", length, "mm"));
|
||||
}
|
||||
|
||||
use <MCAD/motors.scad>
|
||||
include <MCAD/stepper.scad>
|
||||
module stepperMotor_mount(height, tolerance=0.15, slide_distance=5, sideLen=42.20, slideOut=false, renderPart=false) {
|
||||
render() union() {
|
||||
linear_extrude(height=height) offset(delta = tolerance, join_type = "round") union() {
|
||||
stepper_motor_mount(nema_standard=17, slide_distance=slide_distance, mochup=false);
|
||||
if(slideOut) translate([0,50]) square([22,100],center=true);
|
||||
}
|
||||
if(slideOut)
|
||||
translate([0,25,-25]) bcube([sideLen+2*tolerance,sideLen+slide_distance+2*tolerance+50,50],cr=3,cres=10);
|
||||
else
|
||||
translate([0,0,-25]) bcube([sideLen+2*tolerance,sideLen+slide_distance+2*tolerance,50],cr=3,cres=10);
|
||||
}
|
||||
}
|
||||
|
||||
module stepperMotor(screwHeight=10, renderPart=false, echoPart=false) {
|
||||
nema_screw_separation = lookup(NemaDistanceBetweenMountingHoles, Nema17);
|
||||
realScrewLength = screwHeight+METRIC_NUT_THICKNESS[3];
|
||||
scale([1,1,-1]) renderStandardPart(renderPart) {
|
||||
translate([0,0,-1]) motor(Nema17, size=NemaMedium, dualAxis=false);
|
||||
translate([nema_screw_separation/2,nema_screw_separation/2,-realScrewLength]) rotate([-90,0,0]) screw_single(size=3,length=realScrewLength+5,echoPart=echoPart);
|
||||
//translate([nema_screw_separation/2,-nema_screw_separation/2,-realScrewLength]) rotate([-90,0,0]) screw_single(size=3,length=realScrewLength+5,echoPart=echoPart);
|
||||
translate([-nema_screw_separation/2,-nema_screw_separation/2,-realScrewLength]) rotate([-90,0,0]) screw_single(size=3,length=realScrewLength+5,echoPart=echoPart);
|
||||
//translate([-nema_screw_separation/2,nema_screw_separation/2,-realScrewLength]) rotate([-90,0,0]) screw_single(size=3,length=realScrewLength+5,echoPart=echoPart);
|
||||
}
|
||||
if(echoPart) echo(str("BOM: Motor. Nema17"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
module motorGear(r=30,renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
#color("lightgreen") cylinder(r=r,h=10)
|
||||
if(echoPart) echo(str("BOM: Gear. Motor."));
|
||||
}
|
||||
|
||||
module rodGear(r=30,renderPart=false, echoPart=false) {
|
||||
renderStandardPart(renderPart)
|
||||
#color("lightgreen") cylinder(r=r,h=10)
|
||||
if(echoPart) echo(str("BOM: Gear. Rod."));
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue