sábado, 30 de junio de 2012

Control de motor paso a paso con Inversor de giro

Después de tanto tiempo, volvemos con una práctica sencilla y la verdad que muy útil si sabemos donde utilizarlo. 
La practica creada gracias a la colaboración de J, consiste en el control de un motor paso a paso, con un pulsador para hacer una inversión de giro. Es decir: 
Al arrancar nuestro Arduino, el motor comenzará a girar en el sentido de las agujas del reloj, y en el momento que activemos el pulsador se producirá una inversión de giro, girando en sentido anti-horario.



Materiales empleados:

  • Nuestro Arduino.
  • 1 motor paso a paso 5 vdc 4 fases, con una controladora ULN2003.
  • 1 pulsador.


Motor paso a paso:



Este motorcito con la controladora, lo podremos adquirir en ebay por unos 8€.

Esquema de conexionado:

El conexionado lo realizaremos tal y como se muestra en la siguientes imágenes:





Los pines 8 9 10 y 11, los conectaremos a las correspondientes salidas digitales de nuestro Arduino.
La alimentación podemos emplear la propia del arduino, o una fuente externa como en este caso(5Vdc).
Y el pulsador lo conectaremos como una entrada en el Pin 2.


Aquí nuestro resultado...





Sketch:

/* Motor paso a paso 5VDC+ controladora UNL2003 */


 int motorPin1 = 8;                              
 int motorPin2 = 9;
 int motorPin3 = 10;
 int motorPin4 = 11;
 int delayTime = 15;      // delay que determina el tiempo cada vez que cambia de paso                 
 int buttonPin = 2; 
 int estado = 0;
 
void setup() {
  pinMode(motorPin1, OUTPUT);                   
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(buttonPin, INPUT); 
}
void loop() {
  estado = digitalRead(buttonPin);
  if(estado==HIGH)
  { 
    digitalWrite(motorPin1, LOW);                 // sentido anti-horario
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
  }
  else
  {
    digitalWrite(motorPin1, HIGH);                 // sentido agujas del reloj
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime); 
  }
}

/* Colabo Redfox y J*/








3 comentarios:

  1. mi pregunta es... el pulsador esta conectado en el pin 2 de la placa arduino, que esta marcada como tx1? y entre el pin de tierra?
    seria bueno que publicaras un esquema para ver las conexiones...
    igualmente gracias por el aporte!

    ResponderEliminar
  2. en la placa dice el numero del pin TX y RX son para envio de datos en paralelo

    ResponderEliminar
  3. la verdad me sirvio tu ayuda, tenia uno de estos motores PAP pero no sabia el pinout por eso no me habia atrevido a conectarlo, pero gracias por el tutorial y el codigo para probarlo, Saludos desde EL SALVADOR

    ResponderEliminar