2014-07-08 23:27:00 +07:00
|
|
|
// 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/
|
|
|
|
|
2014-07-22 21:48:58 +07:00
|
|
|
include <MCAD/nuts_and_bolts.scad>
|
2014-07-08 23:27:00 +07:00
|
|
|
|
2014-07-23 22:25:18 +07:00
|
|
|
|
|
|
|
workbed_separation_from_Y_threaded_rod = axes_Y_smoothThreaded_verticalSeparation+workbed_separation_from_Y_smooth_rod+axes_Ysmooth_rodD/2;
|
|
|
|
|
2014-07-10 21:35:59 +07:00
|
|
|
module Cyclone_YsubPart_nutHolder() {
|
2014-07-21 06:14:17 +07:00
|
|
|
footThickness = 10;
|
2014-07-23 22:25:18 +07:00
|
|
|
screwSeparation = 10;
|
2014-07-22 21:48:58 +07:00
|
|
|
rod_nut_len = 0.8*axes_Ythreaded_rodD;
|
|
|
|
dimX = axes_Ythreaded_rodD*2+5;
|
2014-07-23 22:25:18 +07:00
|
|
|
dimY = screwSeparation+20;
|
2014-07-22 21:48:58 +07:00
|
|
|
dimZ = workbed_separation_from_Y_threaded_rod;
|
|
|
|
holderExtension = 10;
|
|
|
|
rodTolerance = 0.5;
|
|
|
|
rodSize = 8; // M3, M4, etc (integers only)
|
|
|
|
washer_D = 15.8;
|
|
|
|
washer_thickness = 1.6;
|
|
|
|
|
|
|
|
difference() {
|
|
|
|
// Main shape
|
|
|
|
translate([0,0,dimZ/2-holderExtension/2])
|
|
|
|
bcube([dimX,dimY,dimZ+holderExtension],cr=3,cres=10);
|
|
|
|
// Hole for the rod
|
|
|
|
hull() {
|
|
|
|
standard_rod(diam=axes_Ythreaded_rodD+rodTolerance, length=dimY*4, threaded=true, renderPart=true, center=true);
|
|
|
|
translate([0,0,-holderExtension*2])
|
|
|
|
standard_rod(diam=axes_Ythreaded_rodD+rodTolerance, length=dimY*4, threaded=true, renderPart=true, center=true);
|
|
|
|
}
|
|
|
|
// Hole for the main nut
|
2014-07-23 22:25:18 +07:00
|
|
|
translate([0,dimY/2+0.01+rod_nut_len/2,0])
|
2014-07-22 21:48:58 +07:00
|
|
|
hull() {
|
|
|
|
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=0,captiveLen=0,tolerance=0.1);
|
|
|
|
translate([0,0,-holderExtension*2])
|
|
|
|
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=0,captiveLen=0,tolerance=0.1);
|
|
|
|
}
|
2014-07-23 22:25:18 +07:00
|
|
|
translate([0,dimY/2+0.01-rod_nut_len/2-3,0]) {
|
2014-07-22 21:48:58 +07:00
|
|
|
// Hole for the sliding nut
|
|
|
|
hull() {
|
2014-07-23 22:25:18 +07:00
|
|
|
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=dimY,captiveLen=0,tolerance=0.3);
|
2014-07-22 21:48:58 +07:00
|
|
|
translate([0,0,-holderExtension*2])
|
2014-07-23 22:25:18 +07:00
|
|
|
rotate([0,90,0]) hole_for_nut(size=rodSize,nutAddedLen=dimY,captiveLen=0,tolerance=0.3);
|
2014-07-22 21:48:58 +07:00
|
|
|
}
|
|
|
|
// Hole for the washer
|
|
|
|
hull() {
|
2014-07-23 22:25:18 +07:00
|
|
|
washer_single(diam=washer_D, thickness=washer_thickness, renderPart=true, tolerance=0.3);
|
2014-07-22 21:48:58 +07:00
|
|
|
translate([0,0,-holderExtension*2])
|
2014-07-23 22:25:18 +07:00
|
|
|
washer_single(diam=washer_D, thickness=washer_thickness, renderPart=true, tolerance=0.3);
|
2014-07-22 21:48:58 +07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
// Holes for the supporting screws
|
|
|
|
translate([0,-screwSeparation/2,workbed_separation_from_Y_threaded_rod+workbed_thickness])
|
|
|
|
rotate([90,0,0])
|
|
|
|
hole_for_screw(size=3,length=workbed_thickness+footThickness,nutDepth=-dimZ,nutAddedLen=dimZ,captiveLen=0);
|
|
|
|
translate([0,+screwSeparation/2,workbed_separation_from_Y_threaded_rod+workbed_thickness])
|
|
|
|
rotate([90,0,0])
|
|
|
|
hole_for_screw(size=3,length=workbed_thickness+footThickness,nutDepth=-dimZ,nutAddedLen=dimZ,captiveLen=0);
|
|
|
|
}
|
2014-07-23 22:25:18 +07:00
|
|
|
translate([0,dimY/2+rod_nut_len/2,0])
|
2014-07-23 04:50:34 +07:00
|
|
|
rotate([0,90,0]) rotate([90,0,0]) nut(size=8, echoPart=true);
|
|
|
|
translate([0,-dimY/2,0])
|
|
|
|
rotate([0,90,0]) rotate([-90,0,0]) nut(size=8, echoPart=true);
|
2014-07-23 22:25:18 +07:00
|
|
|
translate([0,dimY/2+0.01-rod_nut_len/2-3,0])
|
|
|
|
washer_single(diam=washer_D, thickness=washer_thickness, echoPart=true);
|
2014-07-10 21:35:59 +07:00
|
|
|
}
|
2014-07-08 23:27:00 +07:00
|
|
|
|
2014-07-23 22:25:18 +07:00
|
|
|
|
2014-07-24 06:35:51 +07:00
|
|
|
//use <libs/linear_bearing.scad>;
|
|
|
|
module Cyclone_YsubPart_singleLinearBearingHolder() {
|
|
|
|
linearBearingModel = "LM8UU";
|
|
|
|
linearBearingLength = linearBearing_L(linearBearingModel);
|
|
|
|
linearBearingDiameter = linearBearing_D(linearBearingModel);
|
|
|
|
|
2014-07-24 21:51:39 +07:00
|
|
|
plasticHolderLength = 3;
|
|
|
|
|
|
|
|
dimX = linearBearingDiameter+linearBearingDiameter/2;
|
|
|
|
dimY = linearBearingLength+2*plasticHolderLength;
|
2014-07-24 06:35:51 +07:00
|
|
|
dimZ = workbed_separation_from_Y_smooth_rod+axes_Ysmooth_rodD/2;
|
|
|
|
|
2014-07-24 21:51:39 +07:00
|
|
|
holderExtension = linearBearingDiameter/3;
|
2014-07-24 06:35:51 +07:00
|
|
|
|
2014-07-24 21:51:39 +07:00
|
|
|
screwSize = 3; // M3, M4, etc (integers only)
|
|
|
|
|
|
|
|
footSeparation = screwSize*2;
|
|
|
|
footThickness = 7;
|
|
|
|
|
|
|
|
workbed_screws_aditional_length = 10;
|
|
|
|
|
|
|
|
linearBearing_pressureFitTolerance = 0.5;
|
2014-07-24 06:35:51 +07:00
|
|
|
|
|
|
|
difference() {
|
2014-07-24 21:51:39 +07:00
|
|
|
// Main part
|
2014-07-24 06:35:51 +07:00
|
|
|
union() {
|
2014-07-24 21:51:39 +07:00
|
|
|
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);
|
2014-07-24 06:35:51 +07:00
|
|
|
}
|
2014-07-24 21:51:39 +07:00
|
|
|
// Hole for linear bearing
|
2014-07-24 06:35:51 +07:00
|
|
|
translate([0,linearBearingLength/2,0])
|
|
|
|
rotate([90,0,0]) linearBearingHole(model=linearBearingModel, renderPart=true);
|
2014-07-24 21:51:39 +07:00
|
|
|
// Slot for inserting the bearing
|
|
|
|
translate([0,0,-holderExtension/2])
|
|
|
|
cube([linearBearingDiameter-linearBearing_pressureFitTolerance*2,dimY+0.01,holderExtension+0.01], center=true);
|
|
|
|
// Plastic holders to keep the bearing in place
|
|
|
|
translate([0,dimY/2,0])
|
|
|
|
hull() {
|
|
|
|
translate([0,-plasticHolderLength,0])
|
|
|
|
rotate([90,0,0]) cylinder(r=linearBearingDiameter/2, h=0.01, center=true);
|
|
|
|
rotate([90,0,0]) cylinder(r=linearBearingDiameter/2-2*linearBearing_pressureFitTolerance, h=0.01, center=true);
|
|
|
|
}
|
|
|
|
scale([1,-1,1]) translate([0,dimY/2,0])
|
|
|
|
hull() {
|
|
|
|
translate([0,-plasticHolderLength,0])
|
|
|
|
rotate([90,0,0]) cylinder(r=linearBearingDiameter/2, h=0.01, center=true);
|
|
|
|
rotate([90,0,0]) cylinder(r=linearBearingDiameter/2-2*linearBearing_pressureFitTolerance, h=0.01, center=true);
|
|
|
|
}
|
|
|
|
rotate([90,0,0]) cylinder(r=linearBearingDiameter/2-linearBearing_pressureFitTolerance, h=dimY+1, center=true);//linearBearingHole(model=linearBearingModel, renderPart=true);
|
|
|
|
// 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);
|
2014-07-23 22:25:18 +07:00
|
|
|
}
|
2014-07-24 21:51:39 +07:00
|
|
|
|
2014-07-24 06:35:51 +07:00
|
|
|
translate([0,linearBearingLength/2,0])
|
|
|
|
rotate([90,0,0]) linearBearing_single(model=linearBearingModel, echoPart=true);
|
|
|
|
}
|
|
|
|
|
|
|
|
module Cyclone_YsubPart_linearBearingHolders() {
|
|
|
|
translate([axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2])
|
|
|
|
Cyclone_YsubPart_singleLinearBearingHolder();
|
|
|
|
translate([axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2])
|
|
|
|
Cyclone_YsubPart_singleLinearBearingHolder();
|
|
|
|
scale([-1,1,1]) translate([axes_Ysmooth_separation/2,Ycarriage_linearBearingSeparation/2])
|
|
|
|
Cyclone_YsubPart_singleLinearBearingHolder();
|
|
|
|
scale([-1,1,1]) translate([axes_Ysmooth_separation/2,-Ycarriage_linearBearingSeparation/2])
|
|
|
|
Cyclone_YsubPart_singleLinearBearingHolder();
|
2014-07-23 22:25:18 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
module Cyclone_Y_carriage() {
|
|
|
|
if(render_DXF_workbed) {
|
2014-07-24 23:33:49 +07:00
|
|
|
offset(delta = DXF_offset) projection(cut = true)
|
2014-07-23 22:25:18 +07:00
|
|
|
translate([0,0,-workbed_separation_from_Y_threaded_rod]) {
|
|
|
|
Cyclone_YsubPart_nutHolder();
|
2014-07-24 06:35:51 +07:00
|
|
|
translate([0,0,axes_Y_smoothThreaded_verticalSeparation])
|
|
|
|
Cyclone_YsubPart_linearBearingHolders();
|
2014-07-23 22:25:18 +07:00
|
|
|
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, renderPart=render_bases_outline);
|
|
|
|
}
|
|
|
|
} else {
|
2014-07-24 06:35:51 +07:00
|
|
|
if(draw_references) color("red") %frame(20);
|
2014-07-23 22:25:18 +07:00
|
|
|
Cyclone_YsubPart_nutHolder();
|
2014-07-24 06:35:51 +07:00
|
|
|
translate([0,0,axes_Y_smoothThreaded_verticalSeparation])
|
|
|
|
Cyclone_YsubPart_linearBearingHolders();
|
2014-07-23 22:25:18 +07:00
|
|
|
color([0.9,0.8,0.8,0.5]) translate([0,0,workbed_separation_from_Y_threaded_rod+workbed_thickness])
|
2014-07-23 05:08:12 +07:00
|
|
|
beveledBase(size=[workbed_size_X,workbed_size_Y,workbed_thickness], radius=3, res=15, echoPart=true);
|
2014-07-23 22:25:18 +07:00
|
|
|
}
|
2014-07-08 23:27:00 +07:00
|
|
|
}
|
|
|
|
|