26.- Motor Paso a Paso y Joystick

Publicado el 18 diciembre 2013 por Practicandoarduino @PracticaArduino

Bienvenidos a otro tutorial, esta vez vamos a aprender a usar un motor paso a paso, teneis una breve explicación sobre motores aquí por si tenéis dudas. La que vamos a hacer es controlar el giro del motor mediante un joystick, si el joystick esta en su posición central, el motor no hará nada, si lo movemos en un sentido del eje X el motor girará en una dirección y si movemos el joystick hacia el otro sentido del eje X, el motor girará en el otro sentido.

Normalmente los motores paso a paso se usan con algún tipo de controlador para ayudar a soncronizar las polarizaciones de los electroimanes, en este caso usaremos el controlador ULN 2003. En mi caso tengo un módulo con el controlador pero el esquema lo he puesto con el controlador únicamente.

Que necesitamos:

1 PlacaArduino Uno
1 Protoboard
1 Motor Paso a Paso
1 Controlador ULN2003
1 Joystick
Cables para realizar las conexiones

Lo primero que haremos sera conectar los pines de GND y 5V de la placa a la protoboard, una vez hecho esto, conectamos los pins 5V y GND del joystick y el controlador a la protoboard. Conectamos ahora el cable del motor paso a paso al módulo. Por último tenemos que conectar los pines 1N1, 1N2, 1N3, 1N4 del módulo a los pines que vayamos a usar, en mi caso 8, 10, 9, 11 (atentos al orden que es importante si no no se polarizarán los electroimanes).
Debería quedar algo parecido a esto:

Código fuente:

#include <Stepper.h>
 
int pasos=100;
int pasosPorLectura=5;
int leer;
int rotacion;
Stepper stepper(pasos, 8,10,9,11);
int velocidadMotor;
void setup(){
  pinMode (A0, INPUT);
  stepper.setSpeed(200);
}
 
 
void loop(){
  leer=analogRead(A0);
  velocidadMotor=abs(map(leer, 0, 1023, -20, 20))*10;
  if (velocidadMotor>10){
    rotacion = leer>511?1:-1;
    stepper.setSpeed(velocidadMotor);
    stepper.step(rotacion*5);
  }
}

Para este ejemplo, tenemos que incluir la librería Stepper, que nos ayudará a manejar nuestro motor, se puede hacer sin ella pero es mucho más trabajoso.
Lo primero que hacemos es declarar el número de pasos que dará el motor por vuelta (pasos), número de pasos que dara cada vez que leamos (pasosPorLectura), y nuestra variable stepper que será la encargada de hacer girar al motor (fijaros en el orden de los pines). En el void setup() configuramos el pin A0 como entrada y la velocidad del motor a 200 (aunque la modificaremos cada ciclo).
En el void loop() leemos el valor que nos envía el joystick y lo mapeamos para guardarlo en velocidadMotor, explico un poco este paso, lo que hacemos es mapearlo ya que el la entrada analógica nos da un valor de 0 a 1023, y nosotros queremos de 0 a 200; cuando ponemos de -20 a 20, la función abs nos da el valor absoluto el cual nosotros lo multiplicamos por 10, para que como mínimo sea 10 la velocidad, ya que velocidades inferiores dan un efecto raro.
Ahora hay que controlar el sentido del giro, el punto medio del joystick es 511, así que si el valor que nos da es infierior a ese giramos en sentido contrario y si es mayor en el sentido normal. LE pasamos los valores al motor paso a paso y listo.