Tiding before sending commit my build to the "Development" folder
parent
8b72ce575b
commit
db96cd24ac
File diff suppressed because it is too large
Load Diff
|
|
@ -2,14 +2,14 @@
|
||||||
// Created by Carlosgs (http://carlosgs.es)
|
// Created by Carlosgs (http://carlosgs.es)
|
||||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||||
|
|
||||||
use <../libs/Write/Write.scad>
|
use <./libs/Write/Write.scad>
|
||||||
use <../libs/build_plate.scad>
|
use <../libs/build_plate.scad>
|
||||||
use <../main_frame/frame.scad>
|
use <../main_frame/frame_hex-grid_6screws.scad>
|
||||||
use <../Y_axis/Y_rod_idler.scad>
|
use <../Y_axis/Y_rod_idler_YOP.scad>
|
||||||
use <../Y_axis/motor_stand.scad>
|
use <../Y_axis/motor_holder.scad>
|
||||||
use <../Y_axis/linear_bearing_holder.scad>
|
use <../Y_axis/linear_bearing_holder.scad>
|
||||||
use <../Y_axis/Y_nut_holder.scad>
|
use <../Y_axis/Y_nut_holder.scad>
|
||||||
use <../XZ_axis/X_carriage.scad>
|
use <../XZ_axis/X_carriage_YOP.scad>
|
||||||
use <../XZ_axis/Z_carriage.scad>
|
use <../XZ_axis/Z_carriage.scad>
|
||||||
|
|
||||||
X_axis_sep = 210;
|
X_axis_sep = 210;
|
||||||
|
|
@ -43,11 +43,11 @@ module frame_left() {
|
||||||
}
|
}
|
||||||
|
|
||||||
module Y_rod_idler_left() {
|
module Y_rod_idler_left() {
|
||||||
color([0.8,1,1]) rotate([0,0,90]) scale([1,-1,1]) translate([-26,-17,39]) rotate([-90,0,0]) Y_rod_idler();
|
color([0.8,1,1]) rotate([0,0,180]) translate([26,0,40]) rotate([-90,0,0]) Y_rod_idler_leftX(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
module Y_rod_idler_right() {
|
module Y_rod_idler_right() {
|
||||||
color([1,1,1]) rotate([0,0,90]) translate([-26,-17,39]) rotate([-90,0,0]) Y_rod_idler();
|
color([1,1,1]) rotate([0,0,180]) translate([-26,0,40]) rotate([-90,0,0]) Y_rod_idler_rightX(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
module Y_motor_stand() {
|
module Y_motor_stand() {
|
||||||
|
|
@ -55,7 +55,7 @@ module Y_motor_stand() {
|
||||||
}
|
}
|
||||||
|
|
||||||
module Y_idle_stand() {
|
module Y_idle_stand() {
|
||||||
color([0,1,0.8]) rotate([0,90,180]) translate([-45,0,52.4]) rotate([-90,0,0]) idle_stand();
|
color([0,1,0.8]) rotate([90,270,0]) translate([45,-52.4,0]) idle_stand();
|
||||||
}
|
}
|
||||||
|
|
||||||
module linear_bearing_holder() {
|
module linear_bearing_holder() {
|
||||||
|
|
@ -105,10 +105,9 @@ module X_carriage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
module Z_carriage_piece() {
|
module Z_carriage_piece() {
|
||||||
translate([0,0,90])
|
translate([0,0,41])
|
||||||
rotate([0,0,-90])
|
rotate([0,0,90])
|
||||||
rotate([0,180,0])
|
Z_carriage_assembled();
|
||||||
Z_carriage(showSpindle=true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module cnc(show_printbed = 1) {
|
module cnc(show_printbed = 1) {
|
||||||
|
|
@ -126,9 +125,9 @@ module cnc(show_printbed = 1) {
|
||||||
|
|
||||||
// ---- Y rod idlers ----
|
// ---- Y rod idlers ----
|
||||||
translate([0,Y_axis_sep,0]) {
|
translate([0,Y_axis_sep,0]) {
|
||||||
Y_rod_idler_left();
|
|
||||||
translate([X_axis_sep,0,0])
|
|
||||||
Y_rod_idler_right();
|
Y_rod_idler_right();
|
||||||
|
translate([X_axis_sep,0,0])
|
||||||
|
Y_rod_idler_left();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- Y threaded rod motor and idler ----
|
// ---- Y threaded rod motor and idler ----
|
||||||
|
|
@ -191,6 +190,9 @@ module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
|
||||||
// --- Y threaded rod ---
|
// --- Y threaded rod ---
|
||||||
translate([0,0,Y_threaded_rod_height-Y_rod_height])
|
translate([0,0,Y_threaded_rod_height-Y_rod_height])
|
||||||
color([0.5,0.5,0.5]) rod(Y_threaded_rod_length+60);
|
color([0.5,0.5,0.5]) rod(Y_threaded_rod_length+60);
|
||||||
|
//extra threaded rod for stability
|
||||||
|
translate([64,0,Y_threaded_rod_height-Y_rod_height])
|
||||||
|
color([0.5,0.5,0.5]) rod(Y_threaded_rod_length+60);
|
||||||
|
|
||||||
// --- Y smooth rods ---
|
// --- Y smooth rods ---
|
||||||
translate([X_axis_sep/2,0,0])
|
translate([X_axis_sep/2,0,0])
|
||||||
|
|
@ -207,12 +209,19 @@ module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
|
||||||
translate([0,X_rod_sep_real/2,Z_offset])
|
translate([0,X_rod_sep_real/2,Z_offset])
|
||||||
Z_carriage_piece();
|
Z_carriage_piece();
|
||||||
}
|
}
|
||||||
|
//X motor threaded rod
|
||||||
|
translate([0,-48,-20])
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
color([0.5,0.5,0.5]) rod(X_axis_sep+80);
|
color([0.5,0.5,0.5]) rod(X_axis_sep+80);
|
||||||
|
//X motor threaded rod
|
||||||
|
rotate([0,0,90])
|
||||||
|
color([0.5,0.5,0.5]) rod(X_axis_sep+80);
|
||||||
|
//X Upper smoth rod
|
||||||
translate([0,0,X_rod_sep_real])
|
translate([0,0,X_rod_sep_real])
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
rod(X_axis_sep+60);
|
rod(X_axis_sep+60);
|
||||||
}
|
}
|
||||||
|
//X Upper smoth rod
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
rod(X_axis_sep+60);/// WARNING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
rod(X_axis_sep+60);/// WARNING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
/// INCOHERENT X_axis_sep!!!!!!!!!!!
|
/// INCOHERENT X_axis_sep!!!!!!!!!!!
|
||||||
|
|
@ -224,11 +233,7 @@ module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
|
||||||
cube([X_axis_sep+70,Y_axis_sep+30,15],center=true);
|
cube([X_axis_sep+70,Y_axis_sep+30,15],center=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])cnc_assembled(Y_offset=30,X_offset=-50,Z_offset=10);
|
||||||
cnc_assembled(Y_offset=30,
|
|
||||||
X_offset=-50,
|
|
||||||
Z_offset=0);
|
|
||||||
|
|
||||||
//rotate([0,0,90]) // So the generated dxf matches
|
//rotate([0,0,90]) cnc_base_template(); // So the generated dxf matches inkscape's default orientation
|
||||||
// cnc_base_template();// inkscape's default orientation
|
|
||||||
// cnc_workbed_template();
|
// cnc_workbed_template();
|
||||||
|
|
|
||||||
|
|
@ -1,217 +0,0 @@
|
||||||
// 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();
|
|
||||||
|
|
@ -249,9 +249,10 @@ module X_carriage_print_plate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
X_carriage_assembled(show_printbed = 0,show_Xrods = 0,show_Zrods = 0);
|
X_carriage_assembled(show_printbed = 0,show_Xrods = 0,show_Zrods = 0);
|
||||||
//Debug only
|
|
||||||
//X_carriage_assembled(show_printbed = 0,show_Xrods = 0,show_Zrods = 0, Show_Nut_Cover = 1/*DEBUG only*/);
|
|
||||||
//X_carriage_print_plate();
|
|
||||||
|
|
||||||
//uncomment the line below to get the x nut cover
|
//uncomment the line below to get the x nut cover
|
||||||
//Show_Nut_Cover();
|
//Show_Nut_Cover();
|
||||||
|
|
||||||
|
//Debug only
|
||||||
|
//X_carriage_assembled(show_printbed = 0,show_Xrods = 0,show_Zrods = 0, Show_Nut_Cover = 1/*DEBUG only*/);
|
||||||
|
//X_carriage_print_plate();
|
||||||
|
|
@ -1,443 +0,0 @@
|
||||||
// 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();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,11 +1,20 @@
|
||||||
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
|
||||||
// Created by Carlosgs (http://carlosgs.es)
|
// Created by Carlosgs (http://carlosgs.es)
|
||||||
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
|
||||||
|
/*
|
||||||
|
* August 2013 changes to design top-part mounting screw at same side as bottom-part.
|
||||||
|
* also started introduced 2nd spindle diameter for a-symmetrical spindles. this is not working yet.
|
||||||
|
* by Harry Binnema.
|
||||||
|
*/
|
||||||
|
|
||||||
use <../libs/obiscad/bcube.scad>
|
use <../libs/obiscad/bcube.scad>
|
||||||
use <../libs/build_plate.scad>
|
use <../libs/build_plate.scad>
|
||||||
|
use <../libs/Write/Write.scad>
|
||||||
|
|
||||||
include <./lm8uu_holder.scad>
|
spindle_motor_diam_top = 26*2;
|
||||||
|
spindle_motor_diam = 26*2;
|
||||||
|
spindle_holder_thickness = 8;
|
||||||
|
spindle_holder_distance = 46;
|
||||||
|
|
||||||
bottom_thickness = 4;
|
bottom_thickness = 4;
|
||||||
base_width = 20;
|
base_width = 20;
|
||||||
|
|
@ -17,6 +26,8 @@ motor_length = 49; // not used
|
||||||
motor_screw_distance = 31.3;
|
motor_screw_distance = 31.3;
|
||||||
motor_center_diameter = 23;
|
motor_center_diameter = 23;
|
||||||
|
|
||||||
|
motor_adjust_margin = 3;
|
||||||
|
|
||||||
motor_screw_diameter = 3.7;
|
motor_screw_diameter = 3.7;
|
||||||
motor_screw_head_diameter = 8;
|
motor_screw_head_diameter = 8;
|
||||||
|
|
||||||
|
|
@ -25,7 +36,7 @@ M8_rod_diameter = 8.2;
|
||||||
|
|
||||||
axis_distance = 21;
|
axis_distance = 21;
|
||||||
|
|
||||||
wall_thickness = 5;
|
wall_thickness = 9;
|
||||||
wall_height = motor_width;
|
wall_height = motor_width;
|
||||||
wall_width = 54;
|
wall_width = 54;
|
||||||
|
|
||||||
|
|
@ -37,12 +48,13 @@ Z_threaded_pos = motor_width/2+axis_distance;
|
||||||
|
|
||||||
Z_smooth_rods_sep = 55;
|
Z_smooth_rods_sep = 55;
|
||||||
|
|
||||||
// Derived from Spindle mount for ShapeOko by Misan (http://www.thingiverse.com/thing:26740)
|
textHscale = 0.8;
|
||||||
module spindle_holder(length=50,showSpindle=true) {
|
textThickness = 1;
|
||||||
$fn=6;
|
|
||||||
translate([0,38,0]) rotate([0,0,180]) {
|
|
||||||
|
|
||||||
if(showSpindle) scale([1,1,-1]) translate([0,0,-length]) {
|
LM8UU_dia = 15.4;
|
||||||
|
|
||||||
|
module dummySpindle() {
|
||||||
|
translate([0,0,-length]) {
|
||||||
translate([0,0,85]) color([0.95,0.95,0.95]) cylinder(r=26,h=30,$fn=60);
|
translate([0,0,85]) color([0.95,0.95,0.95]) cylinder(r=26,h=30,$fn=60);
|
||||||
translate([0,0,80]) color([0.95,0.95,0.95]) cylinder(r=10/2,h=5,$fn=60);
|
translate([0,0,80]) color([0.95,0.95,0.95]) cylinder(r=10/2,h=5,$fn=60);
|
||||||
translate([0,0,-10]) color([0.6,0.6,0.6]) cylinder(r=26,h=90,$fn=60);
|
translate([0,0,-10]) color([0.6,0.6,0.6]) cylinder(r=26,h=90,$fn=60);
|
||||||
|
|
@ -50,82 +62,190 @@ module spindle_holder(length=50,showSpindle=true) {
|
||||||
translate([0,0,-50]) color([0.4,0.4,0.4]) cylinder(r=20/2,h=10,$fn=60);
|
translate([0,0,-50]) color([0.4,0.4,0.4]) cylinder(r=20/2,h=10,$fn=60);
|
||||||
translate([0,0,-50-20]) color([0.9,0.9,0.9]) cylinder(r1=1/2,r2=3/2,h=20,$fn=60);
|
translate([0,0,-50-20]) color([0.9,0.9,0.9]) cylinder(r1=1/2,r2=3/2,h=20,$fn=60);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
difference() {
|
// Derived from Spindle mount for ShapeOko by Misan (http://www.thingiverse.com/thing:26740)
|
||||||
union() {
|
module spindle_holder_holes(length,spindiam, basediam,top_part) {
|
||||||
cylinder(r=30,h=length,$fn=60);
|
$fn=6;
|
||||||
translate ([-30,0,0]) cube([60,38,length]);
|
|
||||||
translate([28,-7,0]) cube([20,20,length]);
|
translate([20,8,-0.05]) cylinder(r=basediam/2,h=length+2,$fn=60);
|
||||||
|
translate([-20,8,-0.05]) cylinder(r=basediam/2,h=length+2,$fn=60);
|
||||||
|
if (top_part){
|
||||||
|
translate([0,38,0]) rotate([0,0,0]) {
|
||||||
|
translate([0,0,-0.05]) cylinder(r=spindiam/2,h=length+2,$fn=60);
|
||||||
|
translate([0,-3,-0.01]) cube([90,3,length+2]);
|
||||||
|
translate ([spindiam/2+15,15,length/2]) rotate([90,0,0]) cylinder(r=2,h=30);
|
||||||
|
translate ([spindiam/2+15,-10.5,length/2]) rotate([90,0,0]) cylinder(r=3.5,h=4,$fn=6);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
translate([0,0,-0.05]) cylinder(r=26,h=length+2,$fn=60);
|
else
|
||||||
|
{
|
||||||
|
translate([0,38,0]) rotate([0,0,180]) {
|
||||||
|
translate([0,0,-0.05]) cylinder(r=spindiam/2,h=length+2,$fn=60);
|
||||||
translate([0,0,-0.01]) cube([90,3,length+2]);
|
translate([0,0,-0.01]) cube([90,3,length+2]);
|
||||||
|
translate ([spindiam/2+15,20,length/2]) rotate([90,0,0]) cylinder(r=2,h=30);
|
||||||
|
translate ([spindiam/2+15,15,length/2]) rotate([90,0,0]) cylinder(r=3.5,h=4,$fn=6);
|
||||||
translate ([40,20,3*length/4]) rotate([90,0,0]) cylinder(r=2,h=30);
|
|
||||||
translate ([40,20,length/4]) rotate([90,0,0]) cylinder(r=2,h=30);
|
|
||||||
|
|
||||||
translate ([40,14,3*length/4]) rotate([90,0,0]) cylinder(r=3.5,h=4,$fn=6);
|
|
||||||
translate ([40,14,length/4]) rotate([90,0,0]) cylinder(r=3.5,h=4,$fn=6);
|
|
||||||
|
|
||||||
difference() {
|
|
||||||
translate ([-30+15,0,-0.1]) cube([30,38.1,30]);
|
|
||||||
cylinder(r=26+1,h=length,$fn=60);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module motor_stand_no_base_Z(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]) {
|
module motorHolesZ() {
|
||||||
if(with_motor) {
|
|
||||||
// Hole for the motor shaft
|
// Hole for the motor shaft
|
||||||
translate([0,-wall_width/2,0])
|
hull() {
|
||||||
cube([20,wall_width,10*wall_thickness],cr=4,cres=10,center=true);
|
translate([0,motor_adjust_margin/2,0])
|
||||||
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hole for the screwdriver
|
||||||
|
translate([0,-wall_width/2,wall_thickness/2]) rotate([0,90,90]) bcube([2*(wall_thickness-5),5,wall_height],cr=1);
|
||||||
|
|
||||||
// Screws for holding the motor
|
// Screws for holding the motor
|
||||||
for(i=[-1,1]) for(j=[-1,1])
|
for(i=[-1,1]) for(j=[-1,1])
|
||||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
|
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,2.5-wall_thickness/2]) {
|
||||||
|
hull() {
|
||||||
|
translate([0,motor_adjust_margin/2,0])
|
||||||
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
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);
|
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
|
||||||
}
|
}
|
||||||
} // End if with motor
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module motor_stand_holes_Z() {
|
||||||
|
//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]) {
|
||||||
|
motorHolesZ();
|
||||||
|
|
||||||
// Bearing holes
|
// Bearing holes
|
||||||
rotate([0,0,0]) translate([0,axis_distance,0]) {
|
rotate([0,0,0]) translate([0,axis_distance,0]) {
|
||||||
|
hull() {
|
||||||
cylinder(r=(M8_rod_diameter*2)/2,h=10*wall_thickness,center=true,$fn=40);
|
cylinder(r=(M8_rod_diameter*2)/2,h=10*wall_thickness,center=true,$fn=40);
|
||||||
|
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);
|
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // End of translate relative to motor shaft
|
} // End of translate relative to motor shaft
|
||||||
} // End of difference
|
//} // End of difference
|
||||||
}
|
}
|
||||||
|
|
||||||
module motor_stand_Z(with_motor=true) {
|
|
||||||
union() {
|
module linearBearingHolderZ(h=10) {
|
||||||
motor_stand_no_base_Z(with_motor);
|
translate([0,0,1.5]) cylinder(r=LM8UU_dia/2,h=h,$fn=50);
|
||||||
|
cylinder(r=LM8UU_dia/2.5,h=10*h,center=true,$fn=50);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module Z_solid_body(top_part=true) {
|
||||||
|
hull() {
|
||||||
|
if(top_part)
|
||||||
|
translate([wall_height/2,wall_width/2,wall_thickness/2])
|
||||||
|
bcube([wall_height,wall_width,wall_thickness],cr=4,cres=10);
|
||||||
|
else
|
||||||
|
translate([wall_height/2,wall_width,wall_thickness/2])
|
||||||
|
bcube([wall_height,wall_width/2,wall_thickness],cr=4,cres=10);
|
||||||
|
translate([wall_height/2,wall_width-4,0])
|
||||||
|
translate([0,38,0])
|
||||||
|
cylinder(r=spindle_motor_diam/2+spindle_holder_thickness,h=wall_thickness,$fn=60);
|
||||||
|
}
|
||||||
|
|
||||||
|
// For the linear bearing holders
|
||||||
|
hull() {
|
||||||
|
translate([wall_height/2-Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
||||||
|
cylinder(r=3+LM8UU_dia/2,h=wall_thickness,$fn=50);
|
||||||
|
translate([wall_height/2+Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
||||||
|
cylinder(r=3+LM8UU_dia/2,h=wall_thickness,$fn=50);
|
||||||
|
}
|
||||||
|
|
||||||
|
// For the claw of the spindle holder
|
||||||
|
if(top_part){
|
||||||
|
translate([wall_height/2,wall_width-4,0])
|
||||||
|
translate([0,38,0]) {
|
||||||
|
rotate([0,0,0]) {
|
||||||
|
translate([spindle_motor_diam/2,-12.5,0]) cube([25,20,wall_thickness]);
|
||||||
|
|
||||||
|
// Write text in the front
|
||||||
|
color([0.5,0.5,0.5])
|
||||||
|
rotate([0,0,180]) scale([-1,1,-textHscale])
|
||||||
|
writecylinder("CYCLONE",[0,0,-wall_thickness/(2*textHscale)],spindle_motor_diam/2+spindle_holder_thickness,0,font="orbitron.dxf",space=1.1,h=wall_thickness,t=textThickness,center=true,ccw=true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
translate([wall_height/2,wall_width-4,0])
|
||||||
|
translate([0,38,0]) {
|
||||||
|
|
||||||
|
rotate([0,0,180]) {
|
||||||
|
translate([spindle_motor_diam/2,-7,0]) cube([25,20,wall_thickness]);
|
||||||
|
color([0.2,0.2,0.5])
|
||||||
|
scale([1,1,textHscale])
|
||||||
|
writecylinder("PCB Factory",[0,0,wall_thickness/(2*textHscale)+1],spindle_motor_diam/2+spindle_holder_thickness,0,font="orbitron.dxf",space=1.1,h=wall_thickness-2,t=textThickness,center=true,ccw=true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//for display only, doesn't contribute to final object
|
//for display only, doesn't contribute to final object
|
||||||
build_plate(3,200,200);
|
//build_plate(3,200,200);
|
||||||
|
|
||||||
module Z_carriage(showSpindle=false) {
|
module Z_carriage(showSpindle=false,top_part=true) {
|
||||||
|
|
||||||
|
difference() {
|
||||||
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0]) {
|
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0]) {
|
||||||
motor_stand_Z();
|
difference () {
|
||||||
translate([wall_height/2,wall_width-4,0]) spindle_holder(lbearing_holder_length,showSpindle);
|
Z_solid_body(top_part);
|
||||||
translate([wall_height/2-Z_smooth_rods_sep/2,Z_threaded_pos,lbearing_holder_length/2]) rotate([-90,0,0]) lm8uu_bearing_holder_XZ(lbearing_holder_length);
|
if(top_part) motor_stand_holes_Z();
|
||||||
translate([wall_height/2+Z_smooth_rods_sep/2,Z_threaded_pos,lbearing_holder_length/2]) rotate([-90,0,0]) lm8uu_bearing_holder_XZ(lbearing_holder_length);
|
translate([wall_height/2,wall_width-4,0])
|
||||||
|
spindle_holder_holes(wall_thickness,spindle_motor_diam,base_screw_diameter,top_part);
|
||||||
|
translate([wall_height/2-Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
||||||
|
linearBearingHolderZ(wall_thickness);
|
||||||
|
translate([wall_height/2+Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
||||||
|
linearBearingHolderZ(wall_thickness);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hole for the threaded rod
|
||||||
|
if(!top_part) {
|
||||||
|
hull() {
|
||||||
|
cylinder(r=2+M8_rod_diameter/2,h=wall_thickness*10,center=true,$fn=30);
|
||||||
|
translate([-15,0,0])
|
||||||
|
cylinder(r=2+M8_rod_diameter/2,h=wall_thickness*10,center=true,$fn=30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Truncation in the base for avoiding collision with the X axis
|
||||||
|
if(!top_part) translate([-15,0,0]) rotate([0,45,0]) cube([20,100,10],center=true);
|
||||||
|
}
|
||||||
|
if(showSpindle) rotate([0,0,-90]) translate([0,wall_width-4-Z_threaded_pos,0])
|
||||||
|
translate([0,38,-20+8]) dummySpindle();
|
||||||
}
|
}
|
||||||
|
|
||||||
Z_carriage(showSpindle=false);
|
module Z_carriage_assembled() {
|
||||||
|
Z_carriage(showSpindle=true,top_part=false);
|
||||||
|
translate([0,0,3+spindle_holder_distance]) rotate([180,0,0]) Z_carriage(showSpindle=false,top_part=true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Z_carriage(top_part=true);
|
||||||
|
//Z_carriage(top_part=false);
|
||||||
|
|
||||||
|
|
||||||
|
Z_carriage_assembled();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
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
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
use <../libs/build_plate.scad>
|
use <../libs/build_plate.scad>
|
||||||
use <../libs/MCAD/nuts_and_bolts.scad>
|
use <../libs/MCAD/nuts_and_bolts.scad>
|
||||||
fileNameLogo = "../libs/logo/cyclone_logoC.dxf";
|
fileNameLogo = "../libs/logo/cyclonelogoC.dxf";
|
||||||
|
|
||||||
M8_rod_diam = 8.2;
|
M8_rod_diam = 8.2;
|
||||||
M3_rod_diam = 3.2;
|
M3_rod_diam = 3.2;
|
||||||
|
|
@ -123,22 +123,24 @@ module show_printbed(){
|
||||||
translate([frame_width/2,frame_height/2,-frame_depth/2]) build_plate(3,150,140);
|
translate([frame_width/2,frame_height/2,-frame_depth/2]) build_plate(3,150,140);
|
||||||
}
|
}
|
||||||
|
|
||||||
module Y_rod_idler_left(logo){
|
module Y_rod_idler_leftX(logo){
|
||||||
translate([-25,0,0])
|
translate([-25,0,0])
|
||||||
Y_rod_idler(1, logo);
|
Y_rod_idler(1, logo);
|
||||||
}
|
}
|
||||||
|
|
||||||
module Y_rod_idler_right(logo){
|
module Y_rod_idler_rightX(logo){
|
||||||
translate([25,0,0])
|
translate([25,0,0])
|
||||||
Y_rod_idler(0, logo);
|
Y_rod_idler(0, logo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
Y_rod_idler_right(logo = 1);
|
//Y_rod_idler_rightX(logo = 1);
|
||||||
Y_rod_idler_left(logo = 1);
|
Y_rod_idler_leftX(logo = 1);
|
||||||
// Y_rod_idler_right(); // Without logo
|
// Y_rod_idler_right(); // Without logo
|
||||||
// Y_rod_idler_left(); // Without logo
|
// Y_rod_idler_right(); // Without logo
|
||||||
show_printbed();
|
//show_printbed();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,178 +0,0 @@
|
||||||
// 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();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -48,7 +48,7 @@ module motorHolesY() {
|
||||||
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Screws for holding the motor
|
// Screws to hold the motor
|
||||||
for(i=[-1,1]) for(j=[-1,1])
|
for(i=[-1,1]) for(j=[-1,1])
|
||||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
|
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
|
||||||
hull() {
|
hull() {
|
||||||
|
|
@ -83,12 +83,12 @@ difference() {
|
||||||
|
|
||||||
// Bearing holes
|
// Bearing holes
|
||||||
rotate([0,0,15]) translate([0,axis_distance,0]) {
|
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=(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);
|
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Threaded rods
|
//Threaded rod for added stability
|
||||||
#translate([0,-64,0])rotate([0,0,15]) translate([0,axis_distance,0]) {
|
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);
|
cylinder(r=(M8_rod_diameter)/2,h=100*wall_thickness,center=true,$fn=40);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,18 +143,23 @@ module motor_stand(with_motor=true) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module idle_stand(){
|
||||||
|
mirror([1,0,0])
|
||||||
|
motor_stand();
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
//original module
|
||||||
|
// 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(){
|
module motor_stand_front(){
|
||||||
motor_stand();
|
motor_stand();
|
||||||
|
|
@ -172,6 +177,9 @@ module motor_stand_back(){
|
||||||
|
|
||||||
|
|
||||||
motor_stand_front();
|
motor_stand_front();
|
||||||
|
/*I am currently testing having two
|
||||||
|
of this modules to hold the threaded rod
|
||||||
|
on the Y axis.*/
|
||||||
//motor_stand_back();
|
//motor_stand_back();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,178 +0,0 @@
|
||||||
// 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,178 +0,0 @@
|
||||||
// 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
|
|
@ -1,211 +0,0 @@
|
||||||
// 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);
|
|
||||||
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
use <../libs/obiscad/bcube.scad>
|
use <../libs/obiscad/bcube.scad>
|
||||||
use <../libs/obiscad/bevel.scad>
|
use <../libs/obiscad/bevel.scad>
|
||||||
use <../libs/build_plate.scad>
|
use <../libs/build_plate.scad>
|
||||||
use <hex_structure.scad>
|
use <../libs/hex_structure.scad>
|
||||||
|
|
||||||
module frame(with_motor = 1, show_printbed = 0) {
|
module frame(with_motor = 1, show_printbed = 0) {
|
||||||
|
|
||||||
|
|
@ -133,7 +133,7 @@ difference() {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#translate([0,58,0])
|
translate([0,58,0])
|
||||||
cube([100,100,100],center=true);
|
cube([100,100,100],center=true);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -193,10 +193,10 @@ difference() {
|
||||||
} // End of difference() command
|
} // End of difference() command
|
||||||
|
|
||||||
|
|
||||||
// --------- Support column for the triangular structure --------- //
|
// --------- Support middle column for the structure --------- //
|
||||||
translate([frame_width/2-3,115,frame_thickness/2])
|
translate([frame_width/2-3,115,frame_thickness/2])
|
||||||
//rotate([0,0,-23])
|
//rotate([0,0,-23])
|
||||||
#cube([wall_thickness,38,frame_thickness],center=true);
|
cube([wall_thickness,38,frame_thickness],center=true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -238,11 +238,11 @@ translate([frame_width-frame_thickness/2,frame_height,frame_thickness-0.5])
|
||||||
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
|
||||||
/********holes in the base****/
|
/********holes in the base****/
|
||||||
translate([-base_screw_distance+5,26/2,0])
|
translate([-base_screw_distance+5,26/2,0])
|
||||||
#cylinder(r=20/2,h=frame_thickness*2,center=true,$fn=6);
|
cylinder(r=20/2,h=frame_thickness*2,center=true,$fn=6);
|
||||||
translate([-base_screw_distance+30,26/2,0])
|
translate([-base_screw_distance+30,26/2,0])
|
||||||
#cylinder(r=15/2,h=frame_thickness*2,center=true,$fn=6);
|
cylinder(r=15/2,h=frame_thickness*2,center=true,$fn=6);
|
||||||
translate([-base_screw_distance+55,26/2,0])
|
translate([-base_screw_distance+55,26/2,0])
|
||||||
#cylinder(r=20/2,h=frame_thickness*2,center=true,$fn=6);
|
cylinder(r=20/2,h=frame_thickness*2,center=true,$fn=6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -275,6 +275,9 @@ translate([frame_width-frame_thickness/2,frame_height,frame_thickness-2])
|
||||||
|
|
||||||
|
|
||||||
// Toggle parameters and mirror to create the other side part
|
// 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);
|
frame(with_motor = 1, show_printbed = 1);
|
||||||
|
//frame without motor
|
||||||
|
*scale([-1,1,1])
|
||||||
|
frame(with_motor = 0, show_printbed = 1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
//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);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
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