Added simple template
							parent
							
								
									4c7aa9426c
								
							
						
					
					
						commit
						19c7f73a2a
					
				| 
						 | 
				
			
			@ -0,0 +1,229 @@
 | 
			
		|||
// 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/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 <../Y_axis/linear_bearing_holder.scad>
 | 
			
		||||
use <../Y_axis/Y_nut_holder.scad>
 | 
			
		||||
use <../XZ_axis/X_carriage.scad>
 | 
			
		||||
use <../XZ_axis/Z_carriage.scad>
 | 
			
		||||
 | 
			
		||||
X_axis_sep = 210;
 | 
			
		||||
Y_axis_sep = 210;
 | 
			
		||||
Y_threaded_rod_length = (Y_axis_sep/2)+40;
 | 
			
		||||
Y_linear_bearing_dist = Y_axis_sep/2-25-20;
 | 
			
		||||
 | 
			
		||||
Y_rod_height = 40;
 | 
			
		||||
Y_rod_dist_from_workbed = 12.5;
 | 
			
		||||
 | 
			
		||||
Y_threaded_rod_height = Y_rod_height-8.218; // Obtained "by sight"
 | 
			
		||||
Y_threaded_rod_dist_from_workbed = (Y_rod_height-Y_threaded_rod_height)+Y_rod_dist_from_workbed;
 | 
			
		||||
 | 
			
		||||
workbed_X = X_axis_sep+20;
 | 
			
		||||
workbed_Y = 122;//Y_linear_bearing_dist+25+20-3;
 | 
			
		||||
workbed_thickness = 10;
 | 
			
		||||
 | 
			
		||||
X_threaded_rod_height = 99.65;
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
module frame_right() {
 | 
			
