[SOLUCIONADO] Memoria posición de un motor paso a paso.

Hola,

Estoy trabajando con un motor 28BYJ-48 de 5V y un integrado ULN2003A y la librería actualizada Accelstepper.

Mi intención es que haya tres posiciones y gire hasta alcanzarlas, la 0 que es el origen, y otras dos a otro numero de pasos. El sketch es sencillo, de la siguiente manera.

#include <AccelStepper.h>
#define HALFSTEP 8 
#define motorPin1 2
#define motorPin2 3
#define motorPin3 4
#define motorPin4 5

AccelStepper stepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup(){
  stepper.setMaxSpeed(1000.0);
  stepper.setAcceleration(100.0);
}

void loop(){
  
  stepper.runToNewPosition(0); //Primera posición
  delay(1000);
  
  stepper.runToNewPosition(-60000);
  delay(1000);

  stepper.runToNewPosition(-120000);
  delay(1000);

}

El problema, que si desconecto en cualquier punto que no sea justo el origen, al volver a enchufar toma como origen donde esta y no el origen que yo quiero. Por ejemplo, si se cortara la corriente sería bueno que una vez tuviera otra vez corriente volviera al origen o al punto mas cercano de esos 3 que quiero predefinir.

No se si se puede hacer y si se puede no se como hacerlo, agradecería una ayuda, por favor.

Adjunto también la imagen de esas 3 posiciones.

Gracias y un saludo!

Creo que lo que necesitas, es uno de esos interruptores que usan las impresoras 3D para siempre hallar el "punto cero".

Como describes que el posicionamiento en el programa es relativo a la posición física inicial del motor, la primera rutina que siempre debe ejecutar, es una que haga girar el motor constantemente en una dirección; hasta que ese interruptor sea accionado. Este interruptor debe ser colocado de tal manera que la rutina acabe cuando el brazo se encuentre en una de las posiciones extremas.

Como dije antes, es un procedimiento de "auto-calibración" muy similar al de las impresoras 3D.

tu problema es el hardware que no tiene memoria.

opcion A guardar en eprom la posicion asi no se borra al reiniciar el programa

opcion B pones un final de carrera con el palo en vertical (+5000), cada vez que arranque arduino (setup)

while (digitalread (fc)==0){
stepper.runSpeed(10);}

stepper.setCurrentPosition(5000);

y listo con eso ya le dirías al motor muévete lento hasta que encuentres el fc y una vez alli esa sera tu posicion 5000

opcion C potenciometro y motor de continua lo que ventria siendo un servo

Me queda claro, la opción del fin de carrera me parece la mejor. No estoy metido en impresoras 3d por lo que no sabía que se utilizaba este método para hallar el punto (0,0,0). Me parece genial.

Quería comentar que esto es una simulación a pequeña escala. Luego pondré un motor Nema 17 51:1 ya que necesito algo de torque. El programita será más elaborado. Pero por lo que he visto tendría el mismo problemilla de la posición.

También había pensado en utilizar un actuador lineal por temas de torque, pero creo que me llega con este stepper.

Gracias de nuevo.

Hola!! tengo la misma problematica. Estoy moviendo un PanTilt, pero cada vez que se reinicia o se corta la energia, empieza en otras coordenadas espaciales.

En mi caso uso libreria stepper.

Que me sugieren estimados?

gracias!!

No revivas hilos viejos!!
Te sugiero que leas las normas del foro y que crees tu propio hilo con esta inquietud.
Tema cerrado.