Customized color visualization in OpenScad. Added L top supports for PCB holder

pull/20/head
Carlos Garcia Saura 2014-09-15 00:45:56 +02:00
parent 9903784e1f
commit 0fd4c5506a
7 changed files with 22642 additions and 9772 deletions

View File

@ -116,6 +116,10 @@ workbed_thickness = 8+3;
workbed_separation_from_Y_smooth_rod = 10;
// Part colors
color_movingPart = "yellow";
color_stillPart = "green";
// Calculations
axes_Xreference_posX = (axes_Ysmooth_separation-axes_Xsmooth_rodLen)/2; // relative to Y reference
@ -151,7 +155,6 @@ render_2D_or_3D() {
// Main base for the machine
beveledBase([base_size_X,base_size_Y,base_thickness], radius=base_corner_radius, res=base_corner_res, echoPart=true, renderPart=render_bases_outline);
//%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

View File

@ -161,7 +161,7 @@ module Cyclone_X_carriage() {
}
}
difference() {
color(color_movingPart) difference() {
// Main shape
union() {
hull() {

View File

@ -142,7 +142,8 @@ module Cyclone_X_leftFrame(isLeft=true) {
// Endstop holder
translate([-partThickness-0.04,19,-5+axes_Xsmooth_separation])
rotate([-60,0,0]) {
rotate([0,0,-90]) mirror([1,0,0]) endstop_holder(holes, shortNuts=true);
rotate([0,0,-90]) mirror([1,0,0])
endstop_holder(holes, shortNuts=true, plasticColor=color_stillPart);
if(holes)
cube([partThickness+1,100,50]);
}
@ -175,19 +176,20 @@ module Cyclone_X_leftFrame(isLeft=true) {
// Translate to lower-front corner
translate([0,frameFrontalThickness, -axes_Yreference_height-axes_Xreference_height+footThickness+0.01]) {
difference() {
// Main hole
translate([-partThickness/2,holeWidth/2,holeHeight/2])
rotate([0,90,0]) bcube([holeHeight,holeWidth,partThickness*2], cr=15, cres=10);
// Translate to top center position
translate([0,holeWidth/2,holeHeight]) {
// Crocodile clip holders
translate([0,crocodileHoldersSeparation/2,0])
SingleCrocodileClipHolder();
translate([0,-crocodileHoldersSeparation/2,0])
SingleCrocodileClipHolder();
color(color_stillPart)
difference() {
// Main hole
translate([-partThickness/2,holeWidth/2,holeHeight/2])
rotate([0,90,0]) bcube([holeHeight,holeWidth,partThickness*2], cr=15, cres=10);
// Translate to top center position
translate([0,holeWidth/2,holeHeight]) {
// Crocodile clip holders
translate([0,crocodileHoldersSeparation/2,0])
SingleCrocodileClipHolder();
translate([0,-crocodileHoldersSeparation/2,0])
SingleCrocodileClipHolder();
}
}
}
if(!isLeft) {
// Wire slot
translate([wireSlotDepth-dimX, dimY-frameFrontalThickness-wireSlotSeparation-wireSlotThicknessSlim/2, dimZ/2+0.01]) {
@ -208,7 +210,7 @@ module Cyclone_X_leftFrame(isLeft=true) {
difference() {
// Main block
union() {
translate([-axes_Xreference_posX-dimX-0.01,axes_Xreference_posY,-axes_Yreference_height]) {
color(color_stillPart) 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=corner_radius, cres=10);
}
@ -217,7 +219,8 @@ module Cyclone_X_leftFrame(isLeft=true) {
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);
rotate([0,-90,0])
color(color_stillPart) cylinder(r=axes_Xsmooth_separation,h=partThickness);
if(!isLeft)
Cyclone_X_endstopHolder(holes=false);
}
@ -286,18 +289,19 @@ module Cyclone_X_leftFrame(isLeft=true) {
translate([-bearingDepth,0,0]) rotate([0,90,0])
radialBearing(echoPart=true);
if(isLeft) {
translate([gearWallSeparation,0,0]) rotate([0,90,0])
translate([gearWallSeparation,0,0]) rotate([0,90,0]) color(color_movingPart)
rodGear(r=axes_XgearSeparation/(1+1/axes_XgearRatio), h=axes_XgearThickness, 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]) motorGear(r=axes_XgearSeparation/(1+axes_XgearRatio), h=axes_XgearThickness, echoPart=true);
translate([gearWallSeparation,0,0]) rotate([0,90,0])
color(color_movingPart) motorGear(r=axes_XgearSeparation/(1+axes_XgearRatio), h=axes_XgearThickness, echoPart=true);
}
}
translate([0.1,0,0])
Cyclone_XsubPart_gearCover();
color(color_stillPart) Cyclone_XsubPart_gearCover();
}
translate([0,0,axes_Xsmooth_separation])
rotate([0,0,-90])
@ -342,11 +346,12 @@ module rodHolder(rodD=8.5, screwSize=3, height=0, sideLen=0, thickness=5, space=
} else {
difference() {
union() {
translate([0,-dimY/2,dimZ/2+space/4]) bcube([dimX,dimY,dimZ-space/2],cr=corner_radius,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=corner_radius,cres=10);
else
translate([0,-dimY/2,-height/2-space/4]) bcube([dimX,dimY,height-space/2],cr=corner_radius,cres=10);
color(color_movingPart) translate([0,-dimY/2,dimZ/2+space/4]) bcube([dimX,dimY,dimZ-space/2],cr=corner_radius,cres=10);
color(color_stillPart)
if(sideLen>dimX/2)
translate([sideLen/2-dimX/4,-dimY/2,-height/2-space/4]) bcube([dimX/2+sideLen,dimY,height-space/2],cr=corner_radius,cres=10);
else
translate([0,-dimY/2,-height/2-space/4]) bcube([dimX,dimY,height-space/2],cr=corner_radius,cres=10);
}
translate([screwSize+screwAditionalDistance,-dimY/2,dimZ])
rotate([90,0,0])

View File

@ -27,7 +27,7 @@ module Cyclone_YsubPart_nutHolder() {
difference() {
// Main shape
translate([0,0,dimZ/2-holderExtension/2])
bcube([dimX,dimY,dimZ+holderExtension],cr=2,cres=10);
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);
@ -102,7 +102,7 @@ module Cyclone_YsubPart_singleLinearBearingHolder(onlyScrews=false) {
} else {
difference() {
// Main part
union() {
color(color_movingPart) union() {
translate([0,0,dimZ/2])
bcube([dimX,dimY,dimZ], cr=3, cres=0);
translate([0,0,dimZ])
@ -154,30 +154,67 @@ module Cyclone_YsubPart_PCBholder() {
holderArmLength = 30;
holderL_thickness = 2;
holderL_width = workbed_size_Y-PCB_dimY-PCB_holder_tolerance*2;
// Draw the PCB (transparent)
%translate([0,0,PCBholder_height])
color([0.2,0.6,0,0.5]) cube([PCB_dimX+PCB_holder_tolerance*2,PCB_dimY+PCB_holder_tolerance*2,PCB_dimZ], center=true);
%translate([0,0,PCBholder_height+PCB_dimZ/2])
color([0.8,0.5,0,0.5]) cube([PCB_dimX+PCB_holder_tolerance*2,PCB_dimY+PCB_holder_tolerance*2,PCB_dimZ/10], center=true);
difference() {
translate([0,0,PCBholder_height/2])
color(color_stillPart) translate([0,0,PCBholder_height/2])
bcube([workbed_size_X,workbed_size_Y,PCBholder_height], cr=25, cres=0);
translate([0,0,PCBholder_height/2])
cube([PCB_dimX-PCB_holder_edge_length*2,PCB_dimY-PCB_holder_edge_length*2,PCBholder_height+1], center=true);
// Hole for the PCB
translate([0,0,PCBholder_height])
color("green") cube([PCB_dimX+PCB_holder_tolerance*2,PCB_dimY+PCB_holder_tolerance*2,PCB_dimZ], center=true);
cube([PCB_dimX+PCB_holder_tolerance*2,PCB_dimY+PCB_holder_tolerance*2,PCB_dimZ], center=true);
// Holes to split the part in two pieces
translate([0,0,PCBholder_height/2])
cube([PCB_dimX-PCB_holder_edge_length*2,PCB_dimY-PCB_holder_edge_length*2, 2*PCBholder_height+1], center=true);
translate([-PCB_dimX/2+PCB_holder_edge_length,0,-0.5])
cube([PCB_dimX-holderArmLength-PCB_holder_edge_length,workbed_size_Y,PCBholder_height+1]);
cube([PCB_dimX-holderArmLength-PCB_holder_edge_length,workbed_size_Y, 2*PCBholder_height+1]);
scale([-1,-1,1]) translate([-PCB_dimX/2+PCB_holder_edge_length,0,-0.5])
cube([PCB_dimX-holderArmLength-PCB_holder_edge_length,workbed_size_Y,PCBholder_height+1]);
cube([PCB_dimX-holderArmLength-PCB_holder_edge_length,workbed_size_Y, 2*PCBholder_height+1]);
// Holes for the screws
for (x = [-1,1], y=[-1,0,1]) {
translate([x*(PCB_dimX/2+screwSeparation),y*PCB_dimY/4,PCBholder_height+2.9])
rotate([0,0,x*-90]) rotate([90,0,0]) hole_for_screw(size=3,length=PCBholder_height+3,nutDepth=4.5,nutAddedLen=0,captiveLen=10, rot=90);
}
translate([PCB_dimX/2-holderArmLength/2,PCB_dimY/2+screwSeparation,PCBholder_height+2.9])
rotate([90,0,0]) hole_for_screw(size=3,length=PCBholder_height+3,nutDepth=4.5,nutAddedLen=0,captiveLen=10, rot=90);
scale([-1,-1,1]) translate([PCB_dimX/2-holderArmLength/2,PCB_dimY/2+screwSeparation,PCBholder_height+2.9])
rotate([90,0,0]) hole_for_screw(size=3,length=PCBholder_height+3,nutDepth=4.5,nutAddedLen=0,captiveLen=10, rot=90);
}
// Holder top L supports
translate([0,0,0.1])
difference() {
color(color_movingPart) translate([0,0,PCBholder_height+holderL_thickness/2])
bcube([PCB_dimX+PCB_holder_tolerance*2+holderL_width, PCB_dimY+PCB_holder_tolerance*2+holderL_width, holderL_thickness], cr=8, cres=0);
translate([0,0,PCBholder_height/2])
cube([PCB_dimX-PCB_holder_edge_length*2,PCB_dimY-PCB_holder_edge_length*2, 2*PCBholder_height+1], center=true);
translate([-PCB_dimX/2+PCB_holder_edge_length,0,-0.5])
cube([PCB_dimX-holderArmLength-PCB_holder_edge_length,workbed_size_Y, 2*PCBholder_height+1]);
scale([-1,-1,1]) translate([-PCB_dimX/2+PCB_holder_edge_length,0,-0.5])
cube([PCB_dimX-holderArmLength-PCB_holder_edge_length,workbed_size_Y, 2*PCBholder_height+1]);
// Holes for the screws
translate([0,0,holderL_thickness]) {
for (x = [-1,1], y=[-1,0,1]) {
translate([x*(PCB_dimX/2+screwSeparation),y*PCB_dimY/4,PCBholder_height+2.9])
rotate([0,0,x*-90]) rotate([90,0,0]) hole_for_screw(size=3,length=PCBholder_height*10,nutDepth=4.5,nutAddedLen=0,captiveLen=10, rot=90);
}
translate([PCB_dimX/2-holderArmLength/2,PCB_dimY/2+screwSeparation,PCBholder_height+2.9])
rotate([90,0,0]) hole_for_screw(size=3,length=PCBholder_height*10,nutDepth=4.5,nutAddedLen=0,captiveLen=10, rot=90);
scale([-1,-1,1]) translate([PCB_dimX/2-holderArmLength/2,PCB_dimY/2+screwSeparation,PCBholder_height+2.9])
rotate([90,0,0]) hole_for_screw(size=3,length=PCBholder_height*10,nutDepth=4.5,nutAddedLen=0,captiveLen=10, rot=90);
}
}
}

View File

@ -149,7 +149,7 @@ module Cyclone_Y_frontFrame() {
if(draw_references) color("blue") %frame(20);
difference() {
// Main block
union() {
color(color_stillPart) union() {
hull() {
rotate([-90,0,0])
cylinder(r=dimX/2,h=dimY);
@ -231,12 +231,13 @@ module Cyclone_Y_frontFrame() {
rotate([90,0,0])
stepperMotor(screwHeight=motorWallSeparation, echoPart=true);
translate([0,-rod_nut_len-gear_thickness-bearing_width+bearingDepth,0])
rotate([-90,0,0]) motorGear(r=axes_YgearSeparation/(1+axes_YgearRatio), echoPart=true);
rotate([-90,0,0]) color(color_movingPart)
motorGear(r=axes_YgearSeparation/(1+axes_YgearRatio), echoPart=true);
}
}
// Draw the Y gear cover
translate([0,-0.1,0])
Cyclone_YsubPart_gearCover();
color(color_stillPart) Cyclone_YsubPart_gearCover();
}
rotate([-90,0,0])
radialBearing(echoPart=true);
@ -248,7 +249,7 @@ module Cyclone_Y_frontFrame() {
rotate([-90,0,0])
nut(size=axes_Ythreaded_rodD, echoPart=true);
translate([0,rod_nut_len,0])
rotate([-90,0,0])
rotate([-90,0,0]) color(color_movingPart)
rodGear(r=axes_YgearSeparation/(1+1/axes_YgearRatio), echoPart=true);
}
@ -282,22 +283,24 @@ module Cyclone_Y_backFrame() {
translate([0,bearingDepth-bearing_width,0]) {
difference() {
union() {
rotate([90,0,0])
cylinder(r=dimX/2,h=dimY);
translate([-dimX/2,-dimY,-axes_Y_threaded_height])
cube([dimX,dimY,axes_Y_threaded_height]);
translate([0,-dimY/2,-axes_Y_threaded_height])
hull() {
translate([-footSeparation-dimX/2,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([footSeparation+dimX/2,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([0,dimY/2+footSeparation+foot_additional_separation,0])
cylinder(r=dimY/2,h=footThickness);
}
color(color_stillPart) {
rotate([90,0,0])
cylinder(r=dimX/2,h=dimY);
translate([-dimX/2,-dimY,-axes_Y_threaded_height])
cube([dimX,dimY,axes_Y_threaded_height]);
translate([0,-dimY/2,-axes_Y_threaded_height])
hull() {
translate([-footSeparation-dimX/2,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([footSeparation+dimX/2,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([0,dimY/2+footSeparation+foot_additional_separation,0])
cylinder(r=dimY/2,h=footThickness);
}
}
translate([0,-dimY-0.01,dimX/2])
rotate([0,endstopHolderRotation,0])
endstop_holder(holes=false);
endstop_holder(holes=false, plasticColor=color_stillPart);
}
translate([0,-dimY-0.01,dimX/2])
@ -391,49 +394,47 @@ module Cyclone_Y_rightSmoothRodIdler(mirrorLogo = false) {
footSeparation = screwSize*2;
footThickness = 10;
color("lightcyan") {
difference() {
union() {
translate([0,0,-axes_Yreference_height])
cube([dimX,dimY,dimZ+holderThickness+axes_Ysmooth_rodD/2]);
translate([-holderOuterRadius,0,-axes_Yreference_height])
cube([dimX,dimY,dimZ]);
rotate([-90,0,0]) cylinder(r=holderOuterRadius, h=dimY);
translate([0,dimY/2,-axes_Yreference_height])
hull() {
translate([-holderOuterRadius-footSeparation,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([holderOuterRadius*2+footSeparation,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([holderOuterRadius/2,dimY/2+footSeparation,0])
cylinder(r=dimY/2,h=footThickness);
}
}
standard_rod(diam=axes_Ysmooth_rodD, length=dimY*4, threaded=false, renderPart=true, center=true);
translate([2.5+holderOuterRadius,dimY/2,holderOuterRadius])
difference() {
color(color_stillPart) union() {
translate([0,0,-axes_Yreference_height])
cube([dimX,dimY,dimZ+holderThickness+axes_Ysmooth_rodD/2]);
translate([-holderOuterRadius,0,-axes_Yreference_height])
cube([dimX,dimY,dimZ]);
rotate([-90,0,0]) cylinder(r=holderOuterRadius, h=dimY);
translate([0,dimY/2,-axes_Yreference_height])
hull() {
translate([-holderOuterRadius-footSeparation,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([holderOuterRadius*2+footSeparation,0,0])
cylinder(r=dimY/2,h=footThickness);
translate([holderOuterRadius/2,dimY/2+footSeparation,0])
cylinder(r=dimY/2,h=footThickness);
}
}
standard_rod(diam=axes_Ysmooth_rodD, length=dimY*4, threaded=false, renderPart=true, center=true);
translate([2.5+holderOuterRadius,dimY/2,holderOuterRadius])
rotate([0,90,0])
rotate([0,0,90])
hole_for_screw(size=screwSize,length=screwLength+10,nutDepth=10,nutAddedLen=0,captiveLen=10, rot=90);
translate([dimX/2,dimY/2,0])
cube([dimX+1,dimY+1,slotHeight],center=true);
translate([(dimX-holderOuterRadius)/2,-0.1,-(dimZ+axes_Ysmooth_rodD/2)/2])
scale([1,-1,1])
rotate([90,0,0])
Cyclone_logo(sizemm = min(dimX+holderOuterRadius-5,dimZ-axes_Ysmooth_rodD/2-5), thickness = logoDepth, mirrorLogo = mirrorLogo);
translate([0,dimY/2,-axes_Yreference_height+footThickness]) {
translate([-holderOuterRadius-footSeparation,0,0])
rotate([0,90,0])
rotate([0,0,90])
hole_for_screw(size=screwSize,length=screwLength+10,nutDepth=10,nutAddedLen=0,captiveLen=10, rot=90);
translate([dimX/2,dimY/2,0])
cube([dimX+1,dimY+1,slotHeight],center=true);
translate([(dimX-holderOuterRadius)/2,-0.1,-(dimZ+axes_Ysmooth_rodD/2)/2])
scale([1,-1,1])
rotate([90,0,0])
Cyclone_logo(sizemm = min(dimX+holderOuterRadius-5,dimZ-axes_Ysmooth_rodD/2-5), thickness = logoDepth, mirrorLogo = mirrorLogo);
translate([0,dimY/2,-axes_Yreference_height+footThickness]) {
translate([-holderOuterRadius-footSeparation,0,0])
rotate([0,90,0])
rotate([0,0,90])
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, rot=90, invert=true);
translate([holderOuterRadius*2+footSeparation,0,0])
rotate([0,90,0])
rotate([0,0,90])
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, rot=90, invert=true);
translate([holderOuterRadius/2,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, rot=90, invert=true);
}
rotate([0,0,90])
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, rot=90, invert=true);
translate([holderOuterRadius*2+footSeparation,0,0])
rotate([0,90,0])
rotate([0,0,90])
hole_for_screw(size=screwSize,length=footThickness+base_thickness,nutDepth=0,nutAddedLen=0,captiveLen=0, rot=90, invert=true);
translate([holderOuterRadius/2,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, rot=90, invert=true);
}
}
// Draw nuts and bolts

View File

@ -182,13 +182,13 @@ module stepperMotor(screwHeight=10, renderPart=false, echoPart=false) {
module motorGear(r=30,h=10,renderPart=false, echoPart=false) {
renderStandardPart(renderPart)
color("lightgreen") cylinder(r=r,h=h)
cylinder(r=r,h=h)
if(echoPart) echo(str("BOM: Gear. Motor."));
}
module rodGear(r=30,h=10,renderPart=false, echoPart=false) {
renderStandardPart(renderPart)
color("lightgreen") cylinder(r=r,h=h)
cylinder(r=r,h=h)
if(echoPart) echo(str("BOM: Gear. Rod."));
}
@ -281,7 +281,7 @@ module control_board() {
}
module endstop_holder(holes=false, shortNuts=false) {
module endstop_holder(holes=false, plasticColor="blue", shortNuts=false) {
boardX = 41;
boardY = 16.05;
boardZ = 1.62;
@ -312,7 +312,7 @@ module endstop_holder(holes=false, shortNuts=false) {
hole_for_screw(size=3,length=15,nutDepth=shortNuts?5:0,nutAddedLen=shortNuts?0:5,captiveLen=10,rot=90);
}
} else {
translate([holderX/2,holderY/2,-holderZ/2-boardZ])
color(plasticColor) translate([holderX/2,holderY/2,-holderZ/2-boardZ])
bcube([holderX,holderY,holderZ], cr=2, cres=4);
// PCB
color("lightgrey") translate([0,0,-boardZ])

File diff suppressed because it is too large Load Diff