commit
4409c668dc
|
@ -11,6 +11,8 @@ 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.scad>
|
||||||
use <../XZ_axis/Z_carriage.scad>
|
use <../XZ_axis/Z_carriage.scad>
|
||||||
|
use <../libs/rod.scad>
|
||||||
|
use <../libs/PCB_Machining_Vise/PCB_vise_1_Part1.scad>
|
||||||
|
|
||||||
X_axis_sep = 210;
|
X_axis_sep = 210;
|
||||||
Y_axis_sep = 210;
|
Y_axis_sep = 210;
|
||||||
|
@ -38,6 +40,8 @@ X_Final_Smooth_Rod_Length = X_axis_sep+46;
|
||||||
Y_Final_Threaded_Rod_Length = Y_threaded_rod_length+38;
|
Y_Final_Threaded_Rod_Length = Y_threaded_rod_length+38;
|
||||||
Y_Final_Smooth_Rod_Length = Y_axis_sep+8;
|
Y_Final_Smooth_Rod_Length = Y_axis_sep+8;
|
||||||
Y_threaded_rod_offset = 8;
|
Y_threaded_rod_offset = 8;
|
||||||
|
Z_Final_Threaded_Rod_Length = 120;
|
||||||
|
Z_Final_Smooth_Rod_Length = 140;
|
||||||
|
|
||||||
X_Wood_Base = X_axis_sep+100;
|
X_Wood_Base = X_axis_sep+100;
|
||||||
Y_Wood_Base = Y_axis_sep+30;
|
Y_Wood_Base = Y_axis_sep+30;
|
||||||
|
@ -50,9 +54,9 @@ Z_PCB_BOARD = 1.5;
|
||||||
//Travel (164 x 101 x 25)
|
//Travel (164 x 101 x 25)
|
||||||
X_Travel = 0; //0~164
|
X_Travel = 0; //0~164
|
||||||
Y_Travel = 0; //0~101
|
Y_Travel = 0; //0~101
|
||||||
Z_Travel = 0; //0~25
|
Z_Travel = 30; //0~30
|
||||||
|
|
||||||
//To display steppers, bearings, washers, nuts, screws, micro switchs, etc.
|
//To display steppers, bearings, washers, nuts, bolts, micro-switches, etc.
|
||||||
Display_Extra_Parts = true;
|
Display_Extra_Parts = true;
|
||||||
|
|
||||||
//To enable exploded drawing view
|
//To enable exploded drawing view
|
||||||
|
@ -60,6 +64,9 @@ Exploded_Drawing = false;
|
||||||
|
|
||||||
X_rod_sep_real = X_smooth_rods_sep_projected+smooth_rod_margin;
|
X_rod_sep_real = X_smooth_rods_sep_projected+smooth_rod_margin;
|
||||||
|
|
||||||
|
if(Display_Extra_Parts) //Non-Plastic Parts Header
|
||||||
|
echo("Non-Plastic Parts, Quantity, Part");
|
||||||
|
|
||||||
module frame_right(with_extra_parts = false, exploded=false) {
|
module frame_right(with_extra_parts = false, exploded=false) {
|
||||||
if(with_extra_parts)
|
if(with_extra_parts)
|
||||||
rotate([0,0,90]) scale([-1,1,1]) translate([-85,-23,135]) rotate([-90,0,0]) frame(with_motor = 0, with_extra_parts=with_extra_parts, exploded=exploded);
|
rotate([0,0,90]) scale([-1,1,1]) translate([-85,-23,135]) rotate([-90,0,0]) frame(with_motor = 0, with_extra_parts=with_extra_parts, exploded=exploded);
|
||||||
|
@ -114,8 +121,11 @@ module linear_bearing_holder() {
|
||||||
}
|
}
|
||||||
|
|
||||||
module Y_nut_holder() {
|
module Y_nut_holder() {
|
||||||
color([0.5,0.5,0])
|
if(Display_Extra_Parts)
|
||||||
nut_holder_positioned();
|
nut_holder_positioned(with_extra_parts=Display_Extra_Parts, exploded=Exploded_Drawing);
|
||||||
|
else
|
||||||
|
color([0.5,0.5,0])
|
||||||
|
nut_holder_positioned();
|
||||||
}
|
}
|
||||||
|
|
||||||
module cnc_workbed() {
|
module cnc_workbed() {
|
||||||
|
@ -128,10 +138,17 @@ module cnc_workbed() {
|
||||||
cube([workbed_X,workbed_Y,workbed_thickness],center=true);
|
cube([workbed_X,workbed_Y,workbed_thickness],center=true);
|
||||||
cube([workbed_X-1,workbed_Y-1,workbed_thickness+1],center=true);
|
cube([workbed_X-1,workbed_Y-1,workbed_thickness+1],center=true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Display_Extra_Parts) {
|
||||||
|
translate([-28-X_PCB_BOARD/2,8+Y_PCB_BOARD/2,-(workbed_thickness)/2])
|
||||||
|
rotate([180,0,0]) PCB_vise_1(with_extra_parts=true, exploded=Exploded_Drawing);
|
||||||
|
translate([28+X_PCB_BOARD/2,-8-Y_PCB_BOARD/2,-(workbed_thickness)/2])
|
||||||
|
rotate([180,0,180]) PCB_vise_1(with_extra_parts=true, exploded=Exploded_Drawing);
|
||||||
// --- PCB Board ---
|
// --- PCB Board ---
|
||||||
translate([0,0,-(workbed_thickness+Z_PCB_BOARD)/2])
|
echo("Non-Plastic Parts, 1, Double sided PCB ", X_PCB_BOARD, " x ", Y_PCB_BOARD, " x ", Z_PCB_BOARD);
|
||||||
cube([X_PCB_BOARD,Y_PCB_BOARD,Z_PCB_BOARD],center=true);
|
translate([0,0,-(workbed_thickness)/2-15])
|
||||||
|
color([0.72,0.45,0.20]) cube([X_PCB_BOARD,Y_PCB_BOARD,Z_PCB_BOARD],center=true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,13 +172,13 @@ module cnc_workbed() {
|
||||||
module X_carriage() {
|
module X_carriage() {
|
||||||
translate([0,X_rod_sep_real/2,0])
|
translate([0,X_rod_sep_real/2,0])
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 1);
|
X_carriage_assembled(show_printbed = 0, show_Xrods = 0, z_smooth_rods_len = Z_Final_Smooth_Rod_Length, with_extra_parts=Display_Extra_Parts, exploded=Exploded_Drawing);
|
||||||
}
|
}
|
||||||
|
|
||||||
module Z_carriage_piece() {
|
module Z_carriage_piece() {
|
||||||
translate([0,0,33+Z_Travel])
|
translate([0,0,33+Z_Travel])
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
Z_carriage_assembled(with_extra_parts=Display_Extra_Parts, exploded=Exploded_Drawing);
|
Z_carriage_assembled(z_thread_rod_length=Z_Final_Threaded_Rod_Length, with_extra_parts=Display_Extra_Parts, exploded=Exploded_Drawing);
|
||||||
}
|
}
|
||||||
|
|
||||||
module cnc(show_printbed = 1) {
|
module cnc(show_printbed = 1) {
|
||||||
|
@ -226,13 +243,6 @@ module cnc_workbed_template() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
|
module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
|
||||||
translate([-X_axis_sep/2,-Y_axis_sep/2])
|
translate([-X_axis_sep/2,-Y_axis_sep/2])
|
||||||
cnc();
|
cnc();
|
||||||
|
@ -244,7 +254,7 @@ module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
|
||||||
|
|
||||||
// --- Y threaded rod ---
|
// --- Y threaded rod ---
|
||||||
translate([0,6+Y_threaded_rod_offset/2,Y_threaded_rod_height-Y_rod_height])
|
translate([0,6+Y_threaded_rod_offset/2,Y_threaded_rod_height-Y_rod_height])
|
||||||
color([0.5,0.5,0.5]) rod(Y_Final_Threaded_Rod_Length);
|
rod(Y_Final_Threaded_Rod_Length, threaded=true);
|
||||||
|
|
||||||
// --- Y smooth rods ---
|
// --- Y smooth rods ---
|
||||||
translate([X_axis_sep/2,0,0])
|
translate([X_axis_sep/2,0,0])
|
||||||
|
@ -262,7 +272,7 @@ module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
|
||||||
Z_carriage_piece();
|
Z_carriage_piece();
|
||||||
}
|
}
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
color([0.5,0.5,0.5]) translate([0,6,0]) rod(X_Final_Threaded_Rod_Length);
|
translate([0,6,0]) rod(X_Final_Threaded_Rod_Length, threaded=true);
|
||||||
translate([0,0,X_rod_sep_real])
|
translate([0,0,X_rod_sep_real])
|
||||||
rotate([0,0,90])
|
rotate([0,0,90])
|
||||||
rod(X_Final_Smooth_Rod_Length);
|
rod(X_Final_Smooth_Rod_Length);
|
||||||
|
@ -283,9 +293,11 @@ rotate([0,0,90])cnc_assembled(Y_offset=30,X_offset=-50,Z_offset=10);
|
||||||
//rotate([0,0,90]) cnc_base_template(); // So the generated dxf matches inkscape's default orientation
|
//rotate([0,0,90]) cnc_base_template(); // So the generated dxf matches inkscape's default orientation
|
||||||
// cnc_workbed_template();
|
// cnc_workbed_template();
|
||||||
|
|
||||||
echo("Wood base = ", X_Wood_Base, " x ", Y_Wood_Base, " x ", Z_Wood_Base);
|
echo("Non-Plastic Parts, 1, Machine Base ", X_Wood_Base, " x ", Y_Wood_Base, " x ", Z_Wood_Base);
|
||||||
echo("Work bed = ", workbed_X, " x ", workbed_Y, " x ", workbed_thickness);
|
echo("Non-Plastic Parts, 1, Work Bed ", workbed_X, " x ",workbed_Y, " x ", workbed_thickness);
|
||||||
echo("X smooth rod length = ", X_Final_Smooth_Rod_Length);
|
echo("Non-Plastic Parts, 2, Smooth Rod for X axis, M8 x ", X_Final_Smooth_Rod_Length);
|
||||||
echo("X threaded rod length = ", X_Final_Threaded_Rod_Length);
|
echo("Non-Plastic Parts, 1, Threaded Rod for X axis, M8 x ", X_Final_Threaded_Rod_Length);
|
||||||
echo("Y smooth rod length = ", Y_Final_Smooth_Rod_Length);
|
echo("Non-Plastic Parts, 2, Smooth Rod for Y axis, M8 x ", Y_Final_Smooth_Rod_Length);
|
||||||
echo("Y threaded rod length = ", Y_Final_Threaded_Rod_Length);
|
echo("Non-Plastic Parts, 1, Threaded Rod for Y axis, M8 x ", Y_Final_Threaded_Rod_Length);
|
||||||
|
echo("Non-Plastic Parts, 2, Smooth Rod for Z axis, M8 x ", Z_Final_Smooth_Rod_Length);
|
||||||
|
echo("Non-Plastic Parts, 1, Threaded Rod for Z axis, M8 x ", Z_Final_Threaded_Rod_Length);
|
||||||
|
|
|
@ -125,7 +125,7 @@ union() difference() {
|
||||||
cyclone_motor_gear_extras(exploded_distance=(exploded?20:0));
|
cyclone_motor_gear_extras(exploded_distance=(exploded?20:0));
|
||||||
|
|
||||||
module cyclone_motor_gear_extras(exploded_distance=0) {
|
module cyclone_motor_gear_extras(exploded_distance=0) {
|
||||||
echo("Non-Plastic Parts: 1 x Grub screw M3 x 8 mm to attach gear to motor shaft");
|
echo("Non-Plastic Parts, 1, Grub Screw M3 x 8 mm to attach gear to motor shaft");
|
||||||
translate([0,2.5+8+exploded_distance,12-3.5])
|
translate([0,2.5+8+exploded_distance,12-3.5])
|
||||||
rotate([90, 0, 0])
|
rotate([90, 0, 0])
|
||||||
color(Steel) cylinder(r=1.5, h=8, $fn=30);
|
color(Steel) cylinder(r=1.5, h=8, $fn=30);
|
||||||
|
|
|
@ -104,7 +104,7 @@ difference() {
|
||||||
cyclone_rod_gear_extras(exploded_distance=(exploded?12:0));
|
cyclone_rod_gear_extras(exploded_distance=(exploded?12:0));
|
||||||
|
|
||||||
module cyclone_rod_gear_extras(exploded_distance=0) {
|
module cyclone_rod_gear_extras(exploded_distance=0) {
|
||||||
echo("Non-Plastic Parts: 2 x M8 nuts to attach rod_gear on threaded rod");
|
echo("Non-Plastic Parts, 2, Nut M8 to attach rod_gear on threaded rod");
|
||||||
translate([0,0,-10/2-0.8*8-1.0*exploded_distance]) color(Steel) flat_nut(8);
|
translate([0,0,-10/2-0.8*8-1.0*exploded_distance]) color(Steel) flat_nut(8);
|
||||||
translate([0,0,nut_separation/2+0.8*8+1.0*exploded_distance]) rotate([180,0,0]) color(Steel) flat_nut(8);
|
translate([0,0,nut_separation/2+0.8*8+1.0*exploded_distance]) rotate([180,0,0]) color(Steel) flat_nut(8);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,13 @@
|
||||||
// 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/)
|
||||||
|
|
||||||
|
include <MCAD/metric_fastners.scad>
|
||||||
|
include <MCAD/materials.scad>
|
||||||
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 <../libs/teardrop.scad>
|
use <../libs/teardrop.scad>
|
||||||
|
use <../libs/rod.scad>
|
||||||
|
|
||||||
include <./lm8uu_holder.scad>
|
include <./lm8uu_holder.scad>
|
||||||
|
|
||||||
|
@ -40,15 +43,9 @@ lbearing_length = 24;
|
||||||
Z_smooth_rods_sep = 55;
|
Z_smooth_rods_sep = 55;
|
||||||
Z_smooth_rods_len = 140;
|
Z_smooth_rods_len = 140;
|
||||||
|
|
||||||
Z_threaded_rod_len = 120;
|
|
||||||
|
|
||||||
lbearing_holder_length = Z_smooth_rods_sep+M8_rod_diam+5;
|
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) {
|
module rodHole(len=100,radius=M8_rod_hole_diam/2, truncateMM=1) {
|
||||||
color([0.8,0.8,0.8])
|
color([0.8,0.8,0.8])
|
||||||
|
@ -80,7 +77,7 @@ module X_nut_holder() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module X_nut_holder_cover() {
|
module X_nut_holder_cover(with_extra_parts=false, exploded=false) {
|
||||||
X_nut_screw_diam = X_nut_screw_diam*1.2;
|
X_nut_screw_diam = X_nut_screw_diam*1.2;
|
||||||
scale([1,1,-1]) rotate([-90,0,0])
|
scale([1,1,-1]) rotate([-90,0,0])
|
||||||
difference() {
|
difference() {
|
||||||
|
@ -107,6 +104,17 @@ module X_nut_holder_cover() {
|
||||||
rotate([90,0,0])
|
rotate([90,0,0])
|
||||||
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
|
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(with_extra_parts)
|
||||||
|
X_nut_holder_cover_extras(exploded_distance=(exploded?16:0));
|
||||||
|
|
||||||
|
module X_nut_holder_cover_extras(exploded_distance=0) {
|
||||||
|
screw_size = 2.2;
|
||||||
|
screw_length = 16;
|
||||||
|
echo("Non-Plastic Parts, 1, Self Tapping Screw 2.2 x 16 mm for X_nut_holder_cover");
|
||||||
|
scale([1,1,-1]) rotate([-90,0,0]) translate([-4,-3/2-0.2-exploded_distance,10]) rotate([-90,0,0]) color(Steel)
|
||||||
|
csk_bolt(screw_size, screw_length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module X_carriage(show_printbed = 0, show_support = 0) {
|
module X_carriage(show_printbed = 0, show_support = 0) {
|
||||||
|
@ -173,16 +181,38 @@ module X_carriage(show_printbed = 0, show_support = 0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
} // End of difference
|
} // End of difference
|
||||||
|
|
||||||
|
if(with_extra_parts)
|
||||||
|
X_carriage_extras(exploded=false);
|
||||||
|
|
||||||
|
module X_carriage_extras(exploded_distance=(exploded?8:0)) {
|
||||||
|
color(Steel) {
|
||||||
|
echo("Non-Plastic Parts, 2, Nut M8 for X_carriage");
|
||||||
|
translate([-X_rod_sep_real/2,-lbearing_holder_length/2+X_axis_nut_support_thickness/2,0])
|
||||||
|
rotate([-90,0,0]) translate([0,0,0.8*8+1.5+exploded_distance])
|
||||||
|
rotate([0,180,15])
|
||||||
|
flat_nut(8);
|
||||||
|
|
||||||
|
translate([0,0,40-M8_nut_height_Z+exploded_distance])
|
||||||
|
translate([0,0,0.8*8]) rotate([0,180,0])
|
||||||
|
flat_nut(8);
|
||||||
|
}
|
||||||
|
|
||||||
|
translate([-X_rod_sep_real/2,-lbearing_holder_length/2+X_axis_nut_support_thickness/2,0])
|
||||||
|
rotate([-90,0,0]) translate([0,0,0.8*8+2.0+2*exploded_distance])
|
||||||
|
rotate([0,180,-90-45])
|
||||||
|
X_nut_holder_cover(with_extra_parts=true, exploded=(exploded_distance!=0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
module X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 0) {
|
module X_carriage_assembled(show_printbed = 0, show_Xrods = 0, z_smooth_rods_len = 0, with_extra_parts=false, exploded=false) {
|
||||||
X_carriage(show_printbed);
|
X_carriage(show_printbed, with_extra_parts=with_extra_parts, exploded=exploded);
|
||||||
|
|
||||||
if(show_Xrods){
|
if(show_Xrods){
|
||||||
// ---- Rods (for reference) ----
|
// ---- Rods (for reference) ----
|
||||||
translate([-X_rod_sep_real/2,0,0]) {
|
translate([-X_rod_sep_real/2,0,0]) {
|
||||||
color([0.5,0.5,0.5]) rod(len=100);
|
rod(len=100, threaded=true);
|
||||||
}
|
}
|
||||||
translate([-X_rod_sep_real/2,0,X_rod_sep_real]) {
|
translate([-X_rod_sep_real/2,0,X_rod_sep_real]) {
|
||||||
rod(len=100);
|
rod(len=100);
|
||||||
|
@ -191,15 +221,13 @@ module X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 0) {
|
||||||
rod(len=100);
|
rod(len=100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(show_Zrods)
|
if(z_smooth_rods_len)
|
||||||
translate([0,0,0])
|
translate([0,0,0])
|
||||||
rotate([90,0,0]) {
|
rotate([90,0,0]) {
|
||||||
translate([0,Z_threaded_rod_len/2-10,0])
|
translate([0,z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
|
||||||
color([0.5,0.5,0.5]) rod(len=Z_threaded_rod_len);
|
rod(len=z_smooth_rods_len);
|
||||||
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
|
translate([0,z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
|
||||||
rod(len=Z_smooth_rods_len);
|
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,7 +239,7 @@ module X_carriage_print_plate() {
|
||||||
X_carriage(show_printbed = 0, show_support = 1);
|
X_carriage(show_printbed = 0, show_support = 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//X_carriage_assembled(show_printbed = 1,show_Xrods = 1,show_Zrods = 1);
|
//X_carriage_assembled(show_printbed = 1,show_Xrods = 1,z_smooth_rods_len = Z_smooth_rods_len);
|
||||||
X_carriage_print_plate();
|
X_carriage_print_plate();
|
||||||
|
|
||||||
//translate([0,20,0]) X_nut_holder_cover();
|
//translate([0,20,0]) X_nut_holder_cover();
|
||||||
|
|
|
@ -16,6 +16,7 @@ use <../libs/obiscad/bcube.scad>
|
||||||
use <../libs/build_plate.scad>
|
use <../libs/build_plate.scad>
|
||||||
use <../libs/Write/Write.scad>
|
use <../libs/Write/Write.scad>
|
||||||
use <../libs/linear_bearing.scad>
|
use <../libs/linear_bearing.scad>
|
||||||
|
use <../libs/rod.scad>
|
||||||
use <motor_gear.scad>
|
use <motor_gear.scad>
|
||||||
use <rod_gear.scad>
|
use <rod_gear.scad>
|
||||||
|
|
||||||
|
@ -84,7 +85,7 @@ Cyclone_Nema17 = [
|
||||||
[NemaAxleFlatLengthBack, 14*mm]
|
[NemaAxleFlatLengthBack, 14*mm]
|
||||||
];
|
];
|
||||||
|
|
||||||
module dummySpindle() {
|
module dummySpindle(length=0) {
|
||||||
translate([0,0,-length]) {
|
translate([0,0,-length]) {
|
||||||
translate([0,0,spindle_motor_length-5]) color([0.95,0.95,0.95]) cylinder(r=26,h=30,$fn=60);
|
translate([0,0,spindle_motor_length-5]) color([0.95,0.95,0.95]) cylinder(r=26,h=30,$fn=60);
|
||||||
translate([0,0,spindle_motor_length-10]) color([0.95,0.95,0.95]) cylinder(r=10/2,h=5,$fn=60);
|
translate([0,0,spindle_motor_length-10]) color([0.95,0.95,0.95]) cylinder(r=10/2,h=5,$fn=60);
|
||||||
|
@ -272,12 +273,12 @@ module Z_carriage(showSpindle=false,top_part=true, with_extra_parts=false, explo
|
||||||
|
|
||||||
module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
||||||
if(top_part) {
|
if(top_part) {
|
||||||
echo("Non-Plastic Parts: 1 x Nema 17 for Z axis");
|
echo("Non-Plastic Parts, 1, Nema 17 for Z axis");
|
||||||
translate([-motor_width/2,0,1-exploded_distance])
|
translate([-motor_width/2,0,1-exploded_distance])
|
||||||
rotate([0,180,0])
|
rotate([0,180,0])
|
||||||
motor(Cyclone_Nema17, NemaLengthLong);
|
motor(Cyclone_Nema17, NemaLengthLong);
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 4 x Bolt M3 x 6 mm for Z motor");
|
echo("Non-Plastic Parts, 4, Bolt M3 x 6 mm for Z motor");
|
||||||
for(i=[-1,1]) for(j=[-1,1])
|
for(i=[-1,1]) for(j=[-1,1])
|
||||||
translate([-motor_width/2,0,0])
|
translate([-motor_width/2,0,0])
|
||||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,2.5+exploded_distance*0.7]) {
|
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,2.5+exploded_distance*0.7]) {
|
||||||
|
@ -288,7 +289,7 @@ module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
||||||
rotate([0,0,-90])
|
rotate([0,0,-90])
|
||||||
cyclone_motor_z_gear(with_extra_parts=true, exploded=(exploded_distance!=0));
|
cyclone_motor_z_gear(with_extra_parts=true, exploded=(exploded_distance!=0));
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x 608 bearing for Z motor");
|
echo("Non-Plastic Parts, 1, Bearing 608 for Z motor");
|
||||||
translate([0,0,wall_thickness/2])
|
translate([0,0,wall_thickness/2])
|
||||||
bearing(model=608);
|
bearing(model=608);
|
||||||
|
|
||||||
|
@ -296,7 +297,7 @@ module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
||||||
rotate([180,0,11])
|
rotate([180,0,11])
|
||||||
cyclone_rod_z_gear(with_extra_parts=true, exploded=(exploded_distance!=0));
|
cyclone_rod_z_gear(with_extra_parts=true, exploded=(exploded_distance!=0));
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 2 x Bolt M5 x 55 mm to attach Z_carriage top and bottom");
|
echo("Non-Plastic Parts, 2, Bolt M5 x 55 mm to attach Z_carriage top and bottom");
|
||||||
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0])
|
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0])
|
||||||
translate([wall_height/2,wall_width-4,0]) color(Steel) {
|
translate([wall_height/2,wall_width-4,0]) color(Steel) {
|
||||||
translate([20,8,-0.05-2.5*exploded_distance])
|
translate([20,8,-0.05-2.5*exploded_distance])
|
||||||
|
@ -307,9 +308,9 @@ module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
echo("Non-Plastic Parts: 1 x Spindle");
|
echo("Non-Plastic Parts, 1, Spindle");
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 2 x M5 nut to attach Z_carriage top and bottom");
|
echo("Non-Plastic Parts, 2, Nut M5 to attach Z_carriage top and bottom");
|
||||||
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0])
|
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0])
|
||||||
translate([wall_height/2,wall_width-4,0]) color(Steel) {
|
translate([wall_height/2,wall_width-4,0]) color(Steel) {
|
||||||
translate([20,8,-0.8*5-0.5*exploded_distance])
|
translate([20,8,-0.8*5-0.5*exploded_distance])
|
||||||
|
@ -320,9 +321,9 @@ module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(top_part)
|
if(top_part)
|
||||||
echo("Non-Plastic Parts: 2 x LM8UU for Z_carriage top part");
|
echo("Non-Plastic Parts, 2, Linear Bearing LM8UU for Z_carriage top part");
|
||||||
else
|
else
|
||||||
echo("Non-Plastic Parts: 2 x LM8UU for Z_carriage bottom part");
|
echo("Non-Plastic Parts, 2, Linear Bearing LM8UU for Z_carriage bottom part");
|
||||||
rotate([0,0,-90])
|
rotate([0,0,-90])
|
||||||
translate([-wall_height/2,-Z_threaded_pos,0]) {
|
translate([-wall_height/2,-Z_threaded_pos,0]) {
|
||||||
translate([wall_height/2-Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
translate([wall_height/2-Z_smooth_rods_sep/2,Z_threaded_pos,0])
|
||||||
|
@ -334,12 +335,12 @@ module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(top_part) {
|
if(top_part) {
|
||||||
echo("Non-Plastic Parts: 1 x M3 x 20 mm for Z_carriage part");
|
echo("Non-Plastic Parts, 1, Bolt M3 x 20 mm for Z_carriage part");
|
||||||
echo("Non-Plastic Parts: 1 x M3 nut for Z_carriage top part");
|
echo("Non-Plastic Parts, 1, Nut M3 for Z_carriage top part");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
echo("Non-Plastic Parts: 1 x M3 x 20 mm for Z_carriage bottom part");
|
echo("Non-Plastic Parts, 1, Bolt M3 x 20 mm for Z_carriage bottom part");
|
||||||
echo("Non-Plastic Parts: 1 x M3 nut for Z_carriage bottom part");
|
echo("Non-Plastic Parts, 1, Nut M3 for Z_carriage bottom part");
|
||||||
}
|
}
|
||||||
rotate([0,top_part ? 0:180,-90]) translate([-wall_height/2,0,0])
|
rotate([0,top_part ? 0:180,-90]) translate([-wall_height/2,0,0])
|
||||||
translate([wall_height/2,wall_width+(top_part?-1:-1.5),0]) {
|
translate([wall_height/2,wall_width+(top_part?-1:-1.5),0]) {
|
||||||
|
@ -350,10 +351,14 @@ module Z_carriage_extras(top_part=true, exploded_distance=0) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module Z_carriage_assembled(with_extra_parts=false, exploded=false) {
|
module Z_carriage_assembled(z_thread_rod_length=120, with_extra_parts=false, exploded=false) {
|
||||||
Z_carriage(showSpindle=true,top_part=false,with_extra_parts=with_extra_parts, exploded=exploded);
|
Z_carriage(showSpindle=true,top_part=false,with_extra_parts=with_extra_parts, exploded=exploded);
|
||||||
translate([0,0,spindle_holder_distance]) rotate([180,0,0]) Z_carriage(showSpindle=false,top_part=true,
|
translate([0,0,spindle_holder_distance]) rotate([180,0,0]) Z_carriage(showSpindle=false,top_part=true,
|
||||||
with_extra_parts=with_extra_parts, exploded=exploded);
|
with_extra_parts=with_extra_parts, exploded=exploded);
|
||||||
|
|
||||||
|
if(z_thread_rod_length)
|
||||||
|
translate([0,0,-z_thread_rod_length/2+spindle_holder_distance]) rotate([90,0,0])
|
||||||
|
rod(len=z_thread_rod_length, threaded=true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ rotate([180,0,0]) union() difference() {
|
||||||
cyclone_motor_z_gear_extras(exploded_distance = (exploded?24:0));
|
cyclone_motor_z_gear_extras(exploded_distance = (exploded?24:0));
|
||||||
|
|
||||||
module cyclone_motor_z_gear_extras(exploded_distance=0) {
|
module cyclone_motor_z_gear_extras(exploded_distance=0) {
|
||||||
echo("Non-Plastic Parts: 1 x Grub screw M3 x 8 mm to attach Z motor gear to motor shaft");
|
echo("Non-Plastic Parts, 1, Grub Screw M3 x 8 mm to attach Z motor gear to motor shaft");
|
||||||
translate([0,-2.5-exploded_distance,-(12-3.5)]) rotate([90, 0, 0]) color(Steel) cylinder(r=1.5, h=8, $fn=30);
|
translate([0,-2.5-exploded_distance,-(12-3.5)]) rotate([90, 0, 0]) color(Steel) cylinder(r=1.5, h=8, $fn=30);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ difference() {
|
||||||
cyclone_rod_z_gear_extras(exploded_distance = (exploded ?8:0));
|
cyclone_rod_z_gear_extras(exploded_distance = (exploded ?8:0));
|
||||||
|
|
||||||
module cyclone_rod_z_gear_extras(exploded_distance=false) {
|
module cyclone_rod_z_gear_extras(exploded_distance=false) {
|
||||||
echo("Non-Plastic Parts: 2 x M8 nut for rod_gear");
|
echo("Non-Plastic Parts, 2, Nut M8 for rod_gear");
|
||||||
translate([0,0,0.8*8+nut_separation/2+exploded_distance]) rotate([180,0,0]) color(Steel) flat_nut(8);
|
translate([0,0,0.8*8+nut_separation/2+exploded_distance]) rotate([180,0,0]) color(Steel) flat_nut(8);
|
||||||
translate([0,0,-0.8*8-10/2-exploded_distance]) rotate([0,0,0]) color(Steel) flat_nut(8);
|
translate([0,0,-0.8*8-10/2-exploded_distance]) rotate([0,0,0]) color(Steel) flat_nut(8);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
// 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/)
|
||||||
|
|
||||||
|
include <MCAD/metric_fastners.scad>
|
||||||
|
include <MCAD/materials.scad>
|
||||||
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>
|
use <../libs/Write/Write.scad>
|
||||||
|
@ -72,7 +74,7 @@ module nut_holder_no_hole() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
module nut_holder() {
|
module nut_holder(with_extra_parts=false, exploded=false) {
|
||||||
union() {
|
union() {
|
||||||
difference() {
|
difference() {
|
||||||
nut_holder_no_hole();
|
nut_holder_no_hole();
|
||||||
|
@ -101,12 +103,34 @@ module nut_holder() {
|
||||||
translate([-8,-5,0])
|
translate([-8,-5,0])
|
||||||
text(M8_nut_height-M8_nut_height_margin);
|
text(M8_nut_height-M8_nut_height_margin);
|
||||||
} // End of union
|
} // End of union
|
||||||
|
|
||||||
|
if(with_extra_parts)
|
||||||
|
nut_holder_extras(exploded_distance=(exploded?18:0));
|
||||||
|
|
||||||
|
module nut_holder_extras(exploded_distance=0) {
|
||||||
|
echo("Non-Plastic Parts, 1, Nut M8 for Y_nut_holder");
|
||||||
|
translate([base_width-3.7,Y_threaded_rod_dist_from_workbed,0])
|
||||||
|
translate([-0.5+exploded_distance,0,wall_thickness/2-0.8*8/2])
|
||||||
|
color(Steel) flat_nut(8);
|
||||||
|
|
||||||
|
echo("Non-Plastic Parts, 2, Self Tapping Screw 3.9 x 13 mm to attach Y_nut_holder to work bed");
|
||||||
|
screw_size = 3.9;
|
||||||
|
screw_length = 13;
|
||||||
|
color(Steel) translate([0,wall_height]) rotate([0,0,-90])
|
||||||
|
translate([wall_height,wall_width-5.5,20])
|
||||||
|
rotate([0,90,0]) {
|
||||||
|
translate([-5,0,-bottom_thickness-0.2-exploded_distance])
|
||||||
|
csk_bolt(screw_size, screw_length);
|
||||||
|
translate([5,0,-bottom_thickness-0.2-exploded_distance])
|
||||||
|
csk_bolt(screw_size, screw_length);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module nut_holder_positioned() {
|
module nut_holder_positioned(with_extra_parts=false, exploded=false) {
|
||||||
rotate([90,0,0])
|
rotate([90,0,0])
|
||||||
translate([-(base_width-3.7),0,-wall_thickness/2])
|
translate([-(base_width-3.7),0,-wall_thickness/2])
|
||||||
nut_holder();
|
nut_holder(with_extra_parts=with_extra_parts, exploded=exploded);
|
||||||
}
|
}
|
||||||
|
|
||||||
//for display only, doesn't contribute to final object
|
//for display only, doesn't contribute to final object
|
||||||
|
|
|
@ -101,7 +101,7 @@ translate([frame_width-frame_thickness,frame_height,frame_thickness-2])
|
||||||
module Y_rod_idler_extras(exploded_distance=0) {
|
module Y_rod_idler_extras(exploded_distance=0) {
|
||||||
screw_size = 2.9;
|
screw_size = 2.9;
|
||||||
screw_length = 16;
|
screw_length = 16;
|
||||||
echo("Non-Plastic Parts: 2 x Self tapping screw 2.9 x 16 mm for Y_rod_idler");
|
echo("Non-Plastic Parts, 2, Self Tapping Screw 2.9 x 16 mm for Y_rod_idler");
|
||||||
rotate([90,0,0]) translate([frame_width/3,Y_rod_support_lenght/2.5,-frame_height+bottom_thickness+.2+exploded_distance])
|
rotate([90,0,0]) translate([frame_width/3,Y_rod_support_lenght/2.5,-frame_height+bottom_thickness+.2+exploded_distance])
|
||||||
rotate([180,0,0]) color(Steel) {
|
rotate([180,0,0]) color(Steel) {
|
||||||
translate([-5,0,0])
|
translate([-5,0,0])
|
||||||
|
|
|
@ -88,14 +88,14 @@ module lm8uu_bearing_holder(with_extra_parts=false, exploded=false) {
|
||||||
lm8uu_bearing_holder_extras(exploded_distance=(exploded?1.3*linearBearing_L("LM8UU"):0));
|
lm8uu_bearing_holder_extras(exploded_distance=(exploded?1.3*linearBearing_L("LM8UU"):0));
|
||||||
|
|
||||||
module lm8uu_bearing_holder_extras(exploded_distance=0) {
|
module lm8uu_bearing_holder_extras(exploded_distance=0) {
|
||||||
echo("Non-Plastic Parts: 1 x LM8UU linear ball bearing for lm8uu_bearing_holder");
|
echo("Non-Plastic Parts, 1, Linear Bearing LM8UU for lm8uu_bearing_holder");
|
||||||
rotate([90,0,90]) translate([0,0,LM8UU_dia/2+2]) rotate([90,0,0])
|
rotate([90,0,90]) translate([0,0,LM8UU_dia/2+2]) rotate([90,0,0])
|
||||||
translate([0,0,exploded_distance])
|
translate([0,0,exploded_distance])
|
||||||
linearBearing(pos=[0,0,-linearBearing_L("LM8UU")/2], model="LM8UU");
|
linearBearing(pos=[0,0,-linearBearing_L("LM8UU")/2], model="LM8UU");
|
||||||
|
|
||||||
screw_size = 3.5;
|
screw_size = 3.5;
|
||||||
screw_length = 13;
|
screw_length = 13;
|
||||||
echo("Non-Plastic Parts: 1 x Self tapping screw 3.5 x 13 mm to attach lm8uu_bearing_holder on work bed");
|
echo("Non-Plastic Parts, 1, Self Tapping Screw 3.5 x 13 mm to attach lm8uu_bearing_holder on work bed");
|
||||||
translate([plate_height-3+0.2+0.5*exploded_distance,screw_space_x/2,0]) rotate([0,-90,0])
|
translate([plate_height-3+0.2+0.5*exploded_distance,screw_space_x/2,0]) rotate([0,-90,0])
|
||||||
color(Steel) csk_bolt(screw_size, screw_length);
|
color(Steel) csk_bolt(screw_size, screw_length);
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,7 @@ module motor_stand_no_base_extras(with_motor=false, exploded_distance=0) {
|
||||||
rotate([0,180,0])
|
rotate([0,180,0])
|
||||||
translate([0,0,-1+exploded_distance])
|
translate([0,0,-1+exploded_distance])
|
||||||
motor(Cyclone_Nema17, NemaLengthLong);
|
motor(Cyclone_Nema17, NemaLengthLong);
|
||||||
echo("Non-Plastic Parts: 1 x Nema 17 motor");
|
echo("Non-Plastic Parts, 1, Nema 17 for Y axis");
|
||||||
|
|
||||||
// --- Motor Gear ---
|
// --- Motor Gear ---
|
||||||
translate([0,0,12+5.5+exploded_distance])
|
translate([0,0,12+5.5+exploded_distance])
|
||||||
|
@ -121,7 +121,7 @@ module motor_stand_no_base_extras(with_motor=false, exploded_distance=0) {
|
||||||
|
|
||||||
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
|
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
|
||||||
rotate([0,0,15]) translate([0,axis_distance,2.5-wall_thickness/2]) {
|
rotate([0,0,15]) translate([0,axis_distance,2.5-wall_thickness/2]) {
|
||||||
echo("Non-Plastic Parts: 1 x 608 bearing for motor stand");
|
echo("Non-Plastic Parts, 1, Bearing 608 for motor stand");
|
||||||
translate([0,0,0.5*exploded_distance])
|
translate([0,0,0.5*exploded_distance])
|
||||||
bearing(model=608);
|
bearing(model=608);
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ module motor_stand_no_base_extras(with_motor=false, exploded_distance=0) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 4 x M3 x 6mm bolts to attach motor on motor_stand");
|
echo("Non-Plastic Parts, 4, Bolt M3 x 6 mm to attach motor on motor_stand");
|
||||||
for(i=[-1,1]) for(j=[-1,1])
|
for(i=[-1,1]) for(j=[-1,1])
|
||||||
translate([motor_width/2,motor_width/2,wall_thickness/2])
|
translate([motor_width/2,motor_width/2,wall_thickness/2])
|
||||||
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,2.5-wall_thickness/2+exploded_distance*0.7]) {
|
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,2.5-wall_thickness/2+exploded_distance*0.7]) {
|
||||||
|
@ -143,13 +143,13 @@ module motor_stand_no_base_extras(with_motor=false, exploded_distance=0) {
|
||||||
if(!with_motor) {
|
if(!with_motor) {
|
||||||
translate([motor_width/2,motor_width/2,wall_thickness/2])
|
translate([motor_width/2,motor_width/2,wall_thickness/2])
|
||||||
rotate([0,0,15]) translate([0,axis_distance,2.5-wall_thickness/2]) color(Steel) {
|
rotate([0,0,15]) translate([0,axis_distance,2.5-wall_thickness/2]) color(Steel) {
|
||||||
echo("Non-Plastic Parts: 1 x 608 bearing for idle stand");
|
echo("Non-Plastic Parts, 1, Bearing 608 for idle stand");
|
||||||
translate([0,0,0.3*exploded_distance]) bearing(model=608);
|
translate([0,0,0.3*exploded_distance]) bearing(model=608);
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x M8 washer for idle stand");
|
echo("Non-Plastic Parts, 1, Washer M8 for idle stand");
|
||||||
translate([0,0,7+0.6*exploded_distance]) washer(8);
|
translate([0,0,7+0.6*exploded_distance]) washer(8);
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x M8 nut to attach threaded rod on idle stand");
|
echo("Non-Plastic Parts, 1, Nut M8 to attach threaded rod on idle stand");
|
||||||
translate([0,0,6.4+7+0.8+0.9*exploded_distance]) rotate([0,180,0]) flat_nut(8);
|
translate([0,0,6.4+7+0.8+0.9*exploded_distance]) rotate([0,180,0]) flat_nut(8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ module idle_stand(with_extra_parts=false, exploded=false) {
|
||||||
module idle_stand_extras(exploded_distance=0) {
|
module idle_stand_extras(exploded_distance=0) {
|
||||||
screw_size = 2.9;
|
screw_size = 2.9;
|
||||||
screw_length = 16;
|
screw_length = 16;
|
||||||
echo("Non-Plastic Parts: 2 x Self tapping screw 2.9 x 16 mm for motor_stand");
|
echo("Non-Plastic Parts, 2, Self Tapping Screw 2.9 x 16 mm for motor_stand");
|
||||||
translate([wall_height,base_width/2+2.5,base_length/1.5]) color(Steel)
|
translate([wall_height,base_width/2+2.5,base_length/1.5]) color(Steel)
|
||||||
rotate([0,90,0]) {
|
rotate([0,90,0]) {
|
||||||
translate([-5,0,-bottom_thickness-.2-exploded_distance])
|
translate([-5,0,-bottom_thickness-.2-exploded_distance])
|
||||||
|
|
|
@ -34,23 +34,23 @@ difference() {
|
||||||
}
|
}
|
||||||
|
|
||||||
module end_stop_holder_extras(exploded_distance=0) {
|
module end_stop_holder_extras(exploded_distance=0) {
|
||||||
echo("Non-Plastic Parts: 6 x M3 washer to attach micro switch on end_stop_holder");
|
echo("Non-Plastic Parts, 6, Washer M3 to attach micro switch on end_stop_holder");
|
||||||
for(i = [0:2] ) {
|
for(i = [0:2] ) {
|
||||||
translate([4+i*0.3+(i+1)*0.2*exploded_distance, 28, 5]) rotate([0, 90, 0]) color(Steel) washer(3);
|
translate([4+i*0.3+(i+1)*0.2*exploded_distance, 28, 5]) rotate([0, 90, 0]) color(Steel) washer(3);
|
||||||
translate([4+i*0.3+(i+1)*0.2*exploded_distance, 38, 5]) rotate([0, 90, 0]) color(Steel) washer(3);
|
translate([4+i*0.3+(i+1)*0.2*exploded_distance, 38, 5]) rotate([0, 90, 0]) color(Steel) washer(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x Micro switch on end_stop_holder");
|
echo("Non-Plastic Parts, 1, Micro Switch on end_stop_holder");
|
||||||
translate([4+3*0.3+exploded_distance, 28-5.15+(10-9.5)/2, 5-2])
|
translate([4+3*0.3+exploded_distance, 28-5.15+(10-9.5)/2, 5-2])
|
||||||
rotate([90,0,90])
|
rotate([90,0,90])
|
||||||
micro_switch(with_extra_parts=true, exploded=(exploded_distance!=0));
|
micro_switch(with_extra_parts=true, exploded=(exploded_distance!=0));
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x M3 x 18 mm bolt to attach end_stop_holder on smooth rod");
|
echo("Non-Plastic Parts, 1, Bolt M3 x 18 mm to attach end_stop_holder on smooth rod");
|
||||||
translate([-3*exploded_distance,6,5])
|
translate([-3*exploded_distance,6,5])
|
||||||
rotate([0,90,0])
|
rotate([0,90,0])
|
||||||
color(Steel) boltHole(size=3, length=18);
|
color(Steel) boltHole(size=3, length=18);
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x M3 nut to attach end_stop_holder on smooth rod");
|
echo("Non-Plastic Parts, 1, Nut M3 to attach end_stop_holder on smooth rod");
|
||||||
translate([17+0.9*3/2+exploded_distance,6,5])
|
translate([17+0.9*3/2+exploded_distance,6,5])
|
||||||
rotate([0,-90,0])
|
rotate([0,-90,0])
|
||||||
rotate([0,0,30]) color(Steel) flat_nut(3);
|
rotate([0,0,30]) color(Steel) flat_nut(3);
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,52 @@
|
||||||
|
//Designed by Forgetful_Guy
|
||||||
|
//From http://www.thingiverse.com/thing:63578
|
||||||
|
//License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
include <MCAD/metric_fastners.scad>
|
||||||
|
include <MCAD/materials.scad>
|
||||||
|
use <../large_washer.scad>
|
||||||
|
use <./PCB_vise_1_Part2.scad>
|
||||||
|
|
||||||
|
|
||||||
|
module PCB_vise_1_Part1(with_extra_parts=false, exploded=false) {
|
||||||
|
import("./PCB_vise_1_Part1.STL");
|
||||||
|
|
||||||
|
|
||||||
|
if(with_extra_parts)
|
||||||
|
PCB_vise_1_Part1_extras(exploded_distance=(exploded?5:0));
|
||||||
|
|
||||||
|
module PCB_vise_1_Part1_extras(exploded_distance=0) {
|
||||||
|
echo("Non-Plastic Parts, 2, Large Washer M5 for PCB_vise_1_Part1");
|
||||||
|
echo("Non-Plastic Parts, 2, Self Tapping Screw 4.8 x 19 mm for PCB_vise_1_Part1");
|
||||||
|
echo("Non-Plastic Parts, 5, Nut M3 for PCB_vise_1_Part1");
|
||||||
|
color(Steel) {
|
||||||
|
translate([10,20,8.0+exploded_distance]) {
|
||||||
|
large_washer(5);
|
||||||
|
translate([0,0,largeWasher_H(5)+2+5*exploded_distance]) rotate([180,0,0]) csk_bolt(4.8, 19);
|
||||||
|
}
|
||||||
|
translate([10,20+40,8.0+exploded_distance]) {
|
||||||
|
large_washer(5);
|
||||||
|
translate([0,0,largeWasher_H(5)+2+5*exploded_distance]) rotate([180,0,0]) csk_bolt(4.8, 19);
|
||||||
|
}
|
||||||
|
translate([24-2*exploded_distance,14,8+0.6])
|
||||||
|
flat_nut(3);
|
||||||
|
translate([24-2*exploded_distance,14+28,8+0.6])
|
||||||
|
flat_nut(3);
|
||||||
|
translate([24-2*exploded_distance,14+28*2,8+0.6])
|
||||||
|
flat_nut(3);
|
||||||
|
translate([33,4-2*exploded_distance,8+0.6])
|
||||||
|
flat_nut(3);
|
||||||
|
translate([33+22,4-2*exploded_distance,8+0.6])
|
||||||
|
flat_nut(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
module PCB_vise_1(with_extra_parts=false, exploded=false) {
|
||||||
|
PCB_vise_1_Part1(with_extra_parts=with_extra_parts, exploded=exploded);
|
||||||
|
translate([20,0,15+0.8])
|
||||||
|
PCB_vise_1_Part2(with_extra_parts=with_extra_parts, exploded=exploded);
|
||||||
|
}
|
||||||
|
|
||||||
|
PCB_vise_1(with_extra_parts=false, exploded=false);
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
||||||
|
//Designed by Forgetful_Guy
|
||||||
|
//From http://www.thingiverse.com/thing:63578
|
||||||
|
//License: http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
|
||||||
|
include <MCAD/nuts_and_bolts.scad>
|
||||||
|
include <MCAD/materials.scad>
|
||||||
|
|
||||||
|
module PCB_vise_1_Part2(with_extra_parts=false, exploded=false) {
|
||||||
|
import("./PCB_vise_1_Part2.STL");
|
||||||
|
|
||||||
|
|
||||||
|
if(with_extra_parts)
|
||||||
|
PCB_vise_1_Part2_extras(exploded_distance=(exploded?5:0));
|
||||||
|
|
||||||
|
module PCB_vise_1_Part2_extras(exploded_distance=0) {
|
||||||
|
echo("Non-Plastic Parts, 5, Bolt M3 x 16 mm for PCB_vise_1_Part2");
|
||||||
|
color(Steel) {
|
||||||
|
translate([4,14,2.5+4*exploded_distance])
|
||||||
|
rotate([180,0,0]) boltHole(size=3, length=16);
|
||||||
|
translate([4,14+28,2.5+4*exploded_distance])
|
||||||
|
rotate([180,0,0]) boltHole(size=3, length=16);
|
||||||
|
translate([4,14+28*2,2.5+4*exploded_distance])
|
||||||
|
rotate([180,0,0]) boltHole(size=3, length=16);
|
||||||
|
translate([13,4,2.5+4*exploded_distance])
|
||||||
|
rotate([180,0,0]) boltHole(size=3, length=16);
|
||||||
|
translate([13+22,4,2.5+4*exploded_distance])
|
||||||
|
rotate([180,0,0]) boltHole(size=3, length=16);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PCB_vise_1_Part2(with_extra_parts=false, exploded=false);
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
space =1; //extra space between characters in (character widths)
|
space =1; //extra space between characters in (character widths)
|
||||||
rotate=0; // text rotation (clockwise)
|
rotate=0; // text rotation (clockwise)
|
||||||
font = "Letters.dxf"; //default for aditional fonts
|
font = "Letters.dxf"; //default for aditional fonts
|
||||||
fontPath = "../libs/Write/"; // CGS MOD: Path for the DXF font files
|
fontPath = "./"; // CGS MOD: Path for the DXF font files
|
||||||
|
|
||||||
|
|
||||||
// write cube defaults
|
// write cube defaults
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
////By Glen Chung, 2013.
|
||||||
|
//Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later
|
||||||
|
|
||||||
|
include <MCAD/units.scad>
|
||||||
|
include <MCAD/materials.scad>
|
||||||
|
|
||||||
|
LARGE_WASHER_D1 = 0; //Inner diameter
|
||||||
|
LARGE_WASHER_D2 = 1; //Outer diameter
|
||||||
|
LARGE_WASHER_H = 2; //Height
|
||||||
|
|
||||||
|
// Large Washer dimensions
|
||||||
|
// model == X ? [ D1, D2, H]:
|
||||||
|
function largeWasherDimensions(model=3) =
|
||||||
|
model == 3 ? [ 3.2*mm, 9.0*mm, 0.8*mm]:
|
||||||
|
model == 4 ? [ 4.3*mm, 12.0*mm, 1.0*mm]:
|
||||||
|
model == 5 ? [ 5.3*mm, 15.0*mm, 1.0*mm]:
|
||||||
|
model == 6 ? [ 6.4*mm, 18.0*mm, 1.6*mm]:
|
||||||
|
model == 8 ? [ 8.4*mm, 24.0*mm, 2.0*mm]:
|
||||||
|
model == 10 ? [ 10.5*mm, 30.0*mm, 2.5*mm]:
|
||||||
|
model == 12 ? [ 13.0*mm, 37.0*mm, 3.0*mm]:
|
||||||
|
model == 16 ? [ 17.0*mm, 50.0*mm, 3.0*mm]:
|
||||||
|
model == 20 ? [ 21.0*mm, 60.0*mm, 4.0*mm]:
|
||||||
|
model == 24 ? [ 25.0*mm, 72.0*mm, 5.0*mm]:
|
||||||
|
model == 30 ? [ 33.0*mm, 92.0*mm, 6.0*mm]:
|
||||||
|
/*model == 36 ?*/ [ 39.0*mm, 110.0*mm, 8.0*mm];
|
||||||
|
|
||||||
|
function largeWasher_D1(model) = largeWasherDimensions(model)[LARGE_WASHER_D1];
|
||||||
|
function largeWasher_D2(model) = largeWasherDimensions(model)[LARGE_WASHER_D2];
|
||||||
|
function largeWasher_H(model) = largeWasherDimensions(model)[LARGE_WASHER_H];
|
||||||
|
|
||||||
|
module large_washer(dia=3)
|
||||||
|
{
|
||||||
|
d1 = largeWasher_D1(dia);
|
||||||
|
d2 = largeWasher_D2(dia);
|
||||||
|
h = largeWasher_H(dia);
|
||||||
|
difference()
|
||||||
|
{
|
||||||
|
cylinder(r=d2/2,h=h);
|
||||||
|
translate([0,0,-h/2]) cylinder(r=d1/2,h=h*2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//examples
|
||||||
|
//large_washer(); //m3
|
||||||
|
//large_washer(5); //m5
|
|
@ -24,7 +24,7 @@ module micro_switch(with_extra_parts=false, exploded=false) {
|
||||||
module micro_switch_extras(exploded_distance=0) {
|
module micro_switch_extras(exploded_distance=0) {
|
||||||
screw_size = 2.2;
|
screw_size = 2.2;
|
||||||
screw_length = 13;
|
screw_length = 13;
|
||||||
echo("Non-Plastic Parts: 2 x Self tapping screw 2.2 x 13 mm for micro switch");
|
echo("Non-Plastic Parts, 2, Self Tapping Screw 2.2 x 13 mm for micro switch");
|
||||||
translate([5.15, 2, 0]) color(Steel) {
|
translate([5.15, 2, 0]) color(Steel) {
|
||||||
translate([0, 0, 0.5+6.4+exploded_distance])
|
translate([0, 0, 0.5+6.4+exploded_distance])
|
||||||
rotate([180,0,0]) csk_bolt(screw_size, screw_length);
|
rotate([180,0,0]) csk_bolt(screw_size, screw_length);
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
// 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/)
|
||||||
|
|
||||||
|
module rod(len=100, threaded=false, dia=8) {
|
||||||
|
rotate([90,0,0]) {
|
||||||
|
if(threaded)
|
||||||
|
color([0.5,0.5,0.5]) cylinder(r=dia/2,h=len,center=true,$fn=30);
|
||||||
|
else
|
||||||
|
color([0.8,0.8,0.8]) cylinder(r=dia/2,h=len,center=true,$fn=30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -256,7 +256,7 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
|
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
|
||||||
rotate([0,0,-motor_axis_angle]) translate([motor_axis_distance,0,0]) rotate([0,0,90+motor_axis_angle]) {
|
rotate([0,0,-motor_axis_angle]) translate([motor_axis_distance,0,0]) rotate([0,0,90+motor_axis_angle]) {
|
||||||
translate([0,0,wall_thickness-1]) {
|
translate([0,0,wall_thickness-1]) {
|
||||||
echo("Non-Plastic Parts: 1 x Nema 17 on motor frame");
|
echo("Non-Plastic Parts, 1, Nema 17 for X axis");
|
||||||
translate([0,0,exploded_distance]) motor(Cyclone_Nema17, NemaLengthLong);
|
translate([0,0,exploded_distance]) motor(Cyclone_Nema17, NemaLengthLong);
|
||||||
|
|
||||||
// --- Motor gear ---
|
// --- Motor gear ---
|
||||||
|
@ -264,7 +264,7 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
cyclone_motor_gear(with_extra_parts=true, exploded=(exploded_distance!=0));
|
cyclone_motor_gear(with_extra_parts=true, exploded=(exploded_distance!=0));
|
||||||
}
|
}
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 4 x Bolts M3 x 8 mm to attach motor on frame");
|
echo("Non-Plastic Parts, 4, Bolt M3 x 8 mm to attach motor on frame");
|
||||||
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])
|
||||||
translate([0,0,-0.4*exploded_distance]) {
|
translate([0,0,-0.4*exploded_distance]) {
|
||||||
|
@ -275,7 +275,7 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
|
|
||||||
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
|
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
|
||||||
rotate([0,0,0]) {
|
rotate([0,0,0]) {
|
||||||
echo("Non-Plastic Parts: 1 x 608 bearing for motor frame");
|
echo("Non-Plastic Parts, 1, Bearing 608 for motor frame");
|
||||||
translate([0,0,-1.0-7/2-0.2*exploded_distance]) bearing(model=608);
|
translate([0,0,-1.0-7/2-0.2*exploded_distance]) bearing(model=608);
|
||||||
|
|
||||||
// --- Rod Gear ---
|
// --- Rod Gear ---
|
||||||
|
@ -288,7 +288,7 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
|
|
||||||
screw_size = 2.9;
|
screw_size = 2.9;
|
||||||
screw_length = 16;
|
screw_length = 16;
|
||||||
echo("Non-Plastic Parts: 3 x Self tapping screw 2.9 x 16 mm to attach frame on base");
|
echo("Non-Plastic Parts, 3, Self Tapping Screw 2.9 x 16 mm to attach frame on base");
|
||||||
rotate([90,0,0]) translate([frame_width/2,frame_thickness/2,-frame_height+frame_thickness/2+.2+exploded_distance]) color(Steel) {
|
rotate([90,0,0]) translate([frame_width/2,frame_thickness/2,-frame_height+frame_thickness/2+.2+exploded_distance]) color(Steel) {
|
||||||
translate([-base_screw_distance,0,0]) rotate([180,0,0])
|
translate([-base_screw_distance,0,0]) rotate([180,0,0])
|
||||||
csk_bolt(screw_size, screw_length);
|
csk_bolt(screw_size, screw_length);
|
||||||
|
@ -315,7 +315,6 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
|
|
||||||
// this seems to reduce working area of Y axis
|
// this seems to reduce working area of Y axis
|
||||||
if(false) {
|
if(false) {
|
||||||
echo("Non-Plastic Parts: 1 x Micro switch on Y smooth rod for Y axis");
|
|
||||||
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-2])
|
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-2])
|
||||||
translate([0,-Y_rod_height+smooth_rod_margin,0])
|
translate([0,-Y_rod_height+smooth_rod_margin,0])
|
||||||
translate([0,-smooth_rod_margin,Y_rod_dist_from_wall])
|
translate([0,-smooth_rod_margin,Y_rod_dist_from_wall])
|
||||||
|
@ -325,7 +324,6 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
|
|
||||||
// this seems to reduce working area of X axis
|
// this seems to reduce working area of X axis
|
||||||
if(false) {
|
if(false) {
|
||||||
echo("Non-Plastic Parts: 1 x Micro switch on X smooth rod for X axis");
|
|
||||||
translate([X_smooth_rods_sep_projected,-smooth_rod_margin,0])
|
translate([X_smooth_rods_sep_projected,-smooth_rod_margin,0])
|
||||||
translate([15+0.5*exploded_distance, -8, frame_thickness])
|
translate([15+0.5*exploded_distance, -8, frame_thickness])
|
||||||
rotate([180,180,-90])
|
rotate([180,180,-90])
|
||||||
|
@ -334,7 +332,7 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
|
|
||||||
// this seems to reduce working area of X axis
|
// this seems to reduce working area of X axis
|
||||||
if(false) {
|
if(false) {
|
||||||
echo("Non-Plastic Parts: 1 x Micro switch on motor frame for X axis");
|
echo("Non-Plastic Parts, 1, Micro Switch on motor frame for X axis");
|
||||||
rotate([90, 0, -45])
|
rotate([90, 0, -45])
|
||||||
translate([X_rods_corner_shaft_size/2-19.8,0,-X_rods_corner_shaft_size/2+0.5*exploded_distance])
|
translate([X_rods_corner_shaft_size/2-19.8,0,-X_rods_corner_shaft_size/2+0.5*exploded_distance])
|
||||||
micro_switch(with_extra_parts=true, exploded=(exploded_distance!=0));
|
micro_switch(with_extra_parts=true, exploded=(exploded_distance!=0));
|
||||||
|
@ -344,21 +342,20 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
if(!with_motor) {
|
if(!with_motor) {
|
||||||
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
|
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
|
||||||
rotate([0,0,0]) {
|
rotate([0,0,0]) {
|
||||||
echo("Non-Plastic Parts: 1 x 608 bearing for no motor frame");
|
echo("Non-Plastic Parts, 1, Bearing 608 for no motor frame");
|
||||||
translate([0,0,-1.0-7/2-0.2*exploded_distance]) bearing(model=608);
|
translate([0,0,-1.0-7/2-0.2*exploded_distance]) bearing(model=608);
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x M8 nut to attach threaded rod on no motor frame");
|
echo("Non-Plastic Parts, 1, Nut M8 to attach threaded rod on no motor frame");
|
||||||
translate([0,0,-6.5-1.0-7/2-0.6*exploded_distance]) rotate([0,0,0]) color(Steel) flat_nut(8);
|
translate([0,0,-6.5-1.0-7/2-0.6*exploded_distance]) rotate([0,0,0]) color(Steel) flat_nut(8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo("Non-Plastic Parts: 1 x Micro switch on no motor frame for X axis");
|
echo("Non-Plastic Parts, 1, Micro Switch on no motor frame for X axis");
|
||||||
rotate([90, 0, -45])
|
rotate([90, 0, -45])
|
||||||
translate([X_rods_corner_shaft_size/2-19.8,0,-X_rods_corner_shaft_size/2+0.5*exploded_distance])
|
translate([X_rods_corner_shaft_size/2-19.8,0,-X_rods_corner_shaft_size/2+0.5*exploded_distance])
|
||||||
micro_switch(with_extra_parts=true, exploded=(exploded_distance!=0));
|
micro_switch(with_extra_parts=true, exploded=(exploded_distance!=0));
|
||||||
|
|
||||||
if(true) {
|
if(true) {
|
||||||
echo("Non-Plastic Parts: 1 x Micro switch on Y smooth rod for Y axis");
|
|
||||||
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-2])
|
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-2])
|
||||||
translate([0,-Y_rod_height+smooth_rod_margin,0])
|
translate([0,-Y_rod_height+smooth_rod_margin,0])
|
||||||
translate([0,-smooth_rod_margin,Y_rod_dist_from_wall])
|
translate([0,-smooth_rod_margin,Y_rod_dist_from_wall])
|
||||||
|
@ -368,7 +365,7 @@ module frame_extras(with_motor=1, exploded_distance=0) {
|
||||||
|
|
||||||
// this seems to reduce working area of Y axis
|
// this seems to reduce working area of Y axis
|
||||||
if(false) {
|
if(false) {
|
||||||
echo("Non-Plastic Parts: 1 x Micro switch on no motor frame for Y axis");
|
echo("Non-Plastic Parts, 1, Micro Switch on no motor frame for Y axis");
|
||||||
translate([frame_width-frame_thickness/2+10.8/2-0.5,frame_height-19.8-2,frame_thickness])
|
translate([frame_width-frame_thickness/2+10.8/2-0.5,frame_height-19.8-2,frame_thickness])
|
||||||
translate([0,-Y_rod_height+smooth_rod_margin,0])
|
translate([0,-Y_rod_height+smooth_rod_margin,0])
|
||||||
translate([0,-smooth_rod_margin-8.5-0.5*exploded_distance,0])
|
translate([0,-smooth_rod_margin-8.5-0.5*exploded_distance,0])
|
||||||
|
|
|
@ -49,7 +49,7 @@ translate([0,0,part_z/2]) difference() {
|
||||||
module smooth_rod_fix_extras(exploded_distance=0) {
|
module smooth_rod_fix_extras(exploded_distance=0) {
|
||||||
screw_size = 2.9;
|
screw_size = 2.9;
|
||||||
screw_length = 16;
|
screw_length = 16;
|
||||||
echo("Non-Plastic Parts: 2 x Self tapping screw 2.9 x 16 mm for smooth_rod_fix");
|
echo("Non-Plastic Parts, 2, Self Tapping Screw 2.9 x 16 mm for smooth_rod_fix");
|
||||||
color(Steel) {
|
color(Steel) {
|
||||||
translate([0,0,-.2-exploded_distance]) {
|
translate([0,0,-.2-exploded_distance]) {
|
||||||
translate([-smooth_rod_screw_sep,0,0])
|
translate([-smooth_rod_screw_sep,0,0])
|
||||||
|
|
Loading…
Reference in New Issue