Código para manejo de motor paso a paso

He realizado el código 2 para manejo de un motor paso a paso con driver BT6600 a partir de datos provenientes de un transductor de presión, sin embargo, no he logrado hacer mover el motor a pesar de que he probado que el motor funciona con el código 1, ingresando los datos para accionarlo desde el monitor serial.

Agradezco una orientación, saludos!

Código 1:

#include <AccelStepper.h>

// Pines de conexión al driver BT6600
const int STEP_PIN = 3;
const int DIR_PIN = 2;

// Crear una instancia de AccelStepper
AccelStepper stepper(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

void setup() {
  Serial.begin(9600);
  Serial.println("Control de Motor Paso a Paso con BT6600");

  // Configuración de la velocidad y aceleración del motor
  stepper.setMaxSpeed(1000);      // Ajusta según sea necesario
  stepper.setAcceleration(500);   // Ajusta según sea necesario
}

void loop() {
  // Verificar si hay datos disponibles en el monitor serial
  if (Serial.available() > 0) {
    // Leer los datos de paso y velocidad desde el monitor serial
    int steps = Serial.parseInt();
    int speed = Serial.parseInt();

    // Mover el motor con los valores ingresados
    Serial.print("Moviendo ");
    Serial.print(steps);
    Serial.print(" pasos a ");
    Serial.print(speed);
    Serial.println(" pasos/segundo");

    moverMotor(steps, speed);
  }
}

void moverMotor(int steps, int speed) {
  // Establecer la velocidad y dirección del motor
  stepper.setSpeed(speed);

  // Habilitar el motor y mover la cantidad de pasos especificada
  stepper.enableOutputs();
  stepper.move(steps);

  // Realizar pasos hasta alcanzar la posición deseada
  while (stepper.distanceToGo() != 0) {
    stepper.run();
  }

  // Deshabilitar el motor
  stepper.disableOutputs();
}

Código 2:

#include <Arduino.h>
#include <AccelStepper.h>

AccelStepper stepper(1, 2, 3); // Pines 2 y 3 son los pines de dirección y pulso, respectivamente

// Define el pin de entrada analógica para la presión
const int pinPresion = A0;

// Declara las variables
float kpa;        // Variable para almacenar la presión analógica
float Pres_req;   // Variable para almacenar la presión requerida

void setup() {
  // Inicialización del puerto serie a una velocidad de 9600 baudios
  Serial.begin(9600);
  Serial.println("Control de Motor Paso a Paso con Presión");

  // Configura el pin de entrada analógica
  pinMode(pinPresion, INPUT);

  // Configuración de la velocidad y aceleración del motor
  stepper.setMaxSpeed(1000);      // Ajusta según sea necesario
  stepper.setAcceleration(500);   // Ajusta según sea necesario
}

void moverMotor(int steps, int speed) {
  // Establecer la velocidad y dirección del motor
  stepper.setSpeed(speed);

  // Habilitar el motor y mover la cantidad de pasos especificada
  stepper.enableOutputs();
  stepper.move(steps);

  // Realizar pasos hasta alcanzar la posición deseada
  while (stepper.distanceToGo() != 0) {
    stepper.run();
    delay(1); // Agrega una breve pausa para permitir que el motor realice los pasos
  }

  // Deshabilitar el motor
  stepper.disableOutputs();
}

void loop() {
  // Lee la presión analógica desde el pin A0
  kpa = analogRead(pinPresion) * 0.0048828125; // Convierte el valor analógico a voltaje (0-5V)

  // Pide al usuario que ingrese la presión requerida a través del puerto serie
  Serial.print("Ingrese la presion requerida (kPa): ");
  
  // Espera hasta que se ingrese algo y se presione Enter
  while (!Serial.available() || Serial.peek() == '\n') {
    delay(10);
  }

  // Lee la línea completa y la almacena en una cadena
  String input = Serial.readStringUntil('\n');

  // Convierte la cadena a un número
  Pres_req = input.toFloat();

  // Verifica si la conversión fue exitosa
  if (!isnan(Pres_req)) {
    // Calcula los dos números según la fórmula dada
    float num1 = round((Pres_req - kpa) / 2.0);  // Redondea num1 a la unidad más cercana
    float num2 = 200.0;

    // Imprime el resultado por el puerto serie
    Serial.print("Resultado: ");
    Serial.print(num1);
    Serial.print(" ");
    Serial.println(num2);

    // Convierte la cadena a números utilizando strtok
    int steps = int(num1);
    int speeds = int(num2);

    // Muestra información de depuración
    Serial.print("Steps: ");
    Serial.print(steps);
    Serial.print(", Speeds: ");
    Serial.println(speeds);

    // Configura y mueve el motor solo si es necesario
    if (steps != 0 || speeds != 0) {
      moverMotor(steps, speeds);
    }
  } else {
    // Mensaje de error si la conversión no fue exitosa
    Serial.println("Error: Valor no válido ingresado.");
  }

  // Puedes agregar más código aquí según sea necesario para tu aplicación
  delay(1000); // Pausa de 1 segundo
}

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

Gracias!

¡He encontrado la solución por mi cuenta! Gracias y saludos

Moderador:
Por favor, lee las Normas del foro
Si posteas en el foro en inglés usa idioma inglés para expresarte, eso incluye los comentarios de tu código. Si un código tiene comentarios en español también moverán tu hilo a esta sección en Español.
Si escribes en español debes usar el foro Arduino en español
El título tampoco respeta las normas, del foro punto 5.
Modifico tu titulo, si no es de tu agrado puedes cambiarlo.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.