BREAKING NEWS

22 April 2016

Arduino CNC Project

For the final draft of this blog, a numerical control will be made by the computer capable of integrating stepper motors with an aluminum module for the respective movements in three dimensions (in this case 2 X and Y).



The information received by the Arduino will be transmitted through an interface graphical user made in processing, which has the functionality of an automatic mode to sweep through space.

The graphical interface has an automatic mode, which measures the object functions by introducing scanning on the three movements X, Y, and Z. 

The communication between the PC and the Arduino is serial; the Arduino contains a firmware which receives the information on a function, which receives the communication frame that reflects the value that corresponds to each of the motors for the respective movement.


The mode works like a sweep, which can be seen in the following figure:

MATERIALS:

The materials used for the final project are:

  • 2 --- Stepper Motors 1.8 ° / 200 steps
  • 2 --- Driver L293D 
  • 1 --- Source Computer
  • 4 --- Transistors BC547
  • 4 --- 10k Resistors
  • 4 --- resistors 1k
  • 1 --- Arduino Uno R3 platform
  • aluminum
  • borneras
  • Cable (connections)

PATTERNS:

Breadboard:










1.Arduino Code
  1. #include <Stepper.h>
  2. int led=12;
  3. int led1=11;
  4. int led2=10;
  5. // Motores Paso a Paso
  6. const int motorX = 140; //(M8=>Paso:1,43mm; 360/1,43=>1mm=252º; 252ºpormm/0,9ºpor paso=280 Pasos por 1mm
  7. const int motorY = 140; //(M8=>Paso:1,43mm; 360/1,43=>1mm=252º; 252ºpormm/1.8ºpor paso=140 Pasos por 1mm
  8. const int motorZ = 140; //(M8=>Paso:1,43mm; 360/1,43=>1mm=252º; 252ºpormm/1.8ºpor paso=140 Pasos por 1mm
  9. // initialize the stepper library on pins 8 through 11:
  10. Stepper mymotorX(motorX, 2,3);  
  11. Stepper mymotorY(motorY, 4,5);
  12. Stepper mymotorZ(motorZ, 6,7);
  13. // ARREGLO Y VARIABLES LECTURA DE PROCESSING PARA SERVOS
  14. int MOTORX=0, MOTORY=0, MOTORZ=0;
  15. int motor[3] = {MOTORX, MOTORY, MOTORZ};
  16. //int antbase=90, anthombro=86, antcodo=150, antmuneca=45, antgiro=157, antgripper=175;
  17. // byte lector
  18. int inByte, x, m, b, h, j, z;
  19. int k=0;
  20. void setup() {
  21.   pinMode(led,OUTPUT);
  22.   pinMode(led1,OUTPUT);
  23.   pinMode(led2,OUTPUT);
  24.   // set the speed at 60 rpm:
  25.   mymotorX.setSpeed(150);
  26.   mymotorY.setSpeed(150);
  27.   mymotorZ.setSpeed(100);
  28.   // initialize the serial port:
  29.   Serial.begin(9600);
  30. }
  31. void loop() {
  32. }
  33. void serialEvent(){
  34.    if (Serial.available() > 0){
  35.     inByte = Serial.read();
  36.     if(inByte == 'M')
  37.       modo_manual();
  38.    }
  39. }
2.Arduino Code
  1. // FUNCION LEER TRAMA  
  2. void modo_manual(){
  3.   while(inByte != 'F'){
  4.     if (Serial.available() > 0){
  5.         inByte = Serial.read();
  6.         motor[x] = inByte;
  7.         x++;
  8.         }
  9.   }
  10.   if(inByte == 'F'){
  11.          x=0;
  12.          //lcd.clear();
  13.          MOTORX = motor[0];
  14.          MOTORY = motor[1];
  15.          MOTORZ = motor[2];
  16.   }
  17.   movpaso(MOTORX,MOTORY,MOTORZ);
  18. }  
  19. void MOV Paso(int MOTORX, int MOTORY, int MOTORZ){
  20.   m=motorX*MOTORX;
  21.   b=motorY*MOTORY;
  22.   h=motorZ*MOTORZ;
  23.   //numero de vueltas en X y Y para hacer el recorrido del objeto
  24.   for (int j=1; j<=((MOTORX/10)+1); j++){
  25.    
  26.     if ((j%2)==1)
  27.     {
  28.       for (int i=0; i <=(1.1*MOTORY); i++){
  29.         mymotorY.step(140);
  30.      
  31.       }
  32.      
  33.     }
  34.     else {
  35.       for (int i=0; i <=(1.1*MOTORY); i++){
  36.         mymotorY.step(-140)
  37.       }
  38.      
  39.     }
  40.     if(j<=(MOTORX/10)){
  41.       for(int n=0;n<11;n++){
  42.         mymotorX.step(140);
  43.        
  44.       }
  45.     }
  46.   }
  47. }
