Go Down

Topic: Stepper se queda energizado cuando suelto el Joystick (SOLUCIONADO) (Read 468 times) previous topic - next topic

Topor2016

Hola.. Ayer termine un proyecto en el que llevaba un tiempo trabajando. Se trata de una amoladora lineal utilizando las barras de direccion de una moto y para la mordaza que sujeta las piezas a cortar, utilizo un motor pap con reductora controlado por un Joystick de estos de PS2.

El problema es que el motor pap se queda como energizado cuando suelto el Joystick.. He grabado un video para que se vea mejor lo que digo..

Video Youtube

Segun veo en el driver, hay un apartado que pone "Enable", como puedo hacer para utilizar esa funcion en mi codigo?

Code: [Select]
#include <AccelStepper.h>

const int Joystick = A0;

const int StepPin = 2;  
const int DirPin = 3;
long SpeedX, ValueX, MapX;  

const int MaxSpeed = 2000;
const int MinSpeed = 0;
const float Aceleration = 50.0;
 
const int Treshold = 50;
long TresholdUp, TresholdDown;  
 
boolean MoveX, EnableX;
 
AccelStepper MotorX(AccelStepper::DRIVER, StepPin, DirPin);
 
void setup() {
  SpeedX = 0;
  EnableX = false;

  TresholdDown = (MaxSpeed / 2) - Treshold;
  TresholdUp = (MaxSpeed / 2) + Treshold;
 
  MotorX.setMaxSpeed(MaxSpeed);
  MotorX.setSpeed(MinSpeed);
  MotorX.setAcceleration(Aceleration);
}
 
void loop() {
  ValueX = analogRead(Joystick);
  MapX = map(ValueX, 0, 1023, MinSpeed, MaxSpeed);
  MotorControl(MapX);
}
 
void MotorControl(long mapX) {
 
  if (mapX <= TresholdDown) {
    SpeedX = -map(mapX, TresholdDown, MinSpeed,   MinSpeed, MaxSpeed);
    MoveX = true;
  } else if (mapX >= TresholdUp) {
    SpeedX = map(mapX,  MaxSpeed, TresholdUp,  MaxSpeed, MinSpeed);
    MoveX = true;
  } else {
    SpeedX = 0;
    MoveX = false;
  }
 
  if (MoveX) {
    MotorX.setSpeed(SpeedX);
    MotorX.run();
  } else {
    MotorX.stop();
  }

}
 


Gracias.

surbyte

Lo mas simple sería que lo resuelvas tu mismo agregando un par de Serial.print() que muestren que esta calculando en cada caso porque a mi me resulta intentendible lo que has hecho

Code: [Select]
  if (mapX <= TresholdDown) {
    SpeedX = -map(mapX, TresholdDown, MinSpeed,   MinSpeed, MaxSpeed);
    MoveX = true;
  } else if (mapX >= TresholdUp) {
    SpeedX = map(mapX,  MaxSpeed, TresholdUp,  MaxSpeed, MinSpeed);
    MoveX = true;
  } else {
    SpeedX = 0;
    MoveX = false;
  }


Según lo veo todo lo que este a la mitad +- 50 deberia detener
pero tu por alguna razón pones SpeedX como negativo y recalculas la velocidad, no entiendo para que lo haces.
Porque no dejas a velocidad constante? En lugar de cambiarla?

Topor2016

Gracias por contestar.. el codigo no es mio, lo vi por internet y lo utilice..

Probare a añadir lo que has puesto y comento como funciona.

surbyte

Ya veo lo que esta mal, jamas da SpeedX = 0 o por instantes de tiempo muy chicos entonces no se detiene.

Cuando tienes un joystick hay que asegurarse que al soltar el joystick ese umbral se mantenga. Por eso olvida todo y concéntrate en el joystick

algo como esto

Code: [Select]
void loop() {
 
  ValueX = analogRead(Joystick);
  if (ValueX <= TresholdDown) {
      SpeedX = - 500;
      MoveX = true;     
  }
  else if (ValueX >= TresholdUp) {
      SpeedX = 500;
      MoveX = true;     
  } else {
     SpeedX =  0;
     MoveX = false;
  }

  MotorControl(SpeedX);
}
 
void MotorControl(bool MoveX) {
 
  if (MoveX) {
      MotorX.setSpeed(SpeedX);
      MotorX.run();
  }
  else {
      MotorX.stop();
  }
}

Topor2016

Que cosa mas rara... acabo de probar con otro motor, otro driver, otro arduino y otro joystick con el primer codigo que he puesto en el post y funciona perfectamente.. claro, yo antes de montarlo todo lo probe y funcionaba bien, por eso me he extrañado que una vez montado se comporte asi..

¿A que puede deberse? todos los componentes son exactamente iguales a los que he montado en el proyecto..



tauro0221

Hi,
Remplanza los componentes uno a uno para ver cual de ellos te falla. Asi puedes determinar cuales el esta defectuoso.

Topor2016

Pues ya esta solucionado.. por algun motivo que desconozco, parece ser que el joystick se daño al montarlo.. he puesto uno nuevo en la caja donde esta alojada toda la electronica y listo..

Gracias a los dos por la ayuda..

Video


Go Up