Tiding up before sending it to "Development" folder.
parent
db96cd24ac
commit
c7628ac4a5
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,217 @@
|
|||
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
||||
// Created by Carlosgs (http://carlosgs.es)
|
||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
use <../libs/obiscad/bcube.scad>
|
||||
use <../libs/obiscad/bevel.scad>
|
||||
use <../libs/build_plate.scad>
|
||||
use <../libs/teardrop.scad>
|
||||
|
||||
include <./lm8uu_holder.scad>
|
||||
|
||||
cyl_res = 40;
|
||||
|
||||
layer_height = 0.4;
|
||||
|
||||
X_smooth_rods_sep = 50;
|
||||
X_smooth_rods_sep_projected = sqrt((X_smooth_rods_sep*X_smooth_rods_sep)/2); // Be careful with this measure, it is not properly named since it is used with the following offset:
|
||||
smooth_rod_margin = 1;
|
||||
|
||||
X_rod_sep_real = X_smooth_rods_sep_projected+smooth_rod_margin;
|
||||
X_rod_sep_real_diag = sqrt(2*(X_rod_sep_real*X_rod_sep_real));
|
||||
|
||||
screw_diam = 4;
|
||||
|
||||
M8_rod_diam = 8.2;
|
||||
M8_rod_hole_diam = M8_rod_diam+0.2;
|
||||
|
||||
M8_nut_diameter = 15.3;
|
||||
|
||||
// Adjust these values to match the thickness of the nuts you will use
|
||||
M8_nut_height_Z = 4;
|
||||
M8_nut_height_X = 1+6.5;
|
||||
|
||||
X_axis_nut_support_thickness = 10;
|
||||
|
||||
X_nut_screw_diam = 2.5;
|
||||
|
||||
lbearing_length = 24;
|
||||
|
||||
Z_smooth_rods_sep = 55;
|
||||
Z_smooth_rods_len = 140;
|
||||
|
||||
Z_threaded_rod_len = 120;
|
||||
|
||||
lbearing_holder_length = Z_smooth_rods_sep+M8_rod_diam+5;
|
||||
|
||||
module rod(len=100) {
|
||||
color([0.8,0.8,0.8])
|
||||
rotate([90,0,0])
|
||||
cylinder(r=8/2,h=len,center=true,$fn=30);
|
||||
}
|
||||
|
||||
module rodHole(len=100,radius=M8_rod_hole_diam/2, truncateMM=1) {
|
||||
color([0.8,0.8,0.8])
|
||||
rotate([90,-90,0])
|
||||
translate([0,0,-len/2])
|
||||
teardrop(radius, len, truncateMM);
|
||||
}
|
||||
|
||||
module X_nut_holder() {
|
||||
difference() {
|
||||
translate([0,0,11.5])
|
||||
cube([M8_nut_diameter+2,10,25],center=true);
|
||||
rotate([0,45,0]) translate([0,0,-16])
|
||||
cube([20,20,20],center=true);
|
||||
rotate([-90,0,0]) hull() {
|
||||
translate([0,-1,1.5])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
|
||||
translate([0,10,1.5])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
|
||||
}
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
|
||||
translate([-4,0,10])
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
|
||||
}
|
||||
}
|
||||
|
||||
module X_nut_holder_cover() {
|
||||
X_nut_screw_diam = X_nut_screw_diam*1.2;
|
||||
scale([1,1,-1]) rotate([-90,0,0])
|
||||
difference() {
|
||||
translate([0,0,7])
|
||||
cube([M8_nut_diameter+2,3,17],center=true);
|
||||
rotate([0,45,0]) translate([0,0,-16])
|
||||
cube([20,20,20],center=true);
|
||||
|
||||
rotate([0,45,0]) translate([0,0,19])
|
||||
cube([60,20,20],center=true);
|
||||
|
||||
rotate([-90,0,0]) hull() {
|
||||
translate([0,-1,0.5])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
|
||||
translate([0,10,0.5])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
|
||||
}
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
|
||||
translate([-4,0,10])
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
|
||||
}
|
||||
}
|
||||
|
||||
module X_carriage(show_printbed = 0, show_support = 0) {
|
||||
if(show_printbed) {
|
||||
//for display only, doesn't contribute to final object
|
||||
translate([0,0,-lbearing_holder_width/2])
|
||||
build_plate(3,110,140);
|
||||
}
|
||||
|
||||
difference() {
|
||||
|
||||
union() {
|
||||
|
||||
// Origin is set on the base of the Z threaded rod
|
||||
// ---------- Support for the X nut -------------
|
||||
translate([-X_rod_sep_real/2,-lbearing_holder_length/2+X_axis_nut_support_thickness/2,0]) {
|
||||
rotate([0,45,0]) X_nut_holder();
|
||||
}
|
||||
|
||||
// Now, the origin is set on the top smooth rod, and we make a 45deg turn
|
||||
translate([-X_rod_sep_real/2,0,X_rod_sep_real])
|
||||
rotate([0,45,0]) {
|
||||
// --------- Linear bearing supports ------------
|
||||
lm8uu_bearing_holder_XZ(lbearing_holder_length);
|
||||
translate([X_rod_sep_real_diag,0,0])
|
||||
lm8uu_bearing_holder_XZ(lbearing_holder_length);
|
||||
difference() {
|
||||
union() { // Join both linear bearing holders
|
||||
translate([X_rod_sep_real_diag/2,0,lbearing_holder_height/4+2])
|
||||
cube([X_rod_sep_real_diag+8,lbearing_holder_length,lbearing_holder_height/2],center=true);
|
||||
rotate([0,-45,0]) // Draw a cube for the Z nut holder
|
||||
translate([M8_nut_diameter,0,0])
|
||||
cube([M8_nut_diameter*1.5,lbearing_holder_length,lbearing_holder_height/2],center=true);
|
||||
}
|
||||
// Leave clear the inside of the bearing holders
|
||||
rotate([90,0,0]) {
|
||||
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
|
||||
translate([X_rod_sep_real_diag,0,0])
|
||||
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------- Z smooth rods holder -------
|
||||
translate([0,Z_smooth_rods_sep/2,30/2])
|
||||
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
|
||||
translate([0,-Z_smooth_rods_sep/2,30/2])
|
||||
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
|
||||
if(show_support) translate([0,0,-10+2/2])
|
||||
cube([M8_rod_diam+9,lbearing_holder_length,2],center=true);
|
||||
|
||||
} // End of union
|
||||
|
||||
// -------- Z axis rod holes --------
|
||||
translate([0,0,40-M8_nut_height_Z])
|
||||
cylinder(r=M8_nut_diameter/2,h=100,$fn=6);// Nut holder (Z)
|
||||
rotate([90,0,0]) {
|
||||
translate([0,70/2-5,0]) // --- Hole for the threaded rod ---
|
||||
rodHole(len=50,radius=M8_rod_diam/2+2, truncateMM=2.5);
|
||||
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
|
||||
rodHole(len=Z_smooth_rods_len);
|
||||
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
|
||||
rodHole(len=Z_smooth_rods_len);
|
||||
}
|
||||
|
||||
} // End of difference
|
||||
}
|
||||
|
||||
|
||||
module X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 0) {
|
||||
X_carriage(show_printbed);
|
||||
|
||||
if(show_Xrods){
|
||||
// ---- Rods (for reference) ----
|
||||
translate([-X_rod_sep_real/2,0,0]) {
|
||||
color([0.5,0.5,0.5]) rod(len=100);
|
||||
}
|
||||
translate([-X_rod_sep_real/2,0,X_rod_sep_real]) {
|
||||
rod(len=100);
|
||||
}
|
||||
translate([X_rod_sep_real/2,0,0]) {
|
||||
rod(len=100);
|
||||
}
|
||||
}
|
||||
if(show_Zrods)
|
||||
translate([0,0,0])
|
||||
rotate([90,0,0]) {
|
||||
translate([0,Z_threaded_rod_len/2-10,0])
|
||||
color([0.5,0.5,0.5]) rod(len=Z_threaded_rod_len);
|
||||
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
|
||||
rod(len=Z_smooth_rods_len);
|
||||
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
|
||||
rod(len=Z_smooth_rods_len);
|
||||
}
|
||||
}
|
||||
|
||||
module X_carriage_print_plate() {
|
||||
//for display only, doesn't contribute to final object
|
||||
build_plate(3,110,140);
|
||||
translate([0,0,lbearing_holder_length/2])
|
||||
rotate([90,0,0])
|
||||
X_carriage(show_printbed = 0, show_support = 1);
|
||||
}
|
||||
|
||||
X_carriage_assembled(show_printbed = 1,show_Xrods = 1,show_Zrods = 1);
|
||||
//X_carriage_print_plate();
|
||||
|
||||
//translate([0,20,0]) X_nut_holder_cover();
|
||||
|
|
@ -0,0 +1,443 @@
|
|||
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
||||
// Created by Carlosgs (http://carlosgs.es)
|
||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
use <../libs/obiscad/bcube.scad>
|
||||
use <../libs/obiscad/bevel.scad>
|
||||
use <../libs/build_plate.scad>
|
||||
use <../libs/teardrop.scad>
|
||||
|
||||
use <../libs/teardrop.scad>
|
||||
include <./lm8uu_holder.scad>
|
||||
|
||||
|
||||
cyl_res = 40;
|
||||
|
||||
layer_height = 0.4;
|
||||
|
||||
X_smooth_rods_sep = 50;
|
||||
X_smooth_rods_sep_projected = sqrt((X_smooth_rods_sep*X_smooth_rods_sep)/2); // Be careful with this measure, it is not properly named since it is used with the following offset:
|
||||
smooth_rod_margin = 1;
|
||||
|
||||
X_rod_sep_real = X_smooth_rods_sep_projected+smooth_rod_margin;
|
||||
X_rod_sep_real_diag = sqrt(2*(X_rod_sep_real*X_rod_sep_real));
|
||||
|
||||
screw_diam = 4;
|
||||
|
||||
M8_rod_diam = 8.2;
|
||||
M8_rod_hole_diam = M8_rod_diam+0.2;
|
||||
|
||||
M8_nut_diameter = 14.6 + .5;
|
||||
|
||||
// Adjust these values to match the thickness of the nuts you will use
|
||||
//nut height between 6 - 7mm
|
||||
M8_nut_height_Z = 4;
|
||||
M8_nut_height_X = 6.5 + .5;
|
||||
//SPRING ANTIBACKLASH
|
||||
|
||||
SPRING_OD = 11.76;
|
||||
SPRING_LEN = 35;
|
||||
SPRING_COMP = 10;
|
||||
//SPRING ANTIBACKLASH
|
||||
|
||||
X_axis_nut_support_thickness = 10;
|
||||
|
||||
X_nut_screw_diam = 3;
|
||||
|
||||
lbearing_length = 24;
|
||||
|
||||
Z_smooth_rods_sep = 55;
|
||||
Z_smooth_rods_len = 140;
|
||||
|
||||
Z_threaded_rod_len = 120;
|
||||
|
||||
lbearing_holder_length = Z_smooth_rods_sep+M8_rod_diam+5;
|
||||
|
||||
module rod(len=100) {
|
||||
color([0.8,0.8,0.8])
|
||||
rotate([90,0,0])
|
||||
cylinder(r=8/2,h=len,center=true,$fn=32);
|
||||
}
|
||||
module spring(len = SPRING_LEN, rad = SPRING_OD) {
|
||||
translate([0,-SPRING_LEN/4 - M8_nut_height_X +1.5,0])
|
||||
color([0.5,0.5,0.5])
|
||||
rotate([90,0,0])
|
||||
cylinder(r = rad/2, h = len + 2, center=true,$fn=30);
|
||||
}
|
||||
module rodHole(len=100,radius=M8_rod_hole_diam/2, truncateMM=1) {
|
||||
color([0.8,0.8,0.8])
|
||||
rotate([90,-90,0])
|
||||
translate([0,0,-len/2])
|
||||
teardrop(radius, len, truncateMM);
|
||||
}
|
||||
//--->yOPERO
|
||||
module X_nut_holder() {
|
||||
//x nut holder cover DEBUG only
|
||||
*translate([0,0,0-0])
|
||||
X_nut_holder_cover_v1();
|
||||
//x nut holder cover DEBUG only
|
||||
|
||||
//block
|
||||
difference() {
|
||||
translate([0,-1.5,11.5])
|
||||
difference(){
|
||||
cube([M8_nut_diameter+8,13,42],center=true);
|
||||
translate([0,0,14])
|
||||
cube([M8_nut_diameter+10,13,10],center=true);
|
||||
}
|
||||
//X_Nut
|
||||
translate([0,-1.5,0])
|
||||
rotate([-90,0,0]) hull() {
|
||||
rotate([0,0,90]){
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
|
||||
}
|
||||
|
||||
|
||||
// translate([0,0,-5])
|
||||
// cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
|
||||
|
||||
}
|
||||
//spring diff
|
||||
spring();
|
||||
//Nut embedding
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
|
||||
|
||||
|
||||
//Upper screw
|
||||
translate([M8_nut_height_X + 1.5,-1.5,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
|
||||
//Lower screw
|
||||
translate([-M8_nut_height_X - 1.5,-1.5,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
|
||||
//Nut transversal cut
|
||||
translate([0,-1.5,-M8_nut_diameter/2])
|
||||
cube([M8_nut_diameter+10,13,M8_nut_diameter],center=true);
|
||||
}
|
||||
}
|
||||
module X_nut_holder_cover_antibacklash_base(){
|
||||
//x nut holder cover DEBUG only
|
||||
*translate([0,0,0-0])
|
||||
X_nut_holder_cover_v1();
|
||||
//x nut holder cover DEBUG only
|
||||
|
||||
|
||||
//block
|
||||
difference() {
|
||||
translate([0,-1.5,-M8_nut_diameter/2])
|
||||
difference(){
|
||||
cube([M8_nut_diameter+8,13,M8_nut_diameter],center=true);
|
||||
|
||||
}
|
||||
//X_Nut
|
||||
translate([0,-1.5,0])
|
||||
rotate([-90,0,0]) hull() {
|
||||
rotate([0,0,90]){
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
|
||||
}
|
||||
|
||||
|
||||
// translate([0,0,-5])
|
||||
// cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
|
||||
|
||||
}
|
||||
//spring diff
|
||||
spring(len=SPRING_LEN/2);
|
||||
//Nut embedding
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
|
||||
|
||||
|
||||
//Upper screw
|
||||
translate([M8_nut_height_X + 1.5,-1.5,0])
|
||||
#cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
|
||||
//Lower screw
|
||||
translate([-M8_nut_height_X - 1.5,-1.5,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
|
||||
//Nut transversal cut
|
||||
// translate([0,-1.5,-M8_nut_diameter/2])
|
||||
// cube([M8_nut_diameter+10,13,M8_nut_diameter],center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module X_nut_holder_cover_v12(){
|
||||
//upper join
|
||||
translate([-M8_nut_height_X-3,-(13/4+1.25),-2])
|
||||
difference(){
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam,h=13/2,center=true,$fn=20);
|
||||
//screw
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=400,center=true,$fn=20);
|
||||
}
|
||||
difference() {
|
||||
translate([0,-1.5,11.5])
|
||||
cube([M8_nut_diameter+6,12.5,42],center=true);
|
||||
|
||||
//block
|
||||
rotate([0,45,0]) translate([0,0,-26])
|
||||
cube([20,20,20],center=true);
|
||||
//bold
|
||||
translate([0,-1.5,0])
|
||||
rotate([-90,0,0]) hull() {
|
||||
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
|
||||
}
|
||||
//Nut embedding
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
|
||||
//Joints body
|
||||
translate([-M8_nut_height_X-3,13/4-2,-2])
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam,h=20,center=true,$fn=20);
|
||||
|
||||
//Upper screw
|
||||
translate([M8_nut_height_X+2,-1.5,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
|
||||
//corte para obtener unicamente el nut cover
|
||||
translate([0,-1.5,13.25+M8_nut_diameter/2])
|
||||
cube([M8_nut_diameter+6,13,42],center=true);
|
||||
}
|
||||
|
||||
}
|
||||
//yOPERO<----
|
||||
module X_nut_holder_cover_v1(){
|
||||
//upper join
|
||||
translate([-M8_nut_height_X-2,-(13/4+1.25),-2])
|
||||
difference(){
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam,h=13/2,center=true,$fn=20);
|
||||
//taladro m2
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=400,center=true,$fn=20);
|
||||
}
|
||||
difference() {
|
||||
translate([0,-1.5,11.5])
|
||||
cube([M8_nut_diameter+6,12.5,42],center=true);
|
||||
|
||||
//embellecedor
|
||||
rotate([0,45,0]) translate([0,0,-26])
|
||||
cube([20,20,20],center=true);
|
||||
//bold
|
||||
translate([0,-1.5,0])
|
||||
rotate([-90,0,0]) hull() {
|
||||
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
|
||||
}
|
||||
//bold embedding
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
|
||||
//Taladro base
|
||||
translate([-M8_nut_height_X-2,13/4-2,-2])
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam,h=20,center=true,$fn=20);
|
||||
//taladro m2
|
||||
*rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
|
||||
//Taladro superior >seguro
|
||||
translate([M8_nut_height_X+1,-1.5,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
|
||||
//corte para obtener unicamente el nut cover
|
||||
translate([0,-1.5,13.25+M8_nut_diameter/2])
|
||||
cube([M8_nut_diameter+6,13,42],center=true);
|
||||
}
|
||||
|
||||
}
|
||||
//yOPERO<----
|
||||
|
||||
module X_nut_holder_cover() {
|
||||
X_nut_screw_diam = X_nut_screw_diam*1.2;
|
||||
scale([1,1,-1]) rotate([-90,0,0])
|
||||
difference() {
|
||||
translate([0,0,7])
|
||||
cube([M8_nut_diameter+2,3,67],center=true);
|
||||
rotate([0,45,0]) translate([0,0,-16])
|
||||
cube([20,20,20],center=true);
|
||||
|
||||
rotate([0,45,0]) translate([0,0,19])
|
||||
cube([60,20,20],center=true);
|
||||
|
||||
rotate([-90,0,0]) hull() {
|
||||
translate([0,-1,0.5])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
|
||||
translate([0,10,0.5])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
|
||||
}
|
||||
rotate([90,0,0])
|
||||
rotate([0,0,90])
|
||||
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
|
||||
translate([-4,0,10])
|
||||
rotate([90,0,0])
|
||||
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
|
||||
}
|
||||
}
|
||||
|
||||
module X_carriage(show_printbed = 0, show_support = 1) {
|
||||
if(show_printbed) {
|
||||
//for display only, doesn't contribute to final object
|
||||
translate([0,0,-lbearing_holder_width/2])
|
||||
build_plate(3,110,140);
|
||||
}
|
||||
|
||||
difference() {
|
||||
|
||||
union() {
|
||||
|
||||
// Origin is set on the base of the Z threaded rod
|
||||
// ---------- Support for the X nut -------------
|
||||
translate([-X_rod_sep_real/2,-lbearing_holder_length/2+X_axis_nut_support_thickness/2+0,0]) {
|
||||
rotate([180,235,0]){ X_nut_holder();
|
||||
}
|
||||
}
|
||||
// Now, the origin is set on the top smooth rod, and we make a 45deg turn
|
||||
translate([-X_rod_sep_real/2,0,X_rod_sep_real])
|
||||
rotate([0,45,0]) {
|
||||
// --------- Linear bearing supports ------------
|
||||
lm8uu_bearing_holder_XZ(lbearing_holder_length);
|
||||
translate([X_rod_sep_real_diag,0,0])
|
||||
lm8uu_bearing_holder_XZ(lbearing_holder_length);
|
||||
difference() {
|
||||
union() { // Join both linear bearing holders
|
||||
translate([X_rod_sep_real_diag/2,0,lbearing_holder_height/4+2])
|
||||
cube([X_rod_sep_real_diag+8,lbearing_holder_length,lbearing_holder_height/2],center=true);
|
||||
rotate([0,-45,0]) // Draw a cube for the Z nut holder
|
||||
translate([M8_nut_diameter,0,0])
|
||||
cube([M8_nut_diameter*1.5,lbearing_holder_length,lbearing_holder_height/2],center=true);
|
||||
}
|
||||
// Leave clear the inside of the bearing holders
|
||||
rotate([90,0,0]) {
|
||||
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
|
||||
translate([X_rod_sep_real_diag,0,0])
|
||||
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ------- Z smooth rods holder -------
|
||||
translate([0,Z_smooth_rods_sep/2,30/2])
|
||||
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
|
||||
translate([0,-Z_smooth_rods_sep/2,30/2])
|
||||
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
|
||||
if(show_support) translate([0,0,-10+2/2])
|
||||
cube([M8_rod_diam+9,lbearing_holder_length,2],center=true);
|
||||
|
||||
} // End of union
|
||||
|
||||
// -------- Z axis rod holes --------
|
||||
translate([0,0,40-M8_nut_height_Z])
|
||||
cylinder(r=M8_nut_diameter/2,h=100,$fn=6);// Nut holder (Z)
|
||||
rotate([90,0,0]) {
|
||||
translate([0,70/2-5,0]) // --- Hole for the threaded rod ---
|
||||
rodHole(len=50,radius=M8_rod_diam/2+2, truncateMM=2.5);
|
||||
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
|
||||
rodHole(len=Z_smooth_rods_len);
|
||||
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
|
||||
rodHole(len=Z_smooth_rods_len);
|
||||
}
|
||||
|
||||
} // End of difference
|
||||
}
|
||||
|
||||
|
||||
module X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 0) {
|
||||
X_carriage(show_printbed);
|
||||
|
||||
if(show_Xrods){
|
||||
// ---- Rods (for reference) ----
|
||||
translate([-X_rod_sep_real/2,0,0]) {
|
||||
color([0.5,0.5,0.5]) rod(len=100);
|
||||
}
|
||||
translate([-X_rod_sep_real/2,0,X_rod_sep_real]) {
|
||||
rod(len=100);
|
||||
}
|
||||
translate([X_rod_sep_real/2,0,0]) {
|
||||
rod(len=100);
|
||||
}
|
||||
}
|
||||
|
||||
if(show_Zrods)
|
||||
translate([0,0,0])
|
||||
rotate([90,0,0]) {
|
||||
translate([0,Z_threaded_rod_len/2-10,0])
|
||||
color([0.5,0.5,0.5]) rod(len=Z_threaded_rod_len);
|
||||
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
|
||||
rod(len=Z_smooth_rods_len);
|
||||
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
|
||||
rod(len=Z_smooth_rods_len);
|
||||
}
|
||||
}
|
||||
|
||||
module X_carriage_print_plate() {
|
||||
//for display only, doesn't contribute to final object
|
||||
build_plate(3,110,140);
|
||||
translate([0,0,lbearing_holder_length/2])
|
||||
rotate([90,0,0])
|
||||
X_carriage(show_printbed = 0, show_support = 1);
|
||||
}
|
||||
|
||||
X_carriage_assembled(show_printbed = 0,show_Xrods = 1,show_Zrods = 0);
|
||||
//X_carriage_print_plate();
|
||||
|
||||
|
||||
|
||||
//uncomment the line below to get the x nut cover
|
||||
module backlash2(){
|
||||
|
||||
translate([0,SPRING_LEN+M8_nut_diameter/2,0])
|
||||
X_nut_holder_cover_antibacklash_base();
|
||||
|
||||
|
||||
}
|
||||
module backlash1(){
|
||||
|
||||
union(){
|
||||
mirror([0,1,0])
|
||||
translate([0,0,-0.1])
|
||||
rotate([0,0,0])
|
||||
X_nut_holder_cover_antibacklash_base();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
module antibacklash_cover(){
|
||||
difference(){
|
||||
union(){
|
||||
//front left nut
|
||||
backlash1();
|
||||
//front right nut
|
||||
backlash2();
|
||||
//back left nut
|
||||
mirror([0,0,1])
|
||||
backlash1();
|
||||
//Middle body
|
||||
difference(){
|
||||
translate([0,SPRING_LEN/2+5,-M8_nut_diameter/2])
|
||||
cube([M8_nut_diameter+8,SPRING_LEN-5,M8_nut_diameter/2],center=true);
|
||||
translate([0,SPRING_LEN,0])
|
||||
spring(SPRING_LEN-5);
|
||||
}
|
||||
}
|
||||
//triming to save plastic
|
||||
translate([0,0,-M8_nut_diameter-2])
|
||||
cube([M8_nut_diameter+10,13*10,M8_nut_diameter],center=true);
|
||||
translate([0,0,M8_nut_diameter+2])
|
||||
cube([M8_nut_diameter+10,13*10,M8_nut_diameter],center=true);
|
||||
}
|
||||
}
|
||||
#translate([-X_rod_sep_real/2-.1,-lbearing_holder_length/2+X_axis_nut_support_thickness/2+SPRING_LEN+7.5 ,0]) {
|
||||
rotate([180,235,0])
|
||||
|
||||
antibacklash_cover();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,178 @@
|
|||
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
||||
// Created by Carlosgs (http://carlosgs.es)
|
||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
// History:
|
||||
// - (05/25/2013) Added @yopero's four screw suggestion for the motor stand
|
||||
// - (05/28/2013) Added @yopero's four screw suggestion for the idle stand
|
||||
|
||||
use <../libs/obiscad/bcube.scad>
|
||||
use <../libs/build_plate.scad>
|
||||
|
||||
bottom_thickness = 4;
|
||||
base_width = 20;
|
||||
base_length = 25;
|
||||
base_screw_diameter = 5;
|
||||
|
||||
motor_width = 43;
|
||||
motor_length = 49; // not used
|
||||
motor_screw_distance = 31.3;
|
||||
motor_center_diameter = 23;
|
||||
|
||||
motor_screw_diameter = 3.7;
|
||||
motor_screw_head_diameter = 8;
|
||||
|
||||
motor_adjust_margin = 3;
|
||||
|
||||
bearing_diameter = 21.8;
|
||||
M8_rod_diameter = 8.2;
|
||||
|
||||
axis_distance = 32;
|
||||
|
||||
wall_thickness = 5;
|
||||
wall_height = 45;
|
||||
wall_width = 70;
|
||||
|
||||
idler_width = 25;
|
||||
|
||||
wall_extraWidth_left = base_width+5;
|
||||
wall_extraWidth_right = 5;
|
||||
|
||||
totalWallWidth = wall_width+wall_extraWidth_left+wall_extraWidth_right;
|
||||
|
||||
module motorHolesY() {
|
||||
// Hole for the motor shaft
|
||||
hull() {
|
||||
translate([0,motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
translate([0,-motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
}
|
||||
|
||||
// Screws for holding the motor
|
||||
for(i=[-1,1]) for(j=[-1,1])
|
||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
|
||||
hull() {
|
||||
translate([0,motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
translate([0,-motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
}
|
||||
hull() {
|
||||
translate([0,motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
|
||||
translate([0,-motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module motor_stand_no_base(with_motor=true) {
|
||||
difference() {
|
||||
union(){
|
||||
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,wall_thickness/2])
|
||||
bcube([wall_height,totalWallWidth,wall_thickness],cr=4,cres=10);
|
||||
//Extra with for the stand
|
||||
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,-wall_thickness/2])
|
||||
bcube([wall_height,totalWallWidth,wall_thickness*2],cr=4,cres=10);
|
||||
}
|
||||
// Position relative to motor shaft
|
||||
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
|
||||
|
||||
if(with_motor)
|
||||
motorHolesY();
|
||||
|
||||
// Bearing holes
|
||||
rotate([0,0,15]) translate([0,axis_distance,0]) {
|
||||
#cylinder(r=(M8_rod_diameter*2)/2,h=100*wall_thickness,center=true,$fn=40);
|
||||
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
|
||||
}
|
||||
|
||||
//Threaded rods
|
||||
#translate([0,-64,0])rotate([0,0,15]) translate([0,axis_distance,0]) {
|
||||
cylinder(r=(M8_rod_diameter)/2,h=100*wall_thickness,center=true,$fn=40);
|
||||
}
|
||||
|
||||
|
||||
} // End of translate relative to motor shaft
|
||||
} // End of difference
|
||||
}
|
||||
|
||||
module holder(h=35,noScrews=false,base_width_inc=0) {
|
||||
difference() {
|
||||
union() {
|
||||
translate([wall_height-bottom_thickness,0]) {
|
||||
if(!noScrews) cube([bottom_thickness,base_width+base_width_inc,base_length]);
|
||||
hull() {
|
||||
cube([bottom_thickness,5,base_length]);
|
||||
translate([-h,0,0])
|
||||
cube([0.001,5,0.001]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// --- screws for the base ---
|
||||
if(!noScrews) translate([wall_height,base_width/2+2.5,15])
|
||||
rotate([0,90,0]) {
|
||||
translate([-5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
|
||||
translate([5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
|
||||
}
|
||||
} // End of difference
|
||||
}
|
||||
module motor_stand_base(){
|
||||
union(){
|
||||
translate([0,wall_width]) holder(noScrews=true);
|
||||
translate([0,52.4-5/2]) holder(h=15,base_width_inc=1);
|
||||
}}
|
||||
|
||||
module motor_stand(with_motor=true) {
|
||||
union() {
|
||||
motor_stand_no_base(with_motor);
|
||||
translate([0,wall_width])
|
||||
holder(noScrews=true);
|
||||
translate([0,-wall_width/3-1.67])
|
||||
holder(h=25,noScrews=true);
|
||||
|
||||
translate([0,52.4-5/2])
|
||||
holder(h=15,base_width_inc=1);
|
||||
translate([0,0])
|
||||
scale([1,-1,1])
|
||||
holder(h=15,base_width_inc=1);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module idle_stand() {
|
||||
union() {
|
||||
intersection() { // Remove the motor part
|
||||
motor_stand(with_motor=false);
|
||||
translate([wall_height/2,wall_width/2+52.4-(wall_width+wall_extraWidth_right-52.4),wall_thickness/2])
|
||||
bcube([wall_height,wall_width,100],cr=4,cres=10);
|
||||
}
|
||||
translate([0,wall_width+5-2*(wall_width+wall_extraWidth_right-52.4)]) holder(noScrews=true);
|
||||
translate([0,52.4+5/2]) scale([1,-1,1]) holder(h=15,base_width_inc=1);
|
||||
}
|
||||
}
|
||||
|
||||
module motor_stand_front(){
|
||||
motor_stand();
|
||||
}
|
||||
module motor_stand_back(){
|
||||
translate([0,0,0])
|
||||
rotate([0,180,0])
|
||||
mirror([1,0,0]){
|
||||
motor_stand();
|
||||
}
|
||||
}
|
||||
//for display only, doesn't contribute to final object
|
||||
//build_plate(3,200,200);
|
||||
|
||||
|
||||
|
||||
//motor_stand_front();
|
||||
motor_stand_back();
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
||||
// Created by Carlosgs (http://carlosgs.es)
|
||||
// Modified by @yopero 05/27/2013
|
||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
use <../libs/obiscad/bcube.scad>
|
||||
use <../libs/build_plate.scad>
|
||||
|
||||
bottom_thickness = 4;
|
||||
base_width = 20;
|
||||
base_length = 25;
|
||||
base_screw_diameter = 5;
|
||||
|
||||
motor_width = 43;
|
||||
motor_length = 49; // not used
|
||||
motor_screw_distance = 31.3;
|
||||
motor_center_diameter = 23;
|
||||
|
||||
motor_screw_diameter = 3.7;
|
||||
motor_screw_head_diameter = 8;
|
||||
|
||||
bearing_diameter = 22.4;
|
||||
M8_rod_diameter = 8.2;
|
||||
axis_distance = 32;
|
||||
|
||||
wall_thickness = 5;
|
||||
wall_height = 45;
|
||||
wall_width = 90;
|
||||
|
||||
idler_width = 25;
|
||||
|
||||
module motor_stand_no_base(with_motor=true) {
|
||||
difference() {
|
||||
|
||||
translate([wall_height/2,wall_width/2,wall_thickness/2])
|
||||
|
||||
bcube([wall_height,wall_width,wall_thickness],cr=4,cres=10);
|
||||
// Position relative to motor shaft
|
||||
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
|
||||
if(with_motor) {
|
||||
// Hole for the motor shaft
|
||||
translate([0,-wall_width/2,0])
|
||||
cube([20,wall_width,10*wall_thickness],cr=4,cres=10,center=true);
|
||||
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
|
||||
// Screws for holding the motor
|
||||
for(i=[-1,1]) for(j=[-1,1])
|
||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
|
||||
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
|
||||
}
|
||||
} // End if with motor
|
||||
|
||||
// Bearing holes
|
||||
rotate([0,0,15]) translate([0,axis_distance,0]) {
|
||||
cylinder(r=(M8_rod_diameter*2)/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
|
||||
|
||||
}
|
||||
|
||||
} // End of translate relative to motor shaft
|
||||
} // End of difference
|
||||
|
||||
}
|
||||
|
||||
module motor_stand(with_motor=true) {
|
||||
union() {
|
||||
#motor_stand_no_base(with_motor);
|
||||
difference() {
|
||||
union() {
|
||||
translate([wall_height-bottom_thickness,wall_width-base_width]) {
|
||||
cube([bottom_thickness,base_width,base_length]);
|
||||
hull() {
|
||||
cube([bottom_thickness,5,base_length]);
|
||||
translate([-18,0,0])
|
||||
cube([0.001,5,0.001]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// --- screws for the base ---
|
||||
translate([wall_height,wall_width-5,15])
|
||||
rotate([0,90,0]) {
|
||||
translate([-5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
|
||||
translate([5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
|
||||
}
|
||||
|
||||
} // End of difference
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module idle_stand() {
|
||||
intersection() { // Remove the motor part
|
||||
motor_stand(with_motor=false);
|
||||
translate([wall_height/2,wall_width/2+35,wall_thickness/2])
|
||||
bcube([wall_height,wall_width,100],cr=4,cres=10);
|
||||
}
|
||||
}
|
||||
|
||||
//for display only, doesn't contribute to final object
|
||||
build_plate(3,200,200);
|
||||
union(){
|
||||
cuerpo_extra();
|
||||
pata_extra();
|
||||
motor_stand();
|
||||
relleno();
|
||||
translate([45,0,0])
|
||||
mirror([]){
|
||||
relleno();
|
||||
}
|
||||
}
|
||||
module relleno(){
|
||||
translate([0,-5,0])
|
||||
cube([4.5,2+5,5]);
|
||||
cube([1,5,5]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//idle_stand();
|
||||
module motor_stand1(with_motor=true) {
|
||||
union() {
|
||||
//motor_stand_no_base(with_motor);
|
||||
difference() {
|
||||
union() {
|
||||
translate([wall_height-bottom_thickness,wall_width-base_width]) {
|
||||
cube([bottom_thickness,base_width,base_length]);
|
||||
hull() {
|
||||
cube([bottom_thickness,5,base_length]);
|
||||
translate([-18,0,0])
|
||||
cube([0.001,5,0.001]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// --- screws for the base ---
|
||||
translate([wall_height,wall_width-5,15])
|
||||
rotate([0,90,0]) {
|
||||
translate([-5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
|
||||
translate([5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
|
||||
}
|
||||
} // End of difference
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
module extra(){
|
||||
union(){
|
||||
pata_extra();
|
||||
cuerpo_extra();
|
||||
}
|
||||
}
|
||||
module cuerpo_extra(){
|
||||
|
||||
translate([45/2,20/2-20,5/2])
|
||||
bcube([45,20,5],,cr=4,cres=10);
|
||||
|
||||
}
|
||||
module pata_extra(){
|
||||
|
||||
mirror([0,0,1]){
|
||||
rotate([-180,0,0]){
|
||||
translate([0,-70,0])
|
||||
motor_stand1();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
||||
// Created by Carlosgs (http://carlosgs.es)
|
||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
// History:
|
||||
// - (05/25/2013) Added @yopero's four screw suggestion for the motor stand
|
||||
// - (05/28/2013) Added @yopero's four screw suggestion for the idle stand
|
||||
|
||||
use <../libs/obiscad/bcube.scad>
|
||||
use <../libs/build_plate.scad>
|
||||
|
||||
bottom_thickness = 4;
|
||||
base_width = 20;
|
||||
base_length = 25;
|
||||
base_screw_diameter = 5;
|
||||
|
||||
motor_width = 43;
|
||||
motor_length = 49; // not used
|
||||
motor_screw_distance = 31.3;
|
||||
motor_center_diameter = 23;
|
||||
|
||||
motor_screw_diameter = 3.7;
|
||||
motor_screw_head_diameter = 8;
|
||||
|
||||
motor_adjust_margin = 3;
|
||||
|
||||
bearing_diameter = 21.8;
|
||||
M8_rod_diameter = 8.2;
|
||||
|
||||
axis_distance = 32;
|
||||
|
||||
wall_thickness = 5;
|
||||
wall_height = 45;
|
||||
wall_width = 70;
|
||||
|
||||
idler_width = 25;
|
||||
|
||||
wall_extraWidth_left = base_width+5;
|
||||
wall_extraWidth_right = 5;
|
||||
|
||||
totalWallWidth = wall_width+wall_extraWidth_left+wall_extraWidth_right;
|
||||
|
||||
module motorHolesY() {
|
||||
// Hole for the motor shaft
|
||||
hull() {
|
||||
translate([0,motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
translate([0,-motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
}
|
||||
|
||||
// Screws for holding the motor
|
||||
for(i=[-1,1]) for(j=[-1,1])
|
||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
|
||||
hull() {
|
||||
translate([0,motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
translate([0,-motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||
}
|
||||
hull() {
|
||||
translate([0,motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
|
||||
translate([0,-motor_adjust_margin/2,0])
|
||||
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module motor_stand_no_base(with_motor=true) {
|
||||
difference() {
|
||||
union(){
|
||||
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,wall_thickness/2])
|
||||
bcube([wall_height,totalWallWidth,wall_thickness],cr=4,cres=10);
|
||||
//Extra with for the stand
|
||||
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,-wall_thickness/2])
|
||||
bcube([wall_height,totalWallWidth,wall_thickness*2],cr=4,cres=10);
|
||||
}
|
||||
// Position relative to motor shaft
|
||||
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
|
||||
|
||||
if(with_motor)
|
||||
motorHolesY();
|
||||
|
||||
// Bearing holes
|
||||
rotate([0,0,15]) translate([0,axis_distance,0]) {
|
||||
#cylinder(r=(M8_rod_diameter*2)/2,h=100*wall_thickness,center=true,$fn=40);
|
||||
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
|
||||
}
|
||||
|
||||
//Threaded rods
|
||||
#translate([0,-64,0])rotate([0,0,15]) translate([0,axis_distance,0]) {
|
||||
cylinder(r=(M8_rod_diameter)/2,h=100*wall_thickness,center=true,$fn=40);
|
||||
}
|
||||
|
||||
|
||||
} // End of translate relative to motor shaft
|
||||
} // End of difference
|
||||
}
|
||||
|
||||
module holder(h=35,noScrews=false,base_width_inc=0) {
|
||||
difference() {
|
||||
union() {
|
||||
translate([wall_height-bottom_thickness,0]) {
|
||||
if(!noScrews) cube([bottom_thickness,base_width+base_width_inc,base_length]);
|
||||
hull() {
|
||||
cube([bottom_thickness,5,base_length]);
|
||||
translate([-h,0,0])
|
||||
cube([0.001,5,0.001]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// --- screws for the base ---
|
||||
if(!noScrews) translate([wall_height,base_width/2+2.5,15])
|
||||
rotate([0,90,0]) {
|
||||
translate([-5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
|
||||
translate([5,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
|
||||
}
|
||||
} // End of difference
|
||||
}
|
||||
module motor_stand_base(){
|
||||
union(){
|
||||
translate([0,wall_width]) holder(noScrews=true);
|
||||
translate([0,52.4-5/2]) holder(h=15,base_width_inc=1);
|
||||
}}
|
||||
|
||||
module motor_stand(with_motor=true) {
|
||||
union() {
|
||||
motor_stand_no_base(with_motor);
|
||||
translate([0,wall_width])
|
||||
holder(noScrews=true);
|
||||
translate([0,-wall_width/3-1.67])
|
||||
holder(h=25,noScrews=true);
|
||||
|
||||
translate([0,52.4-5/2])
|
||||
holder(h=15,base_width_inc=1);
|
||||
translate([0,0])
|
||||
scale([1,-1,1])
|
||||
holder(h=15,base_width_inc=1);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module idle_stand() {
|
||||
union() {
|
||||
intersection() { // Remove the motor part
|
||||
motor_stand(with_motor=false);
|
||||
translate([wall_height/2,wall_width/2+52.4-(wall_width+wall_extraWidth_right-52.4),wall_thickness/2])
|
||||
bcube([wall_height,wall_width,100],cr=4,cres=10);
|
||||
}
|
||||
translate([0,wall_width+5-2*(wall_width+wall_extraWidth_right-52.4)]) holder(noScrews=true);
|
||||
translate([0,52.4+5/2]) scale([1,-1,1]) holder(h=15,base_width_inc=1);
|
||||
}
|
||||
}
|
||||
|
||||
module motor_stand_front(){
|
||||
motor_stand();
|
||||
}
|
||||
module motor_stand_back(){
|
||||
translate([0,0,-140])
|
||||
rotate([0,180,0])
|
||||
mirror([1,0,0]){
|
||||
motor_stand();
|
||||
}
|
||||
}
|
||||
//for display only, doesn't contribute to final object
|
||||
//build_plate(3,200,200);
|
||||
|
||||
|
||||
|
||||
motor_stand_front();
|
||||
motor_stand_back();
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,65 @@
|
|||
//cube([50,10,50]);
|
||||
module hexagon(radius)
|
||||
{
|
||||
circle(r=radius,$fn=6);
|
||||
}
|
||||
|
||||
module shell(radius)
|
||||
{
|
||||
difference()
|
||||
{
|
||||
hexagon(radius*1.2); // base
|
||||
hexagon(radius*1); // hole
|
||||
}
|
||||
}
|
||||
|
||||
module piece(radius)
|
||||
{
|
||||
translate([0, 0, -radius/12])
|
||||
{
|
||||
scale([1,1,0.5])
|
||||
{
|
||||
hexagon(radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module shell_with_piece(radius)
|
||||
{
|
||||
shell(radius);
|
||||
piece(radius);
|
||||
}
|
||||
|
||||
function column_to_offset(column, offset) = (column % 2) * offset;
|
||||
|
||||
module translate_to_hex(x_coord, y_coord, hex_width)
|
||||
{
|
||||
translate([x_coord*hex_width*1.75, y_coord*hex_width*2+column_to_offset(x_coord, hex_width), 0])
|
||||
{
|
||||
child(0);
|
||||
}
|
||||
}
|
||||
|
||||
module lattice(rows, columns, hex_width)
|
||||
{
|
||||
for(x = [0:columns-1])
|
||||
{
|
||||
for(y = [0:rows-1])
|
||||
{
|
||||
translate_to_hex(x, y, hex_width)
|
||||
{
|
||||
shell(hex_width);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
linear_extrude(height=100)
|
||||
{
|
||||
lattice(4, 5, 20);
|
||||
|
||||
// translate_to_hex(2, 2, 4)
|
||||
// {
|
||||
// piece(4);
|
||||
// }
|
||||
}
|
||||
|
|
@ -0,0 +1,211 @@
|
|||
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
||||
// Created by Carlosgs (http://carlosgs.es)
|
||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
use <../libs/obiscad/bcube.scad>
|
||||
use <../libs/obiscad/bevel.scad>
|
||||
use <../libs/build_plate.scad>
|
||||
|
||||
module frame(with_motor = 1, show_printbed = 0) {
|
||||
|
||||
layer_thickness = 0.4;
|
||||
|
||||
motor_width = 43+1;
|
||||
motor_length = 49; // not used
|
||||
motor_screw_distance = 31.3;
|
||||
motor_center_diameter = 23;
|
||||
|
||||
motor_screw_diameter = 4;
|
||||
motor_screw_head_diameter = 8;
|
||||
|
||||
motor_stand_thickness = 5;
|
||||
|
||||
bearing_diameter = 22.4;
|
||||
M8_rod_diam = 8.2;
|
||||
|
||||
X_smooth_rods_sep = 50;
|
||||
X_smooth_rods_sep_projected = sqrt((X_smooth_rods_sep*X_smooth_rods_sep)/2); // Be careful with this measure, it is not properly named since it is used with the following offset:
|
||||
smooth_rod_margin = 1;
|
||||
|
||||
smooth_rod_screw_sep = 8;
|
||||
smooth_rod_screw_diam = 3;
|
||||
smooth_rod_screw_len = 7;
|
||||
|
||||
X_rods_corner_shaft_size = X_smooth_rods_sep*0.65;
|
||||
|
||||
frame_thickness = 10;
|
||||
frame_width = 90;
|
||||
frame_height = 135;
|
||||
frame_corner_radius = 5;
|
||||
|
||||
X_threaded_rod_posX = X_smooth_rods_sep_projected;
|
||||
X_threaded_rod_posY = X_smooth_rods_sep_projected;
|
||||
motor_axis_distance = 32;
|
||||
motor_axis_angle = 15;
|
||||
X_motor_gear_margin = 35;
|
||||
|
||||
frame_hole_height = 80;
|
||||
bottom_thickness = 5;
|
||||
wall_thickness = 5;
|
||||
base_screw_diameter = 5;
|
||||
base_screw_distance = 33;
|
||||
|
||||
Y_rod_height = 40;
|
||||
Y_rod_dist_from_wall = 15;
|
||||
|
||||
Y_rod_support_lenght = Y_rod_dist_from_wall+smooth_rod_screw_sep+smooth_rod_screw_diam;
|
||||
|
||||
if(show_printbed) {
|
||||
//for display only, doesn't contribute to final object
|
||||
translate([frame_width/2,frame_height/2,0]) build_plate(3,110,140);
|
||||
}
|
||||
|
||||
union() {
|
||||
difference() {
|
||||
// --------- Main frame --------- //
|
||||
translate([frame_width/2,frame_height/2,frame_thickness/2])
|
||||
cube([frame_width,frame_height,frame_thickness],center=true);
|
||||
|
||||
|
||||
// --------- Smooth Y rods --------- //
|
||||
translate([X_smooth_rods_sep_projected,-smooth_rod_margin,0]) {
|
||||
cylinder(r=M8_rod_diam/2,h=10*frame_thickness,center=true,$fn=40);
|
||||
// Screws
|
||||
rotate([90,0,0]) translate([0,frame_thickness/2,0]) {
|
||||
translate([-smooth_rod_screw_sep,0,0])
|
||||
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
translate([smooth_rod_screw_sep,0,0])
|
||||
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
}
|
||||
}
|
||||
translate([-smooth_rod_margin,X_smooth_rods_sep_projected,0]) {
|
||||
cylinder(r=M8_rod_diam/2,h=10*frame_thickness,center=true,$fn=40);
|
||||
// Screws
|
||||
rotate([0,90,0]) translate([-frame_thickness/2,0,0]) {
|
||||
translate([0,-smooth_rod_screw_sep,0])
|
||||
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
translate([0,smooth_rod_screw_sep,0])
|
||||
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --------- Holes to save plastic --------- //
|
||||
// Corner shaft
|
||||
rotate([0,0,45])
|
||||
cube([X_rods_corner_shaft_size,X_rods_corner_shaft_size,frame_thickness*3],center=true);
|
||||
// Hole next to the corner shaft
|
||||
rotate([0,0,45]) translate([28,0,0])
|
||||
bcube([15,25,frame_thickness*3],cr=2,cres=10);
|
||||
// Hole to remove the motor part
|
||||
if(with_motor==0)
|
||||
translate([frame_width,0,0])
|
||||
bcube([frame_width-10,frame_hole_height+bottom_thickness,frame_thickness*3],cr=2,cres=10);
|
||||
|
||||
|
||||
// --------- Large hole in the frame --------- //
|
||||
translate([(frame_width-wall_thickness)/2,frame_height-frame_hole_height/2-bottom_thickness,0])
|
||||
bcube([frame_width-wall_thickness-frame_thickness,frame_hole_height,frame_thickness*3],cr=2,cres=10);
|
||||
|
||||
|
||||
// --------- Screws in the base --------- //
|
||||
rotate([90,0,0]) translate([frame_width/2,frame_thickness/2,-frame_height]) {
|
||||
translate([-base_screw_distance,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
translate([base_screw_distance*0.8,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
translate([base_screw_distance*0.2,0,0])
|
||||
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
}
|
||||
|
||||
|
||||
// --------- X motor assembly, position relative to X threaded rod --------- //
|
||||
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
|
||||
// Threaded Y rod hole
|
||||
translate([0,0,(motor_stand_thickness/2)+layer_thickness])
|
||||
cylinder(r=(M8_rod_diam*2)/2,h=10*frame_thickness,center=false,$fn=40);
|
||||
// Threaded X rod bearing hole
|
||||
translate([0,0,0])
|
||||
cylinder(r=bearing_diameter/2,h=motor_stand_thickness,center=true,$fn=40);
|
||||
|
||||
if(with_motor) {
|
||||
|
||||
// Center is the motor shaft, and we apply the rotation keeping the motor horizontal
|
||||
// Screws for holding the motor
|
||||
rotate([0,0,-motor_axis_angle]) translate([motor_axis_distance,0,0]) rotate([0,0,motor_axis_angle]) {
|
||||
for(i=[-1,1])
|
||||
for(j=[-1,1]) {
|
||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
|
||||
// Screw hole
|
||||
translate([0,0,motor_stand_thickness/2])
|
||||
cylinder(r=motor_screw_diameter/2,h=10*frame_thickness,center=true,$fn=40);
|
||||
}
|
||||
}
|
||||
|
||||
// Hole for the motor shaft
|
||||
translate([frame_width/2,0,0])
|
||||
cube([frame_width,20,10*motor_stand_thickness],cr=4,cres=10,center=true);
|
||||
cylinder(r=motor_center_diameter/2,h=10*motor_stand_thickness,center=true,$fn=40);
|
||||
|
||||
// Level the motor area
|
||||
translate([0,0,motor_stand_thickness*2])
|
||||
bcube([motor_width,motor_width,frame_thickness],cr=5,cres=10);
|
||||
|
||||
} // End of centering over motor shaft
|
||||
|
||||
} // End of if(with_motor)
|
||||
|
||||
} // End of centering over X threaded rod
|
||||
|
||||
} // End of difference() command
|
||||
|
||||
|
||||
// --------- Support column for the triangular structure --------- //
|
||||
translate([frame_width/4,frame_height-frame_hole_height/2-bottom_thickness,frame_thickness/2])
|
||||
rotate([0,0,-23])
|
||||
cube([wall_thickness,sqrt((frame_width*frame_width)/4+(frame_hole_height*frame_hole_height)),frame_thickness],center=true);
|
||||
|
||||
|
||||
// --------- Bevel base supports --------- //
|
||||
translate([wall_thickness/2,frame_height,frame_thickness-0.5])
|
||||
rotate([90,0,-90])
|
||||
bconcave_corner(cr=Y_rod_support_lenght-0.5, cres=0, l=wall_thickness, th=0.5, ext_corner=true);
|
||||
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-0.5])
|
||||
rotate([90,0,-90])
|
||||
bconcave_corner(cr=Y_rod_support_lenght-0.5, cres=0, l=frame_thickness, th=0.5, ext_corner=true);
|
||||
// Long bevel
|
||||
translate([frame_width/2,frame_height,frame_thickness-0.5])
|
||||
rotate([90,0,-90])
|
||||
bconcave_corner(cr=wall_thickness-0.5, cres=0, l=frame_width, th=0.5, ext_corner=true);
|
||||
|
||||
|
||||
// --------- Bevel Y rod support --------- //
|
||||
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-2])
|
||||
translate([0,-Y_rod_height+smooth_rod_margin,0]) {
|
||||
difference() {
|
||||
rotate([90,0,90]) // Bevel
|
||||
bconcave_corner(cr=Y_rod_support_lenght-smooth_rod_screw_len, cres=0, l=frame_thickness, th=smooth_rod_screw_len, ext_corner=true);
|
||||
|
||||
translate([0,-smooth_rod_margin,Y_rod_dist_from_wall]) rotate([0,90,0]) {
|
||||
cylinder(r=M8_rod_diam/2,h=10*frame_thickness,center=true,$fn=40);
|
||||
// Screws
|
||||
rotate([90,0,0]) {
|
||||
translate([-smooth_rod_screw_sep,0,-1])
|
||||
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
translate([smooth_rod_screw_sep,0,-1])
|
||||
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // End of union() command
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Toggle parameters and mirror to create the other side part
|
||||
frame(with_motor = 1, show_printbed = 1);
|
||||
//scale([-1,1,1]) frame(with_motor = 0, show_printbed = 1);
|
||||
|
||||
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