maquina de corrdenadas cartesianas con steppers

Dependencies:   mbed stepper

Revision:
0:9c1353d0ca2a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 07 23:03:56 2015 +0000
@@ -0,0 +1,226 @@
+/////////////////////////////////////////////////////////////////////////////////////
+//Libreria de la tarjeta LPC1768
+#include "mbed.h"
+//Libreria para control de motores a paso por pulso con easydriver
+#include "stepper.h"
+ /////////////////////////////////////////////////////////////////////////////////////
+//Definicion del puerto serial delo cotrolador
+Serial pc(USBTX,USBRX);
+//Definicion de los pines para el control de eje X (Pulso, Direccion)
+stepper x(p27,p28);
+//Definicion del pin para activacion de ahorro de energia en eje X
+DigitalOut sx(p29);
+//Definicion de los pines para el control de eje Y (Pulso, Direccion)
+stepper y(p24,p25);
+//Definicion del pin para activacion de ahorro de energia en eje Y
+DigitalOut sy(p26);
+//Definicion de los pines para el control de eje Z (Pulso, Direccion)
+stepper z(p21,p22);
+//Definicion del pin para activacion de ahorro de energia en eje X
+DigitalOut sz(p23);
+//Contador para los ciclos for de pasos para ejes X, Y, Z y combinaciones(Diagonales)
+int contx=0;
+int conty=0;
+int contz=0;
+int contd=0;
+//Contadot de while para diagonales
+int n=0;
+//COntadores de pasos generales para envio de ubicacion
+int stepcx=0;
+int stepcy=0;
+int stepcz=0;
+//Definicion de la variable para control
+char control='0';
+/////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////
+
+//Definicion de funcion con la resolucion adecuada de 5mm.Recibe Informacion de numero de veces y direccion
+void xm(int px,int xd)
+{
+//Desactivacion del modo de ahorro de energia
+sx=1;    
+    //Definiciond el numero de veces que realizara el movimiento
+    for(contx=1;contx<=px;contx++)
+    {   //If para comprobar direccion
+        if(xd==0)
+        //Uso de la libreria para definir los pasos direccion velocidad
+        //y aceleracion del pulso ademas de incremento del contador de pasos
+        {x.step(5344,0,200,0);stepcx=stepcx-5344;}
+        else
+        {x.step(5344,1,200,0);stepcx=stepcx+5344;}
+        
+    }
+//Activacion del modo de ahorro de energia
+sx=0;
+//Limpieza de contador de movimientos
+contx=0;
+}
+//Definicion demovimientos para el eje Y 
+void ym(int py,int yd)
+{
+sy=1;    
+    for(conty=1;conty<=py;conty++)
+    {
+        if(yd==0)
+        {y.step(6400,0,200,0);stepcy=stepcy-6400;}
+        else
+        {y.step(6400,1,200,0);stepcy=stepcy+6400;}
+        
+    }
+sy=0;
+conty=0;
+}
+//Definicion de movimientos de eje Z
+void zm(int pz,int zd)
+{
+sz=1;    
+    for(contz=1;contz<=pz;contz++)
+    {
+        if(zd==0)
+        {z.step(5443,0,200,0);stepcz=stepcz-5443;}
+        else
+        {z.step(5443,1,200,0);stepcz=stepcz+5443;}
+        
+    }
+sz=0;
+contz=0;
+}
+// Definicion de los movimientos diagonales
+void dm(int pd,int dd)
+{
+//Desactivacion delmodo de ahorro en dos ejes x Y
+sx=1;
+sy=1;    
+    //Definiciond e ciclo for para la cantidad de movimiento diagonales
+    for(contd=1;contd<=pd;contd++)
+    {   //Bloque if para determinar el tipo de diagonal
+        if(dd==0)
+        //Ciclo while con moviento combinado de ejes y sus respectivas sumas a contadores de pasos
+        {while(n<1000){y.step(6,1,200,0);x.step(5,0,200,0);n++;stepcx=stepcx-5;stepcy=stepcy+6;}n=0;}
+        else if(dd==1) 
+        {while(n<1000){y.step(6,0,200,0);x.step(5,0,200,0);n++;stepcx=stepcx-5;stepcy=stepcy-6;}n=0;}
+        else if(dd==2) 
+        {while(n<1000){y.step(6,1,200,0);x.step(5,1,200,0);n++;stepcx=stepcx+5;stepcy=stepcy+6;}n=0;}
+        else 
+        {while(n<1000){y.step(6,0,200,0);x.step(5,1,200,0);n++;stepcx=stepcx+5;stepcy=stepcy-6;}n=0;}
+        
+    }
+sx=0;
+sy=0;
+contd=0;
+}
+//Elsiguiente bloque de subrutinas ocupa la subrutinas definidas anteriormente
+//Definicion de un espaciado grande para poner entre palabras 
+void ESM(){zm(1,1);sx=1;x.step(5344,0,200,0);sx=0;stepcx=stepcx-5344;zm(1,0);}
+//Definicion de un espacio pequeño para la separacion entre letras
+void ES(){zm(1,1);sx=1;x.step(1500,0,200,0);sx=0;stepcx=stepcx-1500;zm(1,0);}
+//Definicion de movimientos para la generacion de letras con su espacio
+void A(){ym(2,1);xm(1,0);ym(1,0);xm(1,1);xm(1,0);ym(1,0);ES();}
+void B(){xm(1,0);ym(1,1);xm(1,1);ym(1,1);xm(1,0);ym(1,0);xm(1,1);ym(1,0);xm(1,0);ES();}
+void C(){ym(2,1);xm(1,0);xm(1,1);ym(2,0);xm(1,0);ES();}
+void D(){xm(1,0);dm(1,0);dm(1,2);xm(1,1);ym(2,0);zm(1,1);xm(2,0);ES();zm(1,0);}
+void E(){ym(2,1);xm(1,0);xm(1,1);ym(1,0);xm(1,0);xm(1,1);ym(1,0);xm(1,0);ES();}
+void F(){ym(2,1);xm(1,0);xm(1,1);ym(1,0);xm(1,0);zm(1,1);ym(1,0);ES();zm(1,0);}
+void G(){ym(1,1);xm(1,0);ym(1,0);xm(1,1);ym(2,1);xm(1,0);zm(1,1);ym(2,0);ES();zm(1,0);}
+void H(){ym(2,1),ym(1,0);xm(1,0);ym(1,1);ym(2,0);ES();}
+void I(){zm(1,1);ES();ES();zm(1,0);ym(2,1);ym(2,0);zm(1,1);ES();zm(1,0);}
+void J(){xm(1,0);ym(2,1);ym(2,0);ES();}
+void K(){ym(2,1);ym(1,0);dm(1,0);dm(1,3);dm(1,1);ES();}
+void L(){ym(2,1);ym(2,0);xm(1,0);ES();}
+void M(){ym(2,1);dm(1,1);dm(1,0);ym(2,0);ES();}
+void N(){ym(2,1);dm(2,1);ym(2,1);ym(2,0);ES();}
+void O(){ym(2,1);xm(1,0);ym(2,0);xm(1,1);xm(1,0);ES();}
+void P(){ym(2,1);xm(1,0);ym(1,0);xm(1,1);zm(1,1);dm(1,1);ES();zm(1,0);}
+void R(){ym(2,1);xm(1,0);ym(1,0);xm(1,1);dm(1,1);ES();}
+void S(){xm(1,0);ym(1,1);xm(1,1);ym(1,1);xm(1,0);zm(1,1);ym(2,0);zm(1,0);ES();}
+void T(){ESM();ym(2,1);xm(1,1);xm(2,0);xm(1,1);ym(2,0);zm(1,1);xm(1,0);ES();zm(1,0);}
+void U(){ym(2,1);ym(2,0);xm(1,0);ym(2,1);ym(2,0);ES();}
+//En esta letra se utulizo un a relacion especial para las diagonales pot lo cual se vuelve 
+//las funciones de la libreria stepper.h y ciclos for while
+void V()
+    {
+        ESM();
+        sx=1;sy=1;for(contd=1;contd<=2;contd++){while(n<1000){y.step(6,1,200,0);x.step(2,1,200,0);n++;stepcx=stepcx+2;stepcy=stepcy+6;}n=0;}sx=0;sy=0;contd=0;
+        sx=1;sy=1;for(contd=1;contd<=2;contd++){while(n<1000){y.step(6,0,200,0);x.step(2,0,200,0);n++;stepcx=stepcx+2;stepcy=stepcy-6;}n=0;}sx=0;sy=0;contd=0;
+        sx=1;sy=1;for(contd=1;contd<=2;contd++){while(n<1000){y.step(6,1,200,0);x.step(2,0,200,0);n++;stepcx=stepcx+2;stepcy=stepcy+6;}n=0;}sx=0;sy=0;contd=0;
+        sx=1;sy=1;for(contd=1;contd<=2;contd++){while(n<1000){y.step(6,0,200,0);x.step(2,1,200,0);n++;stepcx=stepcx+2;stepcy=stepcy-6;}n=0;}sx=0;sy=0;contd=0;
+        zm(1,1);ESM();ES();zm(1,0);
+    }
+void W(){ym(2,1);ym(2,0);dm(1,0);dm(1,1);ym(2,1);ym(2,0);ES();}
+void X(){dm(2,0);dm(1,3);dm(1,2);dm(2,1);ES();}
+void Z(){dm(2,0);xm(2,1);xm(2,0);dm(2,3);xm(2,0);ES();}
+//Definicion de SUbrutina para retorno de carro mediante los contadores de steps y movimientos de eje z
+void backx(){zm(1,1);ym(3,0);stepcx=-stepcx;sx=1;x.step(stepcx,1,200,0);sx=0;stepcx=0;zm(1,0);}
+//Definicion de escritura de nombres usando las subrutinas de letras y espacios
+void OSCAR(){O();S();C();A();R();ESM();D();E();ESM();J();E();S();U();S();ESM();V();}
+void IKI(){I();K();I();ESM();B();A();L();A();M();ESM();R();}
+void LALO(){E();D();U();A();R();D();O();ESM();A();N();T();O();N();I();O();ESM();L();}
+//Definicon del rectangulo con las subrutinas anteriores
+void rectangulo(){ym(8,1);xm(14,0);ym(8,0);xm(14,1);xm(14,0);ESM();}
+//Definicion de triangulo con manupulacion de relacion de steps para angulos de 60° 
+//con trabaja trigonometrico paratener las mismas distancias y hacerlo equilatero.
+void triangulo()
+    {
+    xm(4,0);sx=1;sy=1;
+    while(n<2223){y.step(9,1,200,0);x.step(5,1,200,0);n++;stepcx=stepcx+5;stepcy=stepcy+9;}n=0;
+    while(n<2223){y.step(9,0,200,0);x.step(5,1,200,0);n++;stepcx=stepcx-5;stepcy=stepcy-9;}n=0;
+    sx=0;sy=0;
+    }
+//Definicion de linea de 8.5 cm con las subrutinas de movimientos
+void line(){xm(17,0);}
+//Definicion del pentagono con manupulacion de relacion de steps para angulos de 108° y 72°
+//y distancias para que cerrarar el pentagono
+void penta(){
+sx=1;sy=1;
+while(n<9828){y.step(1,1,200,0);x.step(2,1,200,0);n++;stepcx=stepcx+2;stepcy=stepcy+1;}n=0;
+while(n<2005){y.step(11,0,200,0);x.step(5,1,200,0);n++;stepcx=stepcx+5;stepcy=stepcy-11;}n=0;
+while(n<2005){y.step(11,0,200,0);x.step(5,0,200,0);n++;stepcx=stepcx-5;stepcy=stepcy-11;}n=0;
+while(n<9828){y.step(1,1,200,0);x.step(2,0,200,0);n++;stepcx=stepcx-2;stepcy=stepcy+1;}n=0;
+sx=0;sy=0;
+ym(4,1);
+}
+//Definicion de SUbrutina para reiniciar los contadores de steps los cuales sirven 
+//para retrorno de carro y envio de ubicacion.
+void origin(){stepcx=0;stepcy=0;stepcz=0;}
+/////////////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////
+int main()
+{
+//El puerto serial por default se configura a 9600 bauds
+//Se define un cilo infinito para capturar el serial constantemente
+while(1)
+{
+//Instruccion para determinar si hay algun proveniente de la interfaz en puerto
+//si si se asigna el caracter a la variable de control.
+if (pc.readable()) 
+        {
+            control=pc.getc();
+        }
+//Serie condicional para determinar el caracter recibido
+//por serial y determinacion de caso a realizar
+//basicamente es el punto de relacion entre la interfaz y el controlador
+    //Condicionales para control manual
+if(control=='d'){xm(1,1);}
+else if(control=='a'){xm(1,0);}
+else if(control=='w'){ym(1,1);}
+else if(control=='s'){ym(1,0);}
+else if(control=='1'){zm(1,1);}
+else if(control=='2'){zm(1,0);}
+    //Condicionales para control automatico
+else if(control=='l'){line();}
+else if(control=='t'){triangulo();}
+else if(control=='r'){rectangulo();}
+else if(control=='p'){penta();}
+else if(control=='n'){OSCAR();backx();IKI();backx();LALO();backx();}
+    //Condicional para definir origen (Reset de  contadores)
+else if(control=='o'){origin();}
+//Limpieza de variable de control para evitar bucle
+control='0';ts
+//Escritura continua de posicion de los ejes en steps al puerto serial con espaciado para no perder
+//informacion por desincronizacion de escritura-lectura.
+pc.printf("--------,%i,%i,%i,-------\n",stepcx,stepcy,stepcz);
+
+}
+
+
+}
\ No newline at end of file