22-08-2017, 07:19 AM
Buenos dias, soy nuevo en el foro y tengo un pequeño incoveniente, estoy montando una maquina empacadora con arduino y ramps 1.4, todo trabaja bien, a la perfeccion, estoy en procesode calibracion, pero no he podido encontrar un codigo para pausar y reiniciar los motores paso a paso, con un boton externo, (lleva un pequeño contacto) es para cuando se termino el rollo de empaque la maquina se pause y poderla continuar cuando se coloque el nuevo rollo presionando el mismo boton u otro.
Tambien necesito iniciar el movimiento de un motor cuando se active un final de carrera.
No conozco mucho y los ejemplos, tutoriales o librerias que he logrado encontrar siempre van encaminados a impresoras 3D y sendores de calor y esas cosas.
Adjunte el codigo que estoy utilizando.
Muchas gracias.
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_MIN_PIN 3
#define X_MAX_PIN 2
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_MIN_PIN 14
#define Y_MAX_PIN 15
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19
#define E_STEP_PIN 26
#define E_DIR_PIN 28
#define E_ENABLE_PIN 24
#define E_1_STEP_PIN 36
#define E_1_DIR_PIN 34
#define E_1_ENABLE_PIN 30
#define MOTOR_PIN 0 // Spindle motor control pin
#define EMERGENCY_PIN 0 // Emergency button control pin
#define PGM_RD_W(x) (short)pgm_read_word(&x)
#define SDSS 53
#define LED_PIN 13
#define FAN_PIN 9
#define PS_ON_PIN 12
#define KILL_PIN -1
int n=0;
int x,y,z,e,e_1=0;
int xmax,ymax,zmax,emax,e_1max=0;
void setup(){
pinMode(LED_PIN , OUTPUT);
pinMode(X_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(X_DIR_PIN ,OUTPUT);
pinMode(X_ENABLE_PIN ,OUTPUT);
pinMode(X_MIN_PIN ,INPUT_PULLUP);
pinMode(Y_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(Y_DIR_PIN ,OUTPUT);
pinMode(Y_ENABLE_PIN ,OUTPUT);
pinMode(Y_MIN_PIN ,INPUT_PULLUP);
pinMode(Z_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(Z_DIR_PIN ,OUTPUT);
pinMode(Z_ENABLE_PIN ,OUTPUT);
pinMode(Z_MIN_PIN ,INPUT_PULLUP);
pinMode(E_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(E_DIR_PIN ,OUTPUT);
pinMode(E_ENABLE_PIN ,OUTPUT);
pinMode(E_1_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(E_1_DIR_PIN ,OUTPUT);
pinMode(E_1_ENABLE_PIN ,OUTPUT);
Serial.begin(115200);
}
void loop(){
digitalWrite(X_DIR_PIN,HIGH); //Fijamos una direción
for(int X=0;X<600;X++){ //Mandamos pulsos al motor en concreto 2000
digitalWrite(X_STEP_PIN,HIGH);
delay(1);
digitalWrite(X_STEP_PIN,LOW);
delay(1);
}
digitalWrite(Y_DIR_PIN,HIGH); //Fijamos una direccion
for(int Y=0;Y<2000;Y++){ //Mandamos pulsos al motor en concreto 2000
digitalWrite(Y_STEP_PIN,HIGH);
digitalWrite(Y_STEP_PIN,LOW);
}
digitalWrite(Z_DIR_PIN,HIGH); //Fijamos una direccion
for(int Z=0;Z<500;Z++){ //Mandamos pulsos al motor en concreto 500
digitalWrite(Z_STEP_PIN,HIGH);
digitalWrite(Z_STEP_PIN,LOW);
}
digitalWrite(Z_DIR_PIN,LOW); //Cambiamos la direccion de giro
for(int Z=0;Z<200;Z++){ //Hacemos 200 pasos en sentido contrario
digitalWrite(Z_STEP_PIN,HIGH);
digitalWrite(Z_STEP_PIN,LOW);
}
digitalWrite(E_DIR_PIN,HIGH); //Fijamos una direccion
for(int E=0;E<800;E++){ //Mandamos pulsos al motor en concreto 800
digitalWrite(E_STEP_PIN,HIGH);
digitalWrite(E_STEP_PIN,LOW);
}
digitalWrite(E_DIR_PIN,LOW); //Cambiamos la direccion de giro
for(int E=0;E<400;E++){ //Hacemos 400 pasos en sentido contrario
digitalWrite(E_STEP_PIN,HIGH);
digitalWrite(E_STEP_PIN,LOW);
}
digitalWrite(Y_DIR_PIN,HIGH); //Fijamos una direccion
for(int Y=0;Y<200;Y++){ //Mandamos pulsos al motor en concreto 200
digitalWrite(Y_STEP_PIN,HIGH);
digitalWrite(Y_STEP_PIN,LOW);
}
digitalWrite(E_1_DIR_PIN,HIGH); //Fijamos una direción
for(int E_1=0;E_1<400;E_1++){ //Mandamos pulsos al motor en concreto 400
digitalWrite(E_1_STEP_PIN,HIGH);
digitalWrite(E_1_STEP_PIN,LOW);
}
}
Tambien necesito iniciar el movimiento de un motor cuando se active un final de carrera.
No conozco mucho y los ejemplos, tutoriales o librerias que he logrado encontrar siempre van encaminados a impresoras 3D y sendores de calor y esas cosas.
Adjunte el codigo que estoy utilizando.
Muchas gracias.
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_MIN_PIN 3
#define X_MAX_PIN 2
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_MIN_PIN 14
#define Y_MAX_PIN 15
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19
#define E_STEP_PIN 26
#define E_DIR_PIN 28
#define E_ENABLE_PIN 24
#define E_1_STEP_PIN 36
#define E_1_DIR_PIN 34
#define E_1_ENABLE_PIN 30
#define MOTOR_PIN 0 // Spindle motor control pin
#define EMERGENCY_PIN 0 // Emergency button control pin
#define PGM_RD_W(x) (short)pgm_read_word(&x)
#define SDSS 53
#define LED_PIN 13
#define FAN_PIN 9
#define PS_ON_PIN 12
#define KILL_PIN -1
int n=0;
int x,y,z,e,e_1=0;
int xmax,ymax,zmax,emax,e_1max=0;
void setup(){
pinMode(LED_PIN , OUTPUT);
pinMode(X_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(X_DIR_PIN ,OUTPUT);
pinMode(X_ENABLE_PIN ,OUTPUT);
pinMode(X_MIN_PIN ,INPUT_PULLUP);
pinMode(Y_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(Y_DIR_PIN ,OUTPUT);
pinMode(Y_ENABLE_PIN ,OUTPUT);
pinMode(Y_MIN_PIN ,INPUT_PULLUP);
pinMode(Z_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(Z_DIR_PIN ,OUTPUT);
pinMode(Z_ENABLE_PIN ,OUTPUT);
pinMode(Z_MIN_PIN ,INPUT_PULLUP);
pinMode(E_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(E_DIR_PIN ,OUTPUT);
pinMode(E_ENABLE_PIN ,OUTPUT);
pinMode(E_1_STEP_PIN ,OUTPUT); //Indicamos que los pines son de salida
pinMode(E_1_DIR_PIN ,OUTPUT);
pinMode(E_1_ENABLE_PIN ,OUTPUT);
Serial.begin(115200);
}
void loop(){
digitalWrite(X_DIR_PIN,HIGH); //Fijamos una direción
for(int X=0;X<600;X++){ //Mandamos pulsos al motor en concreto 2000
digitalWrite(X_STEP_PIN,HIGH);
delay(1);
digitalWrite(X_STEP_PIN,LOW);
delay(1);
}
digitalWrite(Y_DIR_PIN,HIGH); //Fijamos una direccion
for(int Y=0;Y<2000;Y++){ //Mandamos pulsos al motor en concreto 2000
digitalWrite(Y_STEP_PIN,HIGH);
digitalWrite(Y_STEP_PIN,LOW);
}
digitalWrite(Z_DIR_PIN,HIGH); //Fijamos una direccion
for(int Z=0;Z<500;Z++){ //Mandamos pulsos al motor en concreto 500
digitalWrite(Z_STEP_PIN,HIGH);
digitalWrite(Z_STEP_PIN,LOW);
}
digitalWrite(Z_DIR_PIN,LOW); //Cambiamos la direccion de giro
for(int Z=0;Z<200;Z++){ //Hacemos 200 pasos en sentido contrario
digitalWrite(Z_STEP_PIN,HIGH);
digitalWrite(Z_STEP_PIN,LOW);
}
digitalWrite(E_DIR_PIN,HIGH); //Fijamos una direccion
for(int E=0;E<800;E++){ //Mandamos pulsos al motor en concreto 800
digitalWrite(E_STEP_PIN,HIGH);
digitalWrite(E_STEP_PIN,LOW);
}
digitalWrite(E_DIR_PIN,LOW); //Cambiamos la direccion de giro
for(int E=0;E<400;E++){ //Hacemos 400 pasos en sentido contrario
digitalWrite(E_STEP_PIN,HIGH);
digitalWrite(E_STEP_PIN,LOW);
}
digitalWrite(Y_DIR_PIN,HIGH); //Fijamos una direccion
for(int Y=0;Y<200;Y++){ //Mandamos pulsos al motor en concreto 200
digitalWrite(Y_STEP_PIN,HIGH);
digitalWrite(Y_STEP_PIN,LOW);
}
digitalWrite(E_1_DIR_PIN,HIGH); //Fijamos una direción
for(int E_1=0;E_1<400;E_1++){ //Mandamos pulsos al motor en concreto 400
digitalWrite(E_1_STEP_PIN,HIGH);
digitalWrite(E_1_STEP_PIN,LOW);
}
}