Tiding before sending commit my build to the "Development" folder

pull/8/head
yOPERO 2014-01-16 20:18:06 +00:00
parent 8b72ce575b
commit db96cd24ac
20 changed files with 256 additions and 166227 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2,14 +2,14 @@
// Created by Carlosgs (http://carlosgs.es)
// 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 <../main_frame/frame.scad>
use <../Y_axis/Y_rod_idler.scad>
use <../Y_axis/motor_stand.scad>
use <../main_frame/frame_hex-grid_6screws.scad>
use <../Y_axis/Y_rod_idler_YOP.scad>
use <../Y_axis/motor_holder.scad>
use <../Y_axis/linear_bearing_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>
X_axis_sep = 210;
@ -43,11 +43,11 @@ module frame_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() {
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() {
@ -55,7 +55,7 @@ module Y_motor_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() {
@ -105,10 +105,9 @@ module X_carriage() {
}
module Z_carriage_piece() {
translate([0,0,90])
rotate([0,0,-90])
rotate([0,180,0])
Z_carriage(showSpindle=true);
translate([0,0,41])
rotate([0,0,90])
Z_carriage_assembled();
}
module cnc(show_printbed = 1) {
@ -126,9 +125,9 @@ module cnc(show_printbed = 1) {
// ---- Y rod idlers ----
translate([0,Y_axis_sep,0]) {
Y_rod_idler_left();
Y_rod_idler_right();
translate([X_axis_sep,0,0])
Y_rod_idler_right();
Y_rod_idler_left();
}
// ---- Y threaded rod motor and idler ----
@ -174,7 +173,7 @@ module cnc_workbed_template() {
}
module rod(len=100) {
color([0.8,0.8,0.8])
color([0.8,0.8,0.8])
rotate([90,0,0])
cylinder(r=8/2,h=len,center=true,$fn=30);
}
@ -191,6 +190,9 @@ module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
// --- Y threaded rod ---
translate([0,0,Y_threaded_rod_height-Y_rod_height])
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 ---
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])
Z_carriage_piece();
}
//X motor threaded rod
translate([0,-48,-20])
rotate([0,0,90])
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])
rotate([0,0,90])
rod(X_axis_sep+60);
}
//X Upper smoth rod
rotate([0,0,90])
rod(X_axis_sep+60);/// WARNING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
/// 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);
}
rotate([0,0,90])
cnc_assembled(Y_offset=30,
X_offset=-50,
Z_offset=0);
rotate([0,0,90])cnc_assembled(Y_offset=30,X_offset=-50,Z_offset=10);
//rotate([0,0,90]) // So the generated dxf matches
// cnc_base_template();// inkscape's default orientation
//rotate([0,0,90]) cnc_base_template(); // So the generated dxf matches inkscape's default orientation
// cnc_workbed_template();

View File

@ -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();

View File

@ -249,9 +249,10 @@ module X_carriage_print_plate() {
}
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
//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();

View File

@ -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();
}

View File

