sábado, 13 de febrero de 2016

Control de motores con puente H y arduino



Este tutorial es muy sencillo, nos sirve cuando queremos controlar el giro de un motor DC , para arduino existe una gran variedad de motor shield, que tienen la misma funcion, pero realmente son caros, debido a que son placas ya especiales para arduino, con el puente H (SN754410) que es el que usan los motor shield, nos resulta muchisimo mas barato, ademas que lo pueden usar con otras placas, como la raspberry o incluso con cualquier otro microcontrolador.



El SN754410 es un integrado de 16 pines, con los cuales podremos manejar 2 motores, tendremos para cada motor, 2 entradas, 2 salidas y 1 pin de activacion (enable). Podemos notar tenemos dos alimentaciones, la primera Vcc1 es para la alimentacion del intregrado, que debe ser de 5V, la segunda es para la alimentacion de los motores, esta puede estar en un rango de 4.5V a 36V.


El diagrama de conexion es muy sencillo, conectamos los pines de control directamente a los pines del arduino con los que deseemos controlar, la alimentacion del SN754410 a 5V y la alimentacion del motor a lo que deseemos, al conectar los motores por seguridad le ponemos diodos, en configuracion de un puente de diodos, lo pueden usar sin ello, pero si tenemos cambios bruscos en la direccion del motor, podemos dañar nuestro SN754410, por eso les recomiendo mejor ponerlos. En el caso de los enables con esta configuracion los podemos controlar, pero si lo deseamos podemos mandarlos a 5V para que siempre esten activados los motores.

CODIGO:

//---------------------------------------------------------------------------

int mt1_1 = 7;                //definimos pin 7 para control de motor 1
int mt1_2 = 6;                //definimos pin 6 para control de motor 1
int enable_1 = 5;              //definimos pin  5 para enable de motor 1 

int mt2_1 = 3;                //definimos pin 3 para control de motor 2
int mt2_2 = 2;                //definimos pin 2 para control de motor 2
int enable_2 = 4;              //definimos pin 4  para enable de motor 2

void setup() {
  pinMode(mt1_1, OUTPUT);     //definimos pin 7 como salida
  pinMode(mt1_2, OUTPUT);     //definimos pin 6 como salida
  pinMode(enable_1, OUTPUT);  //definimos pin 5 como salida
  pinMode(mt2_1, OUTPUT);     //definimos pin 3 como salida
  pinMode(mt2_2, OUTPUT);     //definimos pin 2 como salida
  pinMode(enable_2, OUTPUT);   //definimos pin 4 como salida
}

void loop() {
  
  digitalWrite(enable_1, HIGH);   //habilitamos motor 1
  digitalWrite(enable_2, HIGH);   //habilitamos motor 2
    
  detener_1();           //detenemos el motor 1
  detener_2();           //detenemos el motor 2
  delay(1000);           //esperamos 1s
  izquierda_1();         //giramos a la izquierda ambos motores
  izquierda_2();         
  delay(2000);           //esperamos 2s
  derecha_1();           //giramos a la derecha ambos motores
  derecha_2();
  delay(2000);           //esperamos 2s
  derecha_1();           //giramos derecha motor 1 e izquierda motor 2
  izquierda_2();
  delay(2000);           //esperamos 2s
  derecha_2();           //giramos izquierda motor 1 y derecha motor 2 
  izquierda_1();
  delay(1000);           //detenemos
}

//--------------- FUNCIONES PARA MOTOR 1 ----------------------------
void detener_1(){             //funcion para detener el motor
  digitalWrite(mt1_1, LOW);   //ponemos ambos pines en bajo
  digitalWrite(mt1_2, LOW);
}

void izquierda_1(){           //funcion para girar a la izquierda
  digitalWrite(mt1_1, HIGH);  //ponemos pin2 en alto y pin3 en bajo
  digitalWrite(mt1_2, LOW);
}

void derecha_1(){             //funcion para girar a la derecha
  digitalWrite(mt1_1, LOW);   //ponemos pin2 en bajo y pin3 en alto
  digitalWrite(mt1_2, HIGH);
}
//--------------- FUNCIONES PARA MOTOR 2 -----------------------------
void detener_2(){               //funcion para detener el motor
  digitalWrite(mt2_1, LOW);   //ponemos ambos pines en bajo
  digitalWrite(mt2_2, LOW);
}

void izquierda_2(){           //funcion para girar a la izquierda
  digitalWrite(mt2_1, HIGH);  //ponemos pin2 en alto y pin3 en bajo
  digitalWrite(mt2_2, LOW);
}

void derecha_2(){             //funcion para girar a la derecha
  digitalWrite(mt2_1, LOW);   //ponemos pin2 en bajo y pin3 en alto
  digitalWrite(mt2_2, HIGH);
}
//----------------------------------------------------------------------------------------------------

El codigo es muy sencillo, para mover los motores solo necesitamos poner en HIGH los enable para cada motor y mandar a las entradas de cada uno, una combinacion HIGH-LOW para girar a un lado u otro. En el caso para detener, podemos hacerlo de dos maneras, ya sea mandando una combinacion LOW-LOW a las entradas, o mandando directamente LOW a nuestro enable del motor.



1 comentario: