Tiding up before sending it to "Development" folder.

pull/8/head
yOPERO 2014-01-16 20:20:43 +00:00
parent db96cd24ac
commit c7628ac4a5
15 changed files with 232738 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,217 @@
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
// Created by Carlosgs (http://carlosgs.es)
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
use <../libs/obiscad/bcube.scad>
use <../libs/obiscad/bevel.scad>
use <../libs/build_plate.scad>
use <../libs/teardrop.scad>
include <./lm8uu_holder.scad>
cyl_res = 40;
layer_height = 0.4;
X_smooth_rods_sep = 50;
X_smooth_rods_sep_projected = sqrt((X_smooth_rods_sep*X_smooth_rods_sep)/2); // Be careful with this measure, it is not properly named since it is used with the following offset:
smooth_rod_margin = 1;
X_rod_sep_real = X_smooth_rods_sep_projected+smooth_rod_margin;
X_rod_sep_real_diag = sqrt(2*(X_rod_sep_real*X_rod_sep_real));
screw_diam = 4;
M8_rod_diam = 8.2;
M8_rod_hole_diam = M8_rod_diam+0.2;
M8_nut_diameter = 15.3;
// Adjust these values to match the thickness of the nuts you will use
M8_nut_height_Z = 4;
M8_nut_height_X = 1+6.5;
X_axis_nut_support_thickness = 10;
X_nut_screw_diam = 2.5;
lbearing_length = 24;
Z_smooth_rods_sep = 55;
Z_smooth_rods_len = 140;
Z_threaded_rod_len = 120;
lbearing_holder_length = Z_smooth_rods_sep+M8_rod_diam+5;
module rod(len=100) {
color([0.8,0.8,0.8])
rotate([90,0,0])
cylinder(r=8/2,h=len,center=true,$fn=30);
}
module rodHole(len=100,radius=M8_rod_hole_diam/2, truncateMM=1) {
color([0.8,0.8,0.8])
rotate([90,-90,0])
translate([0,0,-len/2])
teardrop(radius, len, truncateMM);
}
module X_nut_holder() {
difference() {
translate([0,0,11.5])
cube([M8_nut_diameter+2,10,25],center=true);
rotate([0,45,0]) translate([0,0,-16])
cube([20,20,20],center=true);
rotate([-90,0,0]) hull() {
translate([0,-1,1.5])
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
translate([0,10,1.5])
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
}
rotate([90,0,0])
rotate([0,0,90])
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
translate([-4,0,10])
rotate([90,0,0])
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
}
}
module X_nut_holder_cover() {
X_nut_screw_diam = X_nut_screw_diam*1.2;
scale([1,1,-1]) rotate([-90,0,0])
difference() {
translate([0,0,7])
cube([M8_nut_diameter+2,3,17],center=true);
rotate([0,45,0]) translate([0,0,-16])
cube([20,20,20],center=true);
rotate([0,45,0]) translate([0,0,19])
cube([60,20,20],center=true);
rotate([-90,0,0]) hull() {
translate([0,-1,0.5])
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
translate([0,10,0.5])
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
}
rotate([90,0,0])
rotate([0,0,90])
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
translate([-4,0,10])
rotate([90,0,0])
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
}
}
module X_carriage(show_printbed = 0, show_support = 0) {
if(show_printbed) {
//for display only, doesn't contribute to final object
translate([0,0,-lbearing_holder_width/2])
build_plate(3,110,140);
}
difference() {
union() {
// Origin is set on the base of the Z threaded rod
// ---------- Support for the X nut -------------
translate([-X_rod_sep_real/2,-lbearing_holder_length/2+X_axis_nut_support_thickness/2,0]) {
rotate([0,45,0]) X_nut_holder();
}
// Now, the origin is set on the top smooth rod, and we make a 45deg turn
translate([-X_rod_sep_real/2,0,X_rod_sep_real])
rotate([0,45,0]) {
// --------- Linear bearing supports ------------
lm8uu_bearing_holder_XZ(lbearing_holder_length);
translate([X_rod_sep_real_diag,0,0])
lm8uu_bearing_holder_XZ(lbearing_holder_length);
difference() {
union() { // Join both linear bearing holders
translate([X_rod_sep_real_diag/2,0,lbearing_holder_height/4+2])
cube([X_rod_sep_real_diag+8,lbearing_holder_length,lbearing_holder_height/2],center=true);
rotate([0,-45,0]) // Draw a cube for the Z nut holder
translate([M8_nut_diameter,0,0])
cube([M8_nut_diameter*1.5,lbearing_holder_length,lbearing_holder_height/2],center=true);
}
// Leave clear the inside of the bearing holders
rotate([90,0,0]) {
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
translate([X_rod_sep_real_diag,0,0])
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
}
}
}
// ------- Z smooth rods holder -------
translate([0,Z_smooth_rods_sep/2,30/2])
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
translate([0,-Z_smooth_rods_sep/2,30/2])
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
if(show_support) translate([0,0,-10+2/2])
cube([M8_rod_diam+9,lbearing_holder_length,2],center=true);
} // End of union
// -------- Z axis rod holes --------
translate([0,0,40-M8_nut_height_Z])
cylinder(r=M8_nut_diameter/2,h=100,$fn=6);// Nut holder (Z)
rotate([90,0,0]) {
translate([0,70/2-5,0]) // --- Hole for the threaded rod ---
rodHole(len=50,radius=M8_rod_diam/2+2, truncateMM=2.5);
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
rodHole(len=Z_smooth_rods_len);
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
rodHole(len=Z_smooth_rods_len);
}
} // End of difference
}
module X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 0) {
X_carriage(show_printbed);
if(show_Xrods){
// ---- Rods (for reference) ----
translate([-X_rod_sep_real/2,0,0]) {
color([0.5,0.5,0.5]) rod(len=100);
}
translate([-X_rod_sep_real/2,0,X_rod_sep_real]) {
rod(len=100);
}
translate([X_rod_sep_real/2,0,0]) {
rod(len=100);
}
}
if(show_Zrods)
translate([0,0,0])
rotate([90,0,0]) {
translate([0,Z_threaded_rod_len/2-10,0])
color([0.5,0.5,0.5]) rod(len=Z_threaded_rod_len);
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
rod(len=Z_smooth_rods_len);
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
rod(len=Z_smooth_rods_len);
}
}
module X_carriage_print_plate() {
//for display only, doesn't contribute to final object
build_plate(3,110,140);
translate([0,0,lbearing_holder_length/2])
rotate([90,0,0])
X_carriage(show_printbed = 0, show_support = 1);
}
X_carriage_assembled(show_printbed = 1,show_Xrods = 1,show_Zrods = 1);
//X_carriage_print_plate();
//translate([0,20,0]) X_nut_holder_cover();

