domingo, 17 de diciembre de 2017

Motor a pasos 2BYJ-48 y Driver ULN2003 Arduino


El motor a pasos 28BYJ-48 es un motor unipolar que funciona a 5V, ciertamente podríamos hacer funcionar este motor activando sus bobinas secuencialmente por medio de transistores, sin embargo explicaremos el uso de ese motor por medio del driver que más usualmente se usa con este: el ULN2003. 

Este driver  tiene un conector hembra donde  el conector del  motor encaja perfectamente, también es de notar que éste tiene sólo 4 entradas, por lo cual nuestro podremos usar nuestro motor unipolar como un  motor bipolar. El módulo cuenta también con leds que nos  indican cuáles bobinas están activadas  en cada momento.

A continuación proveemos un ejemplo en el cual usaremos arduino para hacer mover un conjunto motor-driver:

Esquema de conexión con Arduino UNO



Código Arduino

int time_delay = 10;
// FUNCION PARA HACER GIRAR EL MOTOR HACIA LA DERECHA
void step_right(int a, int b, int c, int d)
{
  digitalWrite(a, LOW); // VAMOS ACTIVANDO LAS BOBINAS EN
  digitalWrite(b, LOW); // EN UNA  SECUENCIA ESPECÍFICA
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
}

//FUNCION PARA HACER GIRAR EL MOTOR HACIA A IZQUIERDA
void step_left(int a, int b, int c, int d)
{
  digitalWrite(a, HIGH); // VAMOS ACTIVANDO LAS BOBINAS EN 
  digitalWrite(b, HIGH); // UNA SECUENCIA INVERSA A LA ANTERIOR
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  delay(time_delay);
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  delay(time_delay);
}

void setup() {
  pinMode(8, OUTPUT);//IN4
  pinMode(9, OUTPUT);//IN3
  pinMode(10, OUTPUT);//IN2
  pinMode(11, OUTPUT);//IN1
  delay(1);
  digitalWrite(8, LOW); // damos valores iniciales
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(100);
}

void loop() {
  for (int i = 0; i < 100 ; i++) { // MOVEMOS EL MOTOR A LA DERECHA
    step_right(8, 9, 10, 11);
  }
  for (int i = 0; i < 100 ; i++) { // MOVEMOS EL MOTOR A LA IZQUIERDA
    step_left(8, 9, 10, 11);
  }
}

Al subir este código veremos al motor moverse  en una dirección y luego en la dirección contraria, repitiendo esto una y otra vez.



FIN DEL POST

0 comentarios:

Publicar un comentario

Display matricial 8x8 con Arduino SPI y MAX7219

La matrices led de 8x8 son elementos extremadamente útiles para desplegar mensajes que puedan ser visibles desde la distancia. ...