		||||
  color([1,0.8,0]) rotate([0,0,90]) scale([-1,1,1]) translate([-85,-23,135]) rotate([-90,0,0]) frame(with_motor = 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module frame_left() {
 | 
			
		||||
  color([1,1,0]) rotate([0,0,90]) scale([-1,-1,1]) translate([-85,-23,135]) rotate([-90,0,0]) frame(with_motor = 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module Y_rod_idler_right() {
 | 
			
		||||
  color([1,1,1]) rotate([0,0,90]) translate([-26,-17,39]) rotate([-90,0,0]) Y_rod_idler();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module Y_motor_stand() {
 | 
			
		||||
  color([0,1,1]) rotate([0,90,0]) translate([-45,0,52.4]) rotate([-90,0,0]) 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();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module linear_bearing_holder() {
 | 
			
		||||
  color([1,0.5,0])
 | 
			
		||||
    rotate([0,-90,-90]) translate([3,0,0]) lm8uu_bearing_holder();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module Y_nut_holder() {
 | 
			
		||||
  color([0.5,0.5,0])
 | 
			
		||||
     nut_holder_positioned();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module cnc_workbed() {
 | 
			
		||||
 | 
			
		||||
  // ---- work bed ----
 | 
			
		||||
  translate([0,0,-workbed_thickness/2+1]) {
 | 
			
		||||
    color([0.5,1,0.5,0.5]) { // Transparent color
 | 
			
		||||
      %cube([workbed_X,workbed_Y,workbed_thickness],center=true);
 | 
			
		||||
      difference() {
 | 
			
		||||
        cube([workbed_X,workbed_Y,workbed_thickness],center=true);
 | 
			
		||||
        cube([workbed_X-1,workbed_Y-1,workbed_thickness+1],center=true);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // --- Y axis nut holder
 | 
			
		||||
  rotate([0,0,180])
 | 
			
		||||
    Y_nut_holder();
 | 
			
		||||
 | 
			
		||||
  // ---- work bed linear bearing position ----
 | 
			
		||||
  translate([-X_axis_sep/2,-Y_linear_bearing_dist/2,0])
 | 
			
		||||
    rotate([0,0,180])
 | 
			
		||||
      linear_bearing_holder();
 | 
			
		||||
  translate([-X_axis_sep/2,Y_linear_bearing_dist/2,0])
 | 
			
		||||
    rotate([0,0,180])
 | 
			
		||||
      linear_bearing_holder();
 | 
			
		||||
  translate([X_axis_sep/2,-Y_linear_bearing_dist/2,0])
 | 
			
		||||
    linear_bearing_holder();
 | 
			
		||||
  translate([X_axis_sep/2,Y_linear_bearing_dist/2,0])
 | 
			
		||||
    linear_bearing_holder();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module X_carriage() {
 | 
			
		||||
  translate([0,X_rod_sep_real/2,0])
 | 
			
		||||
    rotate([0,0,90])
 | 
			
		||||
      X_carriage_assembled(show_printbed = 0, show_Xrods = 0, show_Zrods = 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module Z_carriage_piece() {
 | 
			
		||||
  translate([0,0,41])
 | 
			
		||||
    rotate([0,0,90])
 | 
			
		||||
        Z_carriage_assembled();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module cnc(show_printbed = 1) {
 | 
			
		||||
  // ---- build plate ----
 | 
			
		||||
  if(show_printbed) {
 | 
			
		||||
  //for display only, doesn't contribute to final object
 | 
			
		||||
  translate([X_axis_sep/2,Y_axis_sep/2,0])
 | 
			
		||||
    build_plate(3,297,210); // A4
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // ---- main frames ----
 | 
			
		||||
  frame_left();
 | 
			
		||||
  translate([X_axis_sep,0,0])
 | 
			
		||||
    frame_right();
 | 
			
		||||
 | 
			
		||||
  // ---- Y rod idlers ----
 | 
			
		||||
  translate([0,Y_axis_sep,0]) {
 | 
			
		||||
    Y_rod_idler_left();
 | 
			
		||||
    translate([X_axis_sep,0,0])
 | 
			
		||||
      Y_rod_idler_right();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // ---- Y threaded rod motor and idler ----
 | 
			
		||||
  translate([X_axis_sep/2,Y_axis_sep/2,0]) {
 | 
			
		||||
    translate([0,Y_threaded_rod_length/2,0]) Y_motor_stand();
 | 
			
		||||
    translate([0,-Y_threaded_rod_length/2,0]) Y_idle_stand();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module reference(dist=200,offset=0) {
 | 
			
		||||
  lineWidth = 0.5;
 | 
			
		||||
  thickness = 5;
 | 
			
		||||
  textSize = 5;
 | 
			
		||||
  translate([offset,0,0]) write(str(dist," mm"),t=thickness,h=textSize,center=true);
 | 
			
		||||
  translate([0,textSize,0]) {
 | 
			
		||||
    cube([dist,lineWidth,thickness],center=true);
 | 
			
		||||
    translate([dist/2,0,0]) cube([lineWidth,5,thickness],center=true);
 | 
			
		||||
    translate([-dist/2,0,0]) cube([lineWidth,5,thickness],center=true);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module cnc_base_template() {
 | 
			
		||||
  projection(cut=true) translate([0,0,-1]) {
 | 
			
		||||
    cnc(); // Main structure
 | 
			
		||||
    translate([X_axis_sep/2,Y_axis_sep/2,0]) { // Reference rulers
 | 
			
		||||
      reference(X_axis_sep,60);
 | 
			
		||||
      translate([-20,0,0])
 | 
			
		||||
        rotate([0,0,90])
 | 
			
		||||
          reference(Y_threaded_rod_length,40);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module cnc_workbed_template() {
 | 
			
		||||
  projection(cut=true) translate([0,0,-1]) {
 | 
			
		||||
    cnc_workbed(); // Main structure
 | 
			
		||||
    translate([0,-20,0])
 | 
			
		||||
      reference(workbed_X,60);
 | 
			
		||||
    translate([-20,0,0])
 | 
			
		||||
      rotate([0,0,90])
 | 
			
		||||
        reference(workbed_Y,40);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module rod(len=100) {
 | 
			
		||||
	color([0.8,0.8,0.8])
 | 
			
		||||
     rotate([90,0,0])
 | 
			
		||||
       cylinder(r=8/2,h=len,center=true,$fn=30);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module cnc_assembled(Y_offset=0,X_offset=0,Z_offset=0) {
 | 
			
		||||
  translate([-X_axis_sep/2,-Y_axis_sep/2])
 | 
			
		||||
    cnc();
 | 
			
		||||
  translate([0,0,Y_rod_height]) { // Y rod height, centered
 | 
			
		||||
    // --- workbed ---
 | 
			
		||||
    translate([0,Y_offset,12.5])
 | 
			
		||||
      rotate([0,180,0])
 | 
			
		||||
        cnc_workbed();
 | 
			
		||||
 | 
			
		||||
    // --- 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);
 | 
			
		||||
 | 
			
		||||
    // --- Y smooth rods ---
 | 
			
		||||
    translate([X_axis_sep/2,0,0])
 | 
			
		||||
      rod(Y_axis_sep+15);
 | 
			
		||||
    translate([-X_axis_sep/2,0,0])
 | 
			
		||||
      rod(Y_axis_sep+15);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  translate([0,-19,99.65]) { // X threaded rod height, centered over SMOOTH rod
 | 
			
		||||
    // --- X axis ---
 | 
			
		||||
    translate([0,-X_rod_sep_real,0]) {
 | 
			
		||||
      translate([-X_offset,0,0]) {
 | 
			
		||||
        X_carriage();
 | 
			
		||||
        translate([0,X_rod_sep_real/2,Z_offset])
 | 
			
		||||
          Z_carriage_piece();
 | 
			
		||||
      }
 | 
			
		||||
      rotate([0,0,90])
 | 
			
		||||
        color([0.5,0.5,0.5]) rod(X_axis_sep+80);
 | 
			
		||||
      translate([0,0,X_rod_sep_real])
 | 
			
		||||
        rotate([0,0,90])
 | 
			
		||||
          rod(X_axis_sep+60);
 | 
			
		||||
    }
 | 
			
		||||
    rotate([0,0,90])
 | 
			
		||||
      rod(X_axis_sep+60);/// WARNING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 | 
			
		||||
      /// INCOHERENT X_axis_sep!!!!!!!!!!!
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // --- Wood base ---
 | 
			
		||||
  translate([0,0,-15/2-0.1])
 | 
			
		||||
    color([0.7,0.6,0.4]) 
 | 
			
		||||
      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=10);
 | 
			
		||||
 | 
			
		||||
//rotate([0,0,90]) cnc_base_template(); // So the generated dxf matches inkscape's default orientation
 | 
			
		||||
//  cnc_workbed_template();
 | 
			
		||||
		Loading…
	
		Reference in New Issue