Control de un motor paso a paso bipolar (de un lector dvd) con Arduino UNO

Estándar

En tiempo de vacaciones es bueno hacer cosas completamente diferentes.

Y hoy ha tocado tarde de Arduino (está lloviendo con ganas). Y me ha llevado toda la tarde.

Arduino

Se trata de mover adelante y atrás un motor paso a paso procedente de un lector dvd viejo. Es un motor bipolar, con cuatro cables. Para controlarlo he usado un integrado L239D que permite un control adecuado del mismo.  Además he puesto dos pulsadores, que sirven para que el motor gire en un sentido u otro. La velocidad se controla en el software, con retrasos entre un semigiro y otro. Algo así como lo que se muestra en el siguiente dibujo:

Motor paso a pasoEl montaje del conjunto no es demasiado complejo, pero tiene cables por todas partes. Sobre todo para conectar el integrado.

L293D pinout

No he sido capaz de dibujar el esquema del circuito, se las trae. Y el código ha resultado peleón. No hacía lo que yo quería. No he usado ninguna librería especial. y todo ha funcionado muy bien, como se ve en el vídeo adjunto.

¿Y todo esto para qué? Pues además de pasar una muy buena tarde y de juguetear con la electrónica digital, tengo un proyecto en mente que cuando se acabe ( y tardará meses, me temo) va a ser muy, muy interesante. ¡Al tiempo!

Código:
Primero inicializamos las variables:

int MotorPin1 = 2;
int MotorPin2 = 3;
int MotorPin3 = 4;
int MotorPin4 = 5;
int pulsador1 = 7;
int pulsador2 = 8;

La variable “retraso” indica el tiempo en milisegundos que pasa entre un giro parcial y otro. Valores menores hacen que avance más rápido. Valores altos, desplazan el motor muy lentamente.

int retraso = 100;

Definimos los diferentes pins de la placa Arduino como de salida -los de control del motor-, o de entrada -los de los pulsadores-.

void setup() {
   pinMode(MotorPin1, OUTPUT);
   pinMode(MotorPin2, OUTPUT);
   pinMode(MotorPin3, OUTPUT);
   pinMode(MotorPin4, OUTPUT);
   pinMode(pulsador1,INPUT);
   pinMode(pulsador2,INPUT);
}

Bucle principal, se repite hasta que el Arduino se apaga.

void loop() 
{

Si pulsamos el pulsador “1” avanza en un sentido. El movimiento se consigue controlando qué bobinas del motor tienen corriente, lo que les hace girar una fracción de vuelta. (Buena información en http://diymakers.es/mover-motores-paso-paso-con-arduino/)

if (digitalRead(pulsador1) == HIGH)
   {
    digitalWrite(MotorPin1,HIGH);
    digitalWrite(MotorPin2,LOW);
    digitalWrite(MotorPin3,HIGH);
    digitalWrite(MotorPin4,LOW);
    delay(retraso);

    digitalWrite(MotorPin1,HIGH);
    digitalWrite(MotorPin2,LOW);
    digitalWrite(MotorPin3,LOW);
    digitalWrite(MotorPin4,HIGH);
    delay(retraso);

    digitalWrite(MotorPin1,LOW);
    digitalWrite(MotorPin2,HIGH);
    digitalWrite(MotorPin3,LOW);
    digitalWrite(MotorPin4,HIGH);
    delay(retraso);

    digitalWrite(MotorPin1,LOW);
    digitalWrite(MotorPin2,HIGH);
    digitalWrite(MotorPin3,HIGH);
    digitalWrite(MotorPin4,LOW);
    delay(retraso);
   }

Si pulsamos el pulsador “2” avanza en el sentido opuesto.

if (digitalRead(pulsador2) == HIGH)
   {
    digitalWrite(MotorPin1,LOW);
    digitalWrite(MotorPin2,HIGH);
    digitalWrite(MotorPin3,HIGH);
    digitalWrite(MotorPin4,LOW);
    delay(retraso);
    
    digitalWrite(MotorPin1,LOW);
    digitalWrite(MotorPin2,HIGH);
    digitalWrite(MotorPin3,LOW);
    digitalWrite(MotorPin4,HIGH);
    delay(retraso);
    
    digitalWrite(MotorPin1,HIGH);
    digitalWrite(MotorPin2,LOW);
    digitalWrite(MotorPin3,LOW);
    digitalWrite(MotorPin4,HIGH);
    delay(retraso);
    
    digitalWrite(MotorPin1,HIGH);
    digitalWrite(MotorPin2,LOW);
    digitalWrite(MotorPin3,HIGH);
    digitalWrite(MotorPin4,LOW);
    delay(retraso);
   }

}

 

Referencias:

 

2 comentarios en “Control de un motor paso a paso bipolar (de un lector dvd) con Arduino UNO

  1. Pablo

    Interesante y simple tu trabajo. Una pregunta… como averiguaste cuales eran los cables del motor paso a paso bipolar. Estoy intentando hacer lo mismo. Pero no puedo encontrar el modo de identificar los cables que salen del motor

Deja un comentario