#include <AccelStepper.h>
// Definir el tipo de motor y los pines para el primer motor (corte)
#define motorInterfaceType 1
#define dirPin1 9
#define stepPin1 10
// Definir los pines para el segundo motor (rotativo)
#define dirPin2 5
#define stepPin2 6
// Definir el pin del spindle (relé o transistor)
#define spindlePin 7
// Definir el pin del botón de reset
#define resetButtonPin 8
// Crear instancias de AccelStepper para ambos motores
AccelStepper stepper1(motorInterfaceType, stepPin1, dirPin1);
AccelStepper stepper2(motorInterfaceType, stepPin2, dirPin2);
bool cycleCompleted = false; // Variable para controlar si el ciclo ha terminado para el segundo motor
bool resetState = false; // Variable para controlar si el sistema debe detenerse
void setup() {
// Configurar pines
pinMode(spindlePin, OUTPUT); // Configurar el pin del spindle como salida
pinMode(resetButtonPin, INPUT_PULLUP); // Configurar el botón de reset como entrada con resistencia pull-up
// Apagar el spindle al inicio
digitalWrite(spindlePin, LOW);
// Configurar velocidad y aceleración para el primer motor
stepper1.setMaxSpeed(90); // Velocidad lenta en pasos por segundo
stepper1.setAcceleration(30); // Aceleración lenta en pasos por segundo^2
// Configurar velocidad constante para el segundo motor
stepper2.setMaxSpeed(400); // Velocidad máxima constante en pasos por segundo
stepper2.setSpeed(400); // Configurar la velocidad constante
// Mover el primer motor a la posición inicial de corte (28 revoluciones)
stepper1.moveTo(800 * 28); // 800 pasos por revolución, 28 revoluciones
}
void loop() {
// Comprobar si el botón de reinicio ha sido presionado
if (digitalRead(resetButtonPin) == LOW) { // Si el botón está presionado
resetState = true; // Activar el estado de reset
stopAll(); // Detener todos los motores y el spindle
delay(500); // Retardo para evitar rebotes del botón
}
if (!resetState) {
// Verificar si el primer motor ha llegado a la posición objetivo
if (stepper1.distanceToGo() == 0) {
// Cambiar la velocidad y dirección para el primer motor
if (stepper1.currentPosition() == 800 * 28) {
// Si está en la posición de corte, ajustar para regreso rápido
stepper1.setMaxSpeed(400); // Velocidad rápida en pasos por segundo
stepper1.setAcceleration(50); // Aceleración rápida en pasos por segundo^2
stepper1.moveTo(0); // Regresar al origen
} else {
// Si está en el origen, ajustar para corte lento
stepper1.setMaxSpeed(90); // Velocidad lenta para corte
stepper1.setAcceleration(30); // Aceleración lenta para corte
stepper1.moveTo(800 * 28); // Mover a la posición de corte
}
}
// Ejecutar el movimiento del primer motor
stepper1.run();
// Ejecutar el segundo motor a velocidad constante
stepper2.runSpeed();
}
}
// Función para detener todos los motores y el spindle
void stopAll() {
stepper1.stop(); // Detener el primer motor
stepper2.stop(); // Detener el segundo motor
digitalWrite(spindlePin, LOW); // Apagar el spindle
}
hola, los motores nema23 deben detenerse cuando el ciclo del motor 1 temina el ciclo de corte y regreso a su origen pero no lo hace el ciclo se inicia nuevamente a un no tengo instalado el boton de reinicio ni el rele para apagar el splindle no se si sea por eso que no se detiene
#include <AccelStepper.h>
// Definir el tipo de motor y los pines para el primer motor (corte)
#define motorInterfaceType 1
#define dirPin1 9
#define stepPin1 10
// Definir los pines para el segundo motor (rotativo)
#define dirPin2 5
#define stepPin2 6
// Crear instancias de AccelStepper para ambos motores
AccelStepper stepper1(motorInterfaceType, stepPin1, dirPin1);
AccelStepper stepper2(motorInterfaceType, stepPin2, dirPin2);
bool cycleCompleted = false; // Variable para controlar si el ciclo ha terminado
void setup() {
// Configurar velocidad y aceleración para el primer motor
stepper1.setMaxSpeed(90); // Velocidad lenta en pasos por segundo
stepper1.setAcceleration(30); // Aceleración lenta en pasos por segundo^2
// Configurar velocidad constante para el segundo motor
stepper2.setMaxSpeed(400); // Velocidad máxima constante en pasos por segundo
stepper2.setSpeed(400); // Configurar la velocidad constante
// Mover el primer motor a la posición inicial de corte (28 revoluciones)
stepper1.moveTo(800 * 28); // 800 pasos por revolución, 28 revoluciones
}
void loop() {
// Verificar si el primer motor ha llegado a la posición objetivo
if (stepper1.distanceToGo() == 0 && !cycleCompleted) {
// Cambiar la velocidad y dirección para el primer motor
if (stepper1.currentPosition() == 800 * 28) {
// Si está en la posición de corte, ajustar para regreso rápido
stepper1.setMaxSpeed(400); // Velocidad rápida
stepper1.setAcceleration(50); // Aceleración rápida
stepper1.moveTo(0); // Regresar al origen
} else {
// Si está en el origen, el ciclo ha terminado
cycleCompleted = true;
stepper1.stop();
stepper2.stop();
stepper2.disableOutputs();
}
}
// Ejecutar el movimiento del motor 1
stepper1.run();
if (!cycleCompleted) {
stepper2.runSpeed();
}
}
Saludos, parece que solo tenia en el lugar incorrecto los stop y de momento elimine botón y relé lo are manual de momento si alguien por el foro sabe como reparara lo el botón y el relé se lo agradecería Bonito día
¿A vos te parece?
Yo veo dos códigos muy diferentes aunque ninguno de los dos hace lo que se supone debería.
Plantéale mejor el problema a la IA.
Saludos
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.