jueves, 25 de abril de 2013

Controlar dos motores con arduino.

Del video anterior la rutina que se programo en el Arduino es muy simple, solo se mandan salidas altas o bajas dependiendo de como queremos que se comporte el motor.

La función del driver esta descrita en la tabla que publiqué anteriormente en la descripción del driver para manejar los motores.


En estas entradas también es muy útil inyectar una señal PWM en lugar de solo un 1 lógico para así controlar la velocidad del motor, la condición de motor bloqueado es para frenar el motor y mantenerlo sin movimiento, esto es mediante un campo magnético generado dentro del motor que evita que el rotor gire.

A continuación coloco el programa hecho para un arduino uno rev. 3, este programa solo controla la dirección de los motores, si se desea controlar la velocidad hay que cambiar las salidas lógicas por salidas PWM, la frecuencia que debe manejar el PWM debe ser alta por encima del rango de frecuencias audibles (mayor a 20KHz) para evitar que nuestros motores emitan sonidos molestos y al final del dia terminemos con dolor de cabeza (lo digo por experiencia propia XD)


int E1 = 0;    //Habilita o desablita la primera mitad del driver
int E2 = 1;    //Habilita o desablita la segunda mitad del driver

int m11 = 2;  //m11 y m12 son los bits de control del motor uno (en la tabla PIN5 PIN7)
int m12 = 3;

int m21 = 4;  //m21 y m22 son los bits de control del motor dos (en la tabla PIN10 PIN12)
int m22 = 5;

void setup() {                
      
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(E1, HIGH);    //ACTIVAR DRIVER
  digitalWrite(E2, HIGH);
  
  digitalWrite(m11, LOW);    //ADELANTE        
  digitalWrite(m12, HIGH);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, HIGH);  
  delay(1500); 
  
  digitalWrite(m11, LOW);    //ALTO        
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, LOW);  
  delay(500); 
  
  digitalWrite(m11, LOW);    //IZQUIERDA 90°        
  digitalWrite(m12, HIGH);
  digitalWrite(m21, HIGH);            
  digitalWrite(m22, LOW);  
  delay(500);
  
  digitalWrite(m11, LOW);    //ALTO        
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, LOW);  
  delay(500); 
  
  digitalWrite(m11, LOW);    //ADELANTE        
  digitalWrite(m12, HIGH);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, HIGH);  
  delay(1500);
  
  digitalWrite(m11, LOW);    //ALTO        
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, LOW);  
  delay(500);
  
  digitalWrite(m11, HIGH);    //DERECHA 90°        
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, HIGH);  
  delay(500);
  
  digitalWrite(m11, LOW);    //ALTO        
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, LOW);  
  delay(500);
  
  digitalWrite(m11, LOW);    //ADELANTE        
  digitalWrite(m12, HIGH);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, HIGH);  
  delay(1500);
  
  digitalWrite(m11, LOW);    //IZQUIERDA        
  digitalWrite(m12, HIGH);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, LOW);  
  delay(1500);
  
  digitalWrite(m11, LOW);    //DERECHA       
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, HIGH);  
  delay(1500);
  
  digitalWrite(m11, LOW);    //ALTO        
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, LOW);  
  delay(500);
  
  digitalWrite(m11, HIGH);    //REVERSA        
  digitalWrite(m12, LOW);
  digitalWrite(m21, HIGH);            
  digitalWrite(m22, LOW);  
  delay(2000);
  
  digitalWrite(m11, LOW);    //ALTO        
  digitalWrite(m12, LOW);
  digitalWrite(m21, LOW);            
  digitalWrite(m22, LOW);  
  delay(9000);
}  

5 comentarios:

  1. disculpa, por que en ese codigo, no declaras ninguna señal analoga para los cny70?

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Buenas buenas . Donde puedo ver el código de los sensores?

    ResponderEliminar
  4. Buenas buenas . Donde puedo ver el código de los sensores?

    ResponderEliminar