Code Processing 
  1. // LIBRERIAS
  2. import controlP5.*;    
  3. import processing.serial.*;
  4. // CREACION DE OBJETOS
  5. ControlP5 cp5;  
  6. Serial serial;
  7. Textlabel texto1, texto2, texto3, texto4, texto5, texto6; // definir las variables
  8. // TAMAÑO TITULOS
  9. PFont f;
  10. boolean on_off = false;
  11. //BOTONESl
  12. Button envio;
  13. Toggle actauto;
  14. // SLIDERS
  15. Slider movx, movy, movz;
  16. // CAJAS INGRESO DE VALORES
  17. Textfield textb, texth, textc;
  18. // ARREGLO PARA MOTORES PASO A PASO
  19. int MOTORX=0, MOTORY=1, MOTORZ=2;
  20. int[] motor = new int[3];
  21. int var=0;
  22. void setup() {
  23.   size(450, 370);
  24.   background(40);
  25.   smooth();
  26.   // TITULOS
  27.   f = createFont("Arial", 12, true);
  28.   cp5 = new ControlP5(this);
  29.   serial = new Serial(this, Serial.list()[0], 9600);
  30.   // VALORES PREDETERMINADOS PARA LOS MOTORES
  31.    motor[MOTORX]=0;        
  32.    motor[MOTORY]=0;
  33.    motor[MOTORZ]=0;
  34.   //BOTON ENVIAR AUTO
  35.   envio =  cp5.addButton("envio", 1, 310, 125, 50, 20);
  36.   //TOGGLES PARA ACTIVAR MANDOS
  37.   actauto =  cp5.addToggle("on_off", false, 53, 100, 26, 10);
  38.   // INPUT TEXTBOX BASE
  39.   textb =  cp5.addTextfield("ejeX", 100, 125, 50, 20);
  40.   textb.setFocus(true);
  41.   // INPUT TEXTBOX HOMBRO
  42.   texth =  cp5.addTextfield("ejeY", 170, 125, 50, 20);
  43.   texth.setFocus(true);
  44.   // INPUT TEXTBOX CODO
  45.   textc =  cp5.addTextfield("ejeZ", 240, 125, 50, 20);
  46.   textc.setFocus(true);
  47.   // crear texto
  48.   texto1 = cp5.addTextlabel("label")
  49.     .setText("INTERFAZ CNC ANDI")
  50.       .setPosition(60, 30)
  51.         .setColorValue(0xffffffFF)
  52.           .setFont(createFont("Broadway", 30))
  53.             ;
  54.   texto2 = cp5.addTextlabel("label1")
  55.     .setText("Introduzca las coordenadas en mm")
  56.       .setPosition(120, 170)
  57.         .setColorValue(0xffffffFF)
  58.           .setFont(createFont("arial", 12))
  59.             ;
  60.   texto3 = cp5.addTextlabel("label2")
  61.     .setText("Encender el boton ON/OFF para inicializar el modulo")
  62.       .setPosition(80, 190)
  63.         .setColorValue(0xffffffFF)
  64.           .setFont(createFont("arial", 12))
  65.             ;
  66.   // otra forma de crear texto
  67.   texto4 = new Textlabel(cp5, "Estudiante: Andres Felipe Sinisterra", 40, 280, 600, 200); 
  68.   texto4.setFont(createFont("MV Boli", 15));
  69.   texto5 = new Textlabel(cp5, "Ingenieria Electronica", 40, 295, 600, 200);  
  70.   texto5.setFont(createFont("MV Boli", 15));
  71.   texto6 = new Textlabel(cp5, "Decimo semestre", 40, 310, 600, 200);  
  72.   texto6.setFont(createFont("MV Boli", 15));
  73. }
  74. //----------------------------------------------------------------------------------------------
  75. void draw() {
  76.   background(20, 100, 200);  // color de fondo de la ventana
  77.   texto4.draw(this);    // introduce el texto en la ventana
  78.   texto5.draw(this);
  79.   texto6.draw(this);
  80.   textFont(f, 12);  
  81.   fill(255);                        
  82.   text("            ---------------- MANDO AUTOMATICO -------------------------", 50,105);
  83. }
  84. //-------------------FIN DEL LOOP---------------------------
  85. // FUNCION DE EVENTOS
  86. void controlEvent(ControlEvent theEvent) {
  87.   //if (theEvent.isController()) {
  88.     if ( on_off == true ) {
  89.       //while (var < 1) {      
  90.          motor[0] = (int(textb.getText()));
  91.          motor[1] = (int(texth.getText()));
  92.          motor[2] = (int(textc.getText()));
  93.        
  94.         if(theEvent.controller().name()=="envio") {
  95.           serial.write('M' + ":" + motor[0] + ":" + motor[1]  + ":" + motor[2]);   // envia por el puerto serial el nombre y el valor
  96.           println('M' + ":" + motor[0] + ":" + motor[1]  + ":" + motor[2]);    // imprime por pantalla el nombre y el valor
  97.           //var++;
  98.         }
  99.        
  100.       }
  101.      // var=0;
  102.      // delay(100);
  103.     }

Share this:

Post a Comment

 
Back To Top
Distributed By Blogger Templates | Designed By OddThemes