Added X frames

pull/20/head
Carlos Garcia Saura 2014-07-16 19:37:42 +02:00
parent 25a6b7c271
commit 8be38c4b62
9 changed files with 117107 additions and 42 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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