@ -1,11 +1,20 @@
// 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/)
/*
* 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/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;
base_width = 20;
@ -17,6 +26,8 @@ motor_length = 49; // not used
motor_screw_distance = 31.3;
motor_center_diameter = 23;
motor_adjust_margin = 3;
motor_screw_diameter = 3.7;
motor_screw_head_diameter = 8;
@ -25,7 +36,7 @@ M8_rod_diameter = 8.2;
axis_distance = 21;
wall_thickness = 5;
wall_thickness = 9;
wall_height = motor_width;
wall_width = 54;
@ -37,12 +48,13 @@ Z_threaded_pos = motor_width/2+axis_distance;
Z_smooth_rods_sep = 55;
// Derived from Spindle mount for ShapeOko by Misan (http://www.thingiverse.com/thing:26740)
module spindle_holder(length=50,showSpindle=true) {
$fn=6;
translate([0,38,0]) rotate([0,0,180]) {
textHscale = 0.8;
textThickness = 1;
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,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);
@ -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-20]) color([0.9,0.9,0.9]) cylinder(r1=1/2,r2=3/2,h=20,$fn=60);
}
difference() {
union() {
cylinder(r=30,h=length,$fn=60);
translate ([-30,0,0]) cube([60,38,length]);
translate([28,-7,0]) cube([20,20,length]);
}
translate([0,0,-0.05]) cylinder(r=26,h=length+2,$fn=60);
translate([0,0,-0.01]) cube([90,3,length+2]);
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);
// Derived from Spindle mount for ShapeOko by Misan (http://www.thingiverse.com/thing:26740)
module spindle_holder_holes(length,spindiam, basediam,top_part) {
$fn=6;
// Position relative to motor shaft
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
if(with_motor) {
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);
}
}
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 ([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);
}
}
}
module motorHolesZ() {
// 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);
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);
}
// 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
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);
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);
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);
}
}
} // 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
rotate([0,0,0]) translate([0,axis_distance,0]) {
cylinder(r=(M8_rod_diameter*2)/2,h=10*wall_thickness,center=true,$fn=40);
hull() {
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);
}
} // End of translate relative to motor shaft
} // End of difference
//} // End of difference
}
module motor_stand_Z(with_motor=true) {
union() {
motor_stand_no_base_Z(with_motor);
}
module linearBearingHolderZ(h=10) {
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
build_plate(3,200,200);
//build_plate(3,200,200);
module Z_carriage(showSpindle=false) {
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0]) {
motor_stand_Z();
translate([wall_height/2,wall_width-4,0]) spindle_holder(lbearing_holder_length,showSpindle);
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+Z_smooth_rods_sep/2,Z_threaded_pos,lbearing_holder_length/2]) rotate([-90,0,0]) lm8uu_bearing_holder_XZ(lbearing_holder_length);
module Z_carriage(showSpindle=false,top_part=true) {
difference() {
rotate([0,0,-90]) translate([-wall_height/2,-Z_threaded_pos,0]) {
difference () {
Z_solid_body(top_part);
if(top_part) motor_stand_holes_Z();
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

View File

@ -5,7 +5,7 @@
use <../libs/build_plate.scad>
use <../libs/MCAD/nuts_and_bolts.scad>
fileNameLogo = "../libs/logo/cyclone_logoC.dxf";
fileNameLogo = "../libs/logo/cyclonelogoC.dxf";
M8_rod_diam = 8.2;
M3_rod_diam = 3.2;
@ -115,7 +115,7 @@ module Y_rod_idler(side = 0, logo = 0){
gap();
hole();
if(logo)
logo(side);
logo(side);
}
}
@ -123,22 +123,24 @@ module show_printbed(){
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])
Y_rod_idler(1, logo);
}
module Y_rod_idler_right(logo){
module Y_rod_idler_rightX(logo){
translate([25,0,0])
Y_rod_idler(0, logo);
}
/***************************************************************/
Y_rod_idler_right(logo = 1);
Y_rod_idler_left(logo = 1);
//Y_rod_idler_rightX(logo = 1);
Y_rod_idler_leftX(logo = 1);
// Y_rod_idler_right(); // Without logo
// Y_rod_idler_left(); // Without logo
show_printbed();
// Y_rod_idler_right(); // Without logo
//show_printbed();

View File

@ -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();

View File

@ -48,7 +48,7 @@ module motorHolesY() {
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])
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
hull() {
@ -83,12 +83,12 @@ difference() {
// 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=(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]) {
//Threaded rod for added stability
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);
}
@ -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(){
motor_stand();
@ -172,6 +177,9 @@ module motor_stand_back(){
motor_stand_front();
/*I am currently testing having two
of this modules to hold the threaded rod
on the Y axis.*/
//motor_stand_back();

View File

@ -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();
}
}
}

View File

@ -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

View File

@ -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);

View File

@ -5,7 +5,7 @@
use <../libs/obiscad/bcube.scad>
use <../libs/obiscad/bevel.scad>
use <../libs/build_plate.scad>
use <hex_structure.scad>
use <../libs/hex_structure.scad>
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);
@ -193,10 +193,10 @@ difference() {
} // 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])
//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);
/********holes in the base****/
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])
#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])
#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
*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);

View File

@ -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