View File

@ -0,0 +1,443 @@
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
// Created by Carlosgs (http://carlosgs.es)
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
use <../libs/obiscad/bcube.scad>
use <../libs/obiscad/bevel.scad>
use <../libs/build_plate.scad>
use <../libs/teardrop.scad>
use <../libs/teardrop.scad>
include <./lm8uu_holder.scad>
cyl_res = 40;
layer_height = 0.4;
X_smooth_rods_sep = 50;
X_smooth_rods_sep_projected = sqrt((X_smooth_rods_sep*X_smooth_rods_sep)/2); // Be careful with this measure, it is not properly named since it is used with the following offset:
smooth_rod_margin = 1;
X_rod_sep_real = X_smooth_rods_sep_projected+smooth_rod_margin;
X_rod_sep_real_diag = sqrt(2*(X_rod_sep_real*X_rod_sep_real));
screw_diam = 4;
M8_rod_diam = 8.2;
M8_rod_hole_diam = M8_rod_diam+0.2;
M8_nut_diameter = 14.6 + .5;
// Adjust these values to match the thickness of the nuts you will use
//nut height between 6 - 7mm
M8_nut_height_Z = 4;
M8_nut_height_X = 6.5 + .5;
//SPRING ANTIBACKLASH
SPRING_OD = 11.76;
SPRING_LEN = 35;
SPRING_COMP = 10;
//SPRING ANTIBACKLASH
X_axis_nut_support_thickness = 10;
X_nut_screw_diam = 3;
lbearing_length = 24;
Z_smooth_rods_sep = 55;
Z_smooth_rods_len = 140;
Z_threaded_rod_len = 120;
lbearing_holder_length = Z_smooth_rods_sep+M8_rod_diam+5;
module rod(len=100) {
color([0.8,0.8,0.8])
rotate([90,0,0])
cylinder(r=8/2,h=len,center=true,$fn=32);
}
module spring(len = SPRING_LEN, rad = SPRING_OD) {
translate([0,-SPRING_LEN/4 - M8_nut_height_X +1.5,0])
color([0.5,0.5,0.5])
rotate([90,0,0])
cylinder(r = rad/2, h = len + 2, center=true,$fn=30);
}
module rodHole(len=100,radius=M8_rod_hole_diam/2, truncateMM=1) {
color([0.8,0.8,0.8])
rotate([90,-90,0])
translate([0,0,-len/2])
teardrop(radius, len, truncateMM);
}
//--->yOPERO
module X_nut_holder() {
//x nut holder cover DEBUG only
*translate([0,0,0-0])
X_nut_holder_cover_v1();
//x nut holder cover DEBUG only
//block
difference() {
translate([0,-1.5,11.5])
difference(){
cube([M8_nut_diameter+8,13,42],center=true);
translate([0,0,14])
cube([M8_nut_diameter+10,13,10],center=true);
}
//X_Nut
translate([0,-1.5,0])
rotate([-90,0,0]) hull() {
rotate([0,0,90]){
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
}
// translate([0,0,-5])
// cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
}
//spring diff
spring();
//Nut embedding
rotate([90,0,0])
rotate([0,0,90])
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
//Upper screw
translate([M8_nut_height_X + 1.5,-1.5,0])
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
//Lower screw
translate([-M8_nut_height_X - 1.5,-1.5,0])
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
//Nut transversal cut
translate([0,-1.5,-M8_nut_diameter/2])
cube([M8_nut_diameter+10,13,M8_nut_diameter],center=true);
}
}
module X_nut_holder_cover_antibacklash_base(){
//x nut holder cover DEBUG only
*translate([0,0,0-0])
X_nut_holder_cover_v1();
//x nut holder cover DEBUG only
//block
difference() {
translate([0,-1.5,-M8_nut_diameter/2])
difference(){
cube([M8_nut_diameter+8,13,M8_nut_diameter],center=true);
}
//X_Nut
translate([0,-1.5,0])
rotate([-90,0,0]) hull() {
rotate([0,0,90]){
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
}
// translate([0,0,-5])
// cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
}
//spring diff
spring(len=SPRING_LEN/2);
//Nut embedding
rotate([90,0,0])
rotate([0,0,90])
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
//Upper screw
translate([M8_nut_height_X + 1.5,-1.5,0])
#cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
//Lower screw
translate([-M8_nut_height_X - 1.5,-1.5,0])
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
//Nut transversal cut
// translate([0,-1.5,-M8_nut_diameter/2])
// cube([M8_nut_diameter+10,13,M8_nut_diameter],center=true);
}
}
module X_nut_holder_cover_v12(){
//upper join
translate([-M8_nut_height_X-3,-(13/4+1.25),-2])
difference(){
rotate([90,0,0])
cylinder(r=X_nut_screw_diam,h=13/2,center=true,$fn=20);
//screw
rotate([90,0,0])
cylinder(r=X_nut_screw_diam/2,h=400,center=true,$fn=20);
}
difference() {
translate([0,-1.5,11.5])
cube([M8_nut_diameter+6,12.5,42],center=true);
//block
rotate([0,45,0]) translate([0,0,-26])
cube([20,20,20],center=true);
//bold
translate([0,-1.5,0])
rotate([-90,0,0]) hull() {
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
}
//Nut embedding
rotate([90,0,0])
rotate([0,0,90])
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
//Joints body
translate([-M8_nut_height_X-3,13/4-2,-2])
rotate([90,0,0])
cylinder(r=X_nut_screw_diam,h=20,center=true,$fn=20);
//Upper screw
translate([M8_nut_height_X+2,-1.5,0])
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
//corte para obtener unicamente el nut cover
translate([0,-1.5,13.25+M8_nut_diameter/2])
cube([M8_nut_diameter+6,13,42],center=true);
}
}
//yOPERO<----
module X_nut_holder_cover_v1(){
//upper join
translate([-M8_nut_height_X-2,-(13/4+1.25),-2])
difference(){
rotate([90,0,0])
cylinder(r=X_nut_screw_diam,h=13/2,center=true,$fn=20);
//taladro m2
rotate([90,0,0])
cylinder(r=X_nut_screw_diam/2,h=400,center=true,$fn=20);
}
difference() {
translate([0,-1.5,11.5])
cube([M8_nut_diameter+6,12.5,42],center=true);
//embellecedor
rotate([0,45,0]) translate([0,0,-26])
cube([20,20,20],center=true);
//bold
translate([0,-1.5,0])
rotate([-90,0,0]) hull() {
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6,center=true);
}
//bold embedding
rotate([90,0,0])
rotate([0,0,90])
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
//Taladro base
translate([-M8_nut_height_X-2,13/4-2,-2])
rotate([90,0,0])
cylinder(r=X_nut_screw_diam,h=20,center=true,$fn=20);
//taladro m2
*rotate([90,0,0])
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
//Taladro superior >seguro
translate([M8_nut_height_X+1,-1.5,0])
cylinder(r=X_nut_screw_diam/2,h=60,center=true,$fn=20);
//corte para obtener unicamente el nut cover
translate([0,-1.5,13.25+M8_nut_diameter/2])
cube([M8_nut_diameter+6,13,42],center=true);
}
}
//yOPERO<----
module X_nut_holder_cover() {
X_nut_screw_diam = X_nut_screw_diam*1.2;
scale([1,1,-1]) rotate([-90,0,0])
difference() {
translate([0,0,7])
cube([M8_nut_diameter+2,3,67],center=true);
rotate([0,45,0]) translate([0,0,-16])
cube([20,20,20],center=true);
rotate([0,45,0]) translate([0,0,19])
cube([60,20,20],center=true);
rotate([-90,0,0]) hull() {
translate([0,-1,0.5])
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
translate([0,10,0.5])
rotate([0,0,90])
cylinder(r=M8_nut_diameter/2,h=M8_nut_height_X,$fn=6);
}
rotate([90,0,0])
rotate([0,0,90])
cylinder(r=M8_rod_diam/2+2,h=40,center=true,$fn=6);
translate([-4,0,10])
rotate([90,0,0])
cylinder(r=X_nut_screw_diam/2,h=40,center=true,$fn=20);
}
}
module X_carriage(show_printbed = 0, show_support = 1) {
if(show_printbed) {
//for display only, doesn't contribute to final object
translate([0,0,-lbearing_holder_width/2])
build_plate(3,110,140);
}
difference() {
union() {
// Origin is set on the base of the Z threaded rod
// ---------- Support for the X nut -------------
translate([-X_rod_sep_real/2,-lbearing_holder_length/2+X_axis_nut_support_thickness/2+0,0]) {
rotate([180,235,0]){ X_nut_holder();
}
}
// Now, the origin is set on the top smooth rod, and we make a 45deg turn
translate([-X_rod_sep_real/2,0,X_rod_sep_real])
rotate([0,45,0]) {
// --------- Linear bearing supports ------------
lm8uu_bearing_holder_XZ(lbearing_holder_length);
translate([X_rod_sep_real_diag,0,0])
lm8uu_bearing_holder_XZ(lbearing_holder_length);
difference() {
union() { // Join both linear bearing holders
translate([X_rod_sep_real_diag/2,0,lbearing_holder_height/4+2])
cube([X_rod_sep_real_diag+8,lbearing_holder_length,lbearing_holder_height/2],center=true);
rotate([0,-45,0]) // Draw a cube for the Z nut holder
translate([M8_nut_diameter,0,0])
cube([M8_nut_diameter*1.5,lbearing_holder_length,lbearing_holder_height/2],center=true);
}
// Leave clear the inside of the bearing holders
rotate([90,0,0]) {
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
translate([X_rod_sep_real_diag,0,0])
cylinder(r=lbearing_holder_extDiam-1, h=lbearing_holder_length+0.1, center=true, $fn=40);
}
}
}
// ------- Z smooth rods holder -------
translate([0,Z_smooth_rods_sep/2,30/2])
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
translate([0,-Z_smooth_rods_sep/2,30/2])
cube([M8_rod_diam+9,M8_rod_diam+5,50],center=true);
if(show_support) translate([0,0,-10+2/2])
cube([M8_rod_diam+9,lbearing_holder_length,2],center=true);
} // End of union
// -------- Z axis rod holes --------
translate([0,0,40-M8_nut_height_Z])
cylinder(r=M8_nut_diameter/2,h=100,$fn=6);// Nut holder (Z)
rotate([90,0,0]) {
translate([0,70/2-5,0]) // --- Hole for the threaded rod ---
rodHole(len=50,radius=M8_rod_diam/2+2, truncateMM=2.5);
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
rodHole(len=Z_smooth_rods_len);
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
rodHole(len=Z_smooth_rods_len);
}
} // End of difference
}
module X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 0) {
X_carriage(show_printbed);
if(show_Xrods){
// ---- Rods (for reference) ----
translate([-X_rod_sep_real/2,0,0]) {
color([0.5,0.5,0.5]) rod(len=100);
}
translate([-X_rod_sep_real/2,0,X_rod_sep_real]) {
rod(len=100);
}
translate([X_rod_sep_real/2,0,0]) {
rod(len=100);
}
}
if(show_Zrods)
translate([0,0,0])
rotate([90,0,0]) {
translate([0,Z_threaded_rod_len/2-10,0])
color([0.5,0.5,0.5]) rod(len=Z_threaded_rod_len);
translate([0,Z_smooth_rods_len/2-5,Z_smooth_rods_sep/2])
rod(len=Z_smooth_rods_len);
translate([0,Z_smooth_rods_len/2-5,-Z_smooth_rods_sep/2])
rod(len=Z_smooth_rods_len);
}
}
module X_carriage_print_plate() {
//for display only, doesn't contribute to final object
build_plate(3,110,140);
translate([0,0,lbearing_holder_length/2])
rotate([90,0,0])
X_carriage(show_printbed = 0, show_support = 1);
}
X_carriage_assembled(show_printbed = 0,show_Xrods = 1,show_Zrods = 0);
//X_carriage_print_plate();
//uncomment the line below to get the x nut cover
module backlash2(){
translate([0,SPRING_LEN+M8_nut_diameter/2,0])
X_nut_holder_cover_antibacklash_base();
}
module backlash1(){
union(){
mirror([0,1,0])
translate([0,0,-0.1])
rotate([0,0,0])
X_nut_holder_cover_antibacklash_base();
}
}
module antibacklash_cover(){
difference(){
union(){
//front left nut
backlash1();
//front right nut
backlash2();
//back left nut
mirror([0,0,1])
backlash1();
//Middle body
difference(){
translate([0,SPRING_LEN/2+5,-M8_nut_diameter/2])
cube([M8_nut_diameter+8,SPRING_LEN-5,M8_nut_diameter/2],center=true);
translate([0,SPRING_LEN,0])
spring(SPRING_LEN-5);
}
}
//triming to save plastic
translate([0,0,-M8_nut_diameter-2])
cube([M8_nut_diameter+10,13*10,M8_nut_diameter],center=true);
translate([0,0,M8_nut_diameter+2])
cube([M8_nut_diameter+10,13*10,M8_nut_diameter],center=true);
}
}
#translate([-X_rod_sep_real/2-.1,-lbearing_holder_length/2+X_axis_nut_support_thickness/2+SPRING_LEN+7.5 ,0]) {
rotate([180,235,0])
antibacklash_cover();
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,178 @@
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
// Created by Carlosgs (http://carlosgs.es)
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
// History:
// - (05/25/2013) Added @yopero's four screw suggestion for the motor stand
// - (05/28/2013) Added @yopero's four screw suggestion for the idle stand
use <../libs/obiscad/bcube.scad>
use <../libs/build_plate.scad>
bottom_thickness = 4;
base_width = 20;
base_length = 25;
base_screw_diameter = 5;
motor_width = 43;
motor_length = 49; // not used
motor_screw_distance = 31.3;
motor_center_diameter = 23;
motor_screw_diameter = 3.7;
motor_screw_head_diameter = 8;
motor_adjust_margin = 3;
bearing_diameter = 21.8;
M8_rod_diameter = 8.2;
axis_distance = 32;
wall_thickness = 5;
wall_height = 45;
wall_width = 70;
idler_width = 25;
wall_extraWidth_left = base_width+5;
wall_extraWidth_right = 5;
totalWallWidth = wall_width+wall_extraWidth_left+wall_extraWidth_right;
module motorHolesY() {
// Hole for the motor shaft
hull() {
translate([0,motor_adjust_margin/2,0])
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
translate([0,-motor_adjust_margin/2,0])
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
}
// Screws for holding the motor
for(i=[-1,1]) for(j=[-1,1])
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
hull() {
translate([0,motor_adjust_margin/2,0])
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
translate([0,-motor_adjust_margin/2,0])
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
}
hull() {
translate([0,motor_adjust_margin/2,0])
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
translate([0,-motor_adjust_margin/2,0])
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
}
}
}
module motor_stand_no_base(with_motor=true) {
difference() {
union(){
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,wall_thickness/2])
bcube([wall_height,totalWallWidth,wall_thickness],cr=4,cres=10);
//Extra with for the stand
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,-wall_thickness/2])
bcube([wall_height,totalWallWidth,wall_thickness*2],cr=4,cres=10);
}
// Position relative to motor shaft
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
if(with_motor)
motorHolesY();
// Bearing holes
rotate([0,0,15]) translate([0,axis_distance,0]) {
#cylinder(r=(M8_rod_diameter*2)/2,h=100*wall_thickness,center=true,$fn=40);
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
}
//Threaded rods
#translate([0,-64,0])rotate([0,0,15]) translate([0,axis_distance,0]) {
cylinder(r=(M8_rod_diameter)/2,h=100*wall_thickness,center=true,$fn=40);
}
} // End of translate relative to motor shaft
} // End of difference
}
module holder(h=35,noScrews=false,base_width_inc=0) {
difference() {
union() {
translate([wall_height-bottom_thickness,0]) {
if(!noScrews) cube([bottom_thickness,base_width+base_width_inc,base_length]);
hull() {
cube([bottom_thickness,5,base_length]);
translate([-h,0,0])
cube([0.001,5,0.001]);
}
}
}
// --- screws for the base ---
if(!noScrews) translate([wall_height,base_width/2+2.5,15])
rotate([0,90,0]) {
translate([-5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
translate([5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
}
} // End of difference
}
module motor_stand_base(){
union(){
translate([0,wall_width]) holder(noScrews=true);
translate([0,52.4-5/2]) holder(h=15,base_width_inc=1);
}}
module motor_stand(with_motor=true) {
union() {
motor_stand_no_base(with_motor);
translate([0,wall_width])
holder(noScrews=true);
translate([0,-wall_width/3-1.67])
holder(h=25,noScrews=true);
translate([0,52.4-5/2])
holder(h=15,base_width_inc=1);
translate([0,0])
scale([1,-1,1])
holder(h=15,base_width_inc=1);
}
}
module idle_stand() {
union() {
intersection() { // Remove the motor part
motor_stand(with_motor=false);
translate([wall_height/2,wall_width/2+52.4-(wall_width+wall_extraWidth_right-52.4),wall_thickness/2])
bcube([wall_height,wall_width,100],cr=4,cres=10);
}
translate([0,wall_width+5-2*(wall_width+wall_extraWidth_right-52.4)]) holder(noScrews=true);
translate([0,52.4+5/2]) scale([1,-1,1]) holder(h=15,base_width_inc=1);
}
}
module motor_stand_front(){
motor_stand();
}
module motor_stand_back(){
translate([0,0,0])
rotate([0,180,0])
mirror([1,0,0]){
motor_stand();
}
}
//for display only, doesn't contribute to final object
//build_plate(3,200,200);
//motor_stand_front();
motor_stand_back();

View File

@ -0,0 +1,178 @@
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
// Created by Carlosgs (http://carlosgs.es)
// Modified by @yopero 05/27/2013
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
use <../libs/obiscad/bcube.scad>
use <../libs/build_plate.scad>
bottom_thickness = 4;
base_width = 20;
base_length = 25;
base_screw_diameter = 5;
motor_width = 43;
motor_length = 49; // not used
motor_screw_distance = 31.3;
motor_center_diameter = 23;
motor_screw_diameter = 3.7;
motor_screw_head_diameter = 8;
bearing_diameter = 22.4;
M8_rod_diameter = 8.2;
axis_distance = 32;
wall_thickness = 5;
wall_height = 45;
wall_width = 90;
idler_width = 25;
module motor_stand_no_base(with_motor=true) {
difference() {
translate([wall_height/2,wall_width/2,wall_thickness/2])
bcube([wall_height,wall_width,wall_thickness],cr=4,cres=10);
// Position relative to motor shaft
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
if(with_motor) {
// Hole for the motor shaft
translate([0,-wall_width/2,0])
cube([20,wall_width,10*wall_thickness],cr=4,cres=10,center=true);
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
// Screws for holding the motor
for(i=[-1,1]) for(j=[-1,1])
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
}
} // End if with motor
// Bearing holes
rotate([0,0,15]) translate([0,axis_distance,0]) {
cylinder(r=(M8_rod_diameter*2)/2,h=10*wall_thickness,center=true,$fn=40);
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
}
} // End of translate relative to motor shaft
} // End of difference
}
module motor_stand(with_motor=true) {
union() {
#motor_stand_no_base(with_motor);
difference() {
union() {
translate([wall_height-bottom_thickness,wall_width-base_width]) {
cube([bottom_thickness,base_width,base_length]);
hull() {
cube([bottom_thickness,5,base_length]);
translate([-18,0,0])
cube([0.001,5,0.001]);
}
}
}
// --- screws for the base ---
translate([wall_height,wall_width-5,15])
rotate([0,90,0]) {
translate([-5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
translate([5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
}
} // End of difference
}
}
module idle_stand() {
intersection() { // Remove the motor part
motor_stand(with_motor=false);
translate([wall_height/2,wall_width/2+35,wall_thickness/2])
bcube([wall_height,wall_width,100],cr=4,cres=10);
}
}
//for display only, doesn't contribute to final object
build_plate(3,200,200);
union(){
cuerpo_extra();
pata_extra();
motor_stand();
relleno();
translate([45,0,0])
mirror([]){
relleno();
}
}
module relleno(){
translate([0,-5,0])
cube([4.5,2+5,5]);
cube([1,5,5]);
}
//idle_stand();
module motor_stand1(with_motor=true) {
union() {
//motor_stand_no_base(with_motor);
difference() {
union() {
translate([wall_height-bottom_thickness,wall_width-base_width]) {
cube([bottom_thickness,base_width,base_length]);
hull() {
cube([bottom_thickness,5,base_length]);
translate([-18,0,0])
cube([0.001,5,0.001]);
}
}
}
// --- screws for the base ---
translate([wall_height,wall_width-5,15])
rotate([0,90,0]) {
translate([-5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
translate([5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=6);
}
} // End of difference
}
}
module extra(){
union(){
pata_extra();
cuerpo_extra();
}
}
module cuerpo_extra(){
translate([45/2,20/2-20,5/2])
bcube([45,20,5],,cr=4,cres=10);
}
module pata_extra(){
mirror([0,0,1]){
rotate([-180,0,0]){
translate([0,-70,0])
motor_stand1();
}
}
}

View File

@ -0,0 +1,178 @@
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
// Created by Carlosgs (http://carlosgs.es)
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
// History:
// - (05/25/2013) Added @yopero's four screw suggestion for the motor stand
// - (05/28/2013) Added @yopero's four screw suggestion for the idle stand
use <../libs/obiscad/bcube.scad>
use <../libs/build_plate.scad>
bottom_thickness = 4;
base_width = 20;
base_length = 25;
base_screw_diameter = 5;
motor_width = 43;
motor_length = 49; // not used
motor_screw_distance = 31.3;
motor_center_diameter = 23;
motor_screw_diameter = 3.7;
motor_screw_head_diameter = 8;
motor_adjust_margin = 3;
bearing_diameter = 21.8;
M8_rod_diameter = 8.2;
axis_distance = 32;
wall_thickness = 5;
wall_height = 45;
wall_width = 70;
idler_width = 25;
wall_extraWidth_left = base_width+5;
wall_extraWidth_right = 5;
totalWallWidth = wall_width+wall_extraWidth_left+wall_extraWidth_right;
module motorHolesY() {
// Hole for the motor shaft
hull() {
translate([0,motor_adjust_margin/2,0])
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
translate([0,-motor_adjust_margin/2,0])
cylinder(r=motor_center_diameter/2,h=10*wall_thickness,center=true,$fn=40);
}
// Screws for holding the motor
for(i=[-1,1]) for(j=[-1,1])
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
hull() {
translate([0,motor_adjust_margin/2,0])
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
translate([0,-motor_adjust_margin/2,0])
cylinder(r=motor_screw_diameter/2,h=10*wall_thickness,center=true,$fn=40);
}
hull() {
translate([0,motor_adjust_margin/2,0])
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
translate([0,-motor_adjust_margin/2,0])
cylinder(r=motor_screw_head_diameter/2,h=10*wall_thickness,center=false,$fn=40);
}
}
}
module motor_stand_no_base(with_motor=true) {
difference() {
union(){
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,wall_thickness/2])
bcube([wall_height,totalWallWidth,wall_thickness],cr=4,cres=10);
//Extra with for the stand
translate([wall_height/2,totalWallWidth/2-wall_extraWidth_left,-wall_thickness/2])
bcube([wall_height,totalWallWidth,wall_thickness*2],cr=4,cres=10);
}
// Position relative to motor shaft
translate([motor_width/2,motor_width/2,wall_thickness/2]) {
if(with_motor)
motorHolesY();
// Bearing holes
rotate([0,0,15]) translate([0,axis_distance,0]) {
#cylinder(r=(M8_rod_diameter*2)/2,h=100*wall_thickness,center=true,$fn=40);
cylinder(r=bearing_diameter/2,h=10*wall_thickness,center=false,$fn=60);
}
//Threaded rods
#translate([0,-64,0])rotate([0,0,15]) translate([0,axis_distance,0]) {
cylinder(r=(M8_rod_diameter)/2,h=100*wall_thickness,center=true,$fn=40);
}
} // End of translate relative to motor shaft
} // End of difference
}
module holder(h=35,noScrews=false,base_width_inc=0) {
difference() {
union() {
translate([wall_height-bottom_thickness,0]) {
if(!noScrews) cube([bottom_thickness,base_width+base_width_inc,base_length]);
hull() {
cube([bottom_thickness,5,base_length]);
translate([-h,0,0])
cube([0.001,5,0.001]);
}
}
}
// --- screws for the base ---
if(!noScrews) translate([wall_height,base_width/2+2.5,15])
rotate([0,90,0]) {
translate([-5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
translate([5,0,0])
cylinder(r=base_screw_diameter/2,h=100,center=true,$fn=7);
}
} // End of difference
}
module motor_stand_base(){
union(){
translate([0,wall_width]) holder(noScrews=true);
translate([0,52.4-5/2]) holder(h=15,base_width_inc=1);
}}
module motor_stand(with_motor=true) {
union() {
motor_stand_no_base(with_motor);
translate([0,wall_width])
holder(noScrews=true);
translate([0,-wall_width/3-1.67])
holder(h=25,noScrews=true);
translate([0,52.4-5/2])
holder(h=15,base_width_inc=1);
translate([0,0])
scale([1,-1,1])
holder(h=15,base_width_inc=1);
}
}
module idle_stand() {
union() {
intersection() { // Remove the motor part
motor_stand(with_motor=false);
translate([wall_height/2,wall_width/2+52.4-(wall_width+wall_extraWidth_right-52.4),wall_thickness/2])
bcube([wall_height,wall_width,100],cr=4,cres=10);
}
translate([0,wall_width+5-2*(wall_width+wall_extraWidth_right-52.4)]) holder(noScrews=true);
translate([0,52.4+5/2]) scale([1,-1,1]) holder(h=15,base_width_inc=1);
}
}
module motor_stand_front(){
motor_stand();
}
module motor_stand_back(){
translate([0,0,-140])
rotate([0,180,0])
mirror([1,0,0]){
motor_stand();
}
}
//for display only, doesn't contribute to final object
//build_plate(3,200,200);
motor_stand_front();
motor_stand_back();

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,65 @@
//cube([50,10,50]);
module hexagon(radius)
{
circle(r=radius,$fn=6);
}
module shell(radius)
{
difference()
{
hexagon(radius*1.2); // base
hexagon(radius*1); // hole
}
}
module piece(radius)
{
translate([0, 0, -radius/12])
{
scale([1,1,0.5])
{
hexagon(radius);
}
}
}
module shell_with_piece(radius)
{
shell(radius);
piece(radius);
}
function column_to_offset(column, offset) = (column % 2) * offset;
module translate_to_hex(x_coord, y_coord, hex_width)
{
translate([x_coord*hex_width*1.75, y_coord*hex_width*2+column_to_offset(x_coord, hex_width), 0])
{
child(0);
}
}
module lattice(rows, columns, hex_width)
{
for(x = [0:columns-1])
{
for(y = [0:rows-1])
{
translate_to_hex(x, y, hex_width)
{
shell(hex_width);
}
}
}
}
linear_extrude(height=100)
{
lattice(4, 5, 20);
// translate_to_hex(2, 2, 4)
// {
// piece(4);
// }
}

View File

@ -0,0 +1,211 @@
// Cyclone PCB Factory: a 3D printable CNC machine for PCB manufacture
// Created by Carlosgs (http://carlosgs.es)
// License: Attribution - Share Alike - Creative Commons (http://creativecommons.org/licenses/by-sa/3.0/)
use <../libs/obiscad/bcube.scad>
use <../libs/obiscad/bevel.scad>
use <../libs/build_plate.scad>
module frame(with_motor = 1, show_printbed = 0) {
layer_thickness = 0.4;
motor_width = 43+1;
motor_length = 49; // not used
motor_screw_distance = 31.3;
motor_center_diameter = 23;
motor_screw_diameter = 4;
motor_screw_head_diameter = 8;
motor_stand_thickness = 5;
bearing_diameter = 22.4;
M8_rod_diam = 8.2;
X_smooth_rods_sep = 50;
X_smooth_rods_sep_projected = sqrt((X_smooth_rods_sep*X_smooth_rods_sep)/2); // Be careful with this measure, it is not properly named since it is used with the following offset:
smooth_rod_margin = 1;
smooth_rod_screw_sep = 8;
smooth_rod_screw_diam = 3;
smooth_rod_screw_len = 7;
X_rods_corner_shaft_size = X_smooth_rods_sep*0.65;
frame_thickness = 10;
frame_width = 90;
frame_height = 135;
frame_corner_radius = 5;
X_threaded_rod_posX = X_smooth_rods_sep_projected;
X_threaded_rod_posY = X_smooth_rods_sep_projected;
motor_axis_distance = 32;
motor_axis_angle = 15;
X_motor_gear_margin = 35;
frame_hole_height = 80;
bottom_thickness = 5;
wall_thickness = 5;
base_screw_diameter = 5;
base_screw_distance = 33;
Y_rod_height = 40;
Y_rod_dist_from_wall = 15;
Y_rod_support_lenght = Y_rod_dist_from_wall+smooth_rod_screw_sep+smooth_rod_screw_diam;
if(show_printbed) {
//for display only, doesn't contribute to final object
translate([frame_width/2,frame_height/2,0]) build_plate(3,110,140);
}
union() {
difference() {
// --------- Main frame --------- //
translate([frame_width/2,frame_height/2,frame_thickness/2])
cube([frame_width,frame_height,frame_thickness],center=true);
// --------- Smooth Y rods --------- //
translate([X_smooth_rods_sep_projected,-smooth_rod_margin,0]) {
cylinder(r=M8_rod_diam/2,h=10*frame_thickness,center=true,$fn=40);
// Screws
rotate([90,0,0]) translate([0,frame_thickness/2,0]) {
translate([-smooth_rod_screw_sep,0,0])
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
translate([smooth_rod_screw_sep,0,0])
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
}
}
translate([-smooth_rod_margin,X_smooth_rods_sep_projected,0]) {
cylinder(r=M8_rod_diam/2,h=10*frame_thickness,center=true,$fn=40);
// Screws
rotate([0,90,0]) translate([-frame_thickness/2,0,0]) {
translate([0,-smooth_rod_screw_sep,0])
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
translate([0,smooth_rod_screw_sep,0])
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
}
}
// --------- Holes to save plastic --------- //
// Corner shaft
rotate([0,0,45])
cube([X_rods_corner_shaft_size,X_rods_corner_shaft_size,frame_thickness*3],center=true);
// Hole next to the corner shaft
rotate([0,0,45]) translate([28,0,0])
bcube([15,25,frame_thickness*3],cr=2,cres=10);
// Hole to remove the motor part
if(with_motor==0)
translate([frame_width,0,0])
bcube([frame_width-10,frame_hole_height+bottom_thickness,frame_thickness*3],cr=2,cres=10);
// --------- Large hole in the frame --------- //
translate([(frame_width-wall_thickness)/2,frame_height-frame_hole_height/2-bottom_thickness,0])
bcube([frame_width-wall_thickness-frame_thickness,frame_hole_height,frame_thickness*3],cr=2,cres=10);
// --------- Screws in the base --------- //
rotate([90,0,0]) translate([frame_width/2,frame_thickness/2,-frame_height]) {
translate([-base_screw_distance,0,0])
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
translate([base_screw_distance*0.8,0,0])
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
translate([base_screw_distance*0.2,0,0])
cylinder(r=base_screw_diameter/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
}
// --------- X motor assembly, position relative to X threaded rod --------- //
translate([X_threaded_rod_posX,X_threaded_rod_posY,0]) {
// Threaded Y rod hole
translate([0,0,(motor_stand_thickness/2)+layer_thickness])
cylinder(r=(M8_rod_diam*2)/2,h=10*frame_thickness,center=false,$fn=40);
// Threaded X rod bearing hole
translate([0,0,0])
cylinder(r=bearing_diameter/2,h=motor_stand_thickness,center=true,$fn=40);
if(with_motor) {
// Center is the motor shaft, and we apply the rotation keeping the motor horizontal
// Screws for holding the motor
rotate([0,0,-motor_axis_angle]) translate([motor_axis_distance,0,0]) rotate([0,0,motor_axis_angle]) {
for(i=[-1,1])
for(j=[-1,1]) {
translate([i*motor_screw_distance/2,j*motor_screw_distance/2,0]) {
// Screw hole
translate([0,0,motor_stand_thickness/2])
cylinder(r=motor_screw_diameter/2,h=10*frame_thickness,center=true,$fn=40);
}
}
// Hole for the motor shaft
translate([frame_width/2,0,0])
cube([frame_width,20,10*motor_stand_thickness],cr=4,cres=10,center=true);
cylinder(r=motor_center_diameter/2,h=10*motor_stand_thickness,center=true,$fn=40);
// Level the motor area
translate([0,0,motor_stand_thickness*2])
bcube([motor_width,motor_width,frame_thickness],cr=5,cres=10);
} // End of centering over motor shaft
} // End of if(with_motor)
} // End of centering over X threaded rod
} // End of difference() command
// --------- Support column for the triangular structure --------- //
translate([frame_width/4,frame_height-frame_hole_height/2-bottom_thickness,frame_thickness/2])
rotate([0,0,-23])
cube([wall_thickness,sqrt((frame_width*frame_width)/4+(frame_hole_height*frame_hole_height)),frame_thickness],center=true);
// --------- Bevel base supports --------- //
translate([wall_thickness/2,frame_height,frame_thickness-0.5])
rotate([90,0,-90])
bconcave_corner(cr=Y_rod_support_lenght-0.5, cres=0, l=wall_thickness, th=0.5, ext_corner=true);
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-0.5])
rotate([90,0,-90])
bconcave_corner(cr=Y_rod_support_lenght-0.5, cres=0, l=frame_thickness, th=0.5, ext_corner=true);
// Long bevel
translate([frame_width/2,frame_height,frame_thickness-0.5])
rotate([90,0,-90])
bconcave_corner(cr=wall_thickness-0.5, cres=0, l=frame_width, th=0.5, ext_corner=true);
// --------- Bevel Y rod support --------- //
translate([frame_width-frame_thickness/2,frame_height,frame_thickness-2])
translate([0,-Y_rod_height+smooth_rod_margin,0]) {
difference() {
rotate([90,0,90]) // Bevel
bconcave_corner(cr=Y_rod_support_lenght-smooth_rod_screw_len, cres=0, l=frame_thickness, th=smooth_rod_screw_len, ext_corner=true);
translate([0,-smooth_rod_margin,Y_rod_dist_from_wall]) rotate([0,90,0]) {
cylinder(r=M8_rod_diam/2,h=10*frame_thickness,center=true,$fn=40);
// Screws
rotate([90,0,0]) {
translate([-smooth_rod_screw_sep,0,-1])
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
translate([smooth_rod_screw_sep,0,-1])
cylinder(r=smooth_rod_screw_diam/2,h=2*smooth_rod_screw_len,center=true,$fn=6);
}
}
}
}
} // End of union() command
}
// Toggle parameters and mirror to create the other side part
frame(with_motor = 1, show_printbed = 1);
//scale([-1,1,1]) frame(with_motor = 0, show_printbed = 1);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff