jueves, 3 de noviembre de 2016

Control de Motores DC Driver L298N



Driver L298N


Diagrama de Conexión
Driver L298N para el control de dos motores DC


EL SKETCH



/*
Este programa emplea el driver L298N para controlar la velocidad y giro de 2 motores DC de 600ma de corriente máxima.

El Driver L298N estará alimentado por una fuente externa de 9 Volts . Arduino estará alimentado por una batería de 5 Volts. .  GND de Arduino y GND del Driver L298N deberán estar conectadas a un punto común.

*/

//Motor Izquierdo

int Velocidad_MI = 10;        // Pin PWM para controlar la velocidad de giro del motor Izquierdo

int GiroCW_MI= 9; // Control del sentido de giro CW Motor Izquierdo
int GiroCCW_MI = 8; // Control del sentido de giro CCW Motor Izquierdo

//Motor Derecho



int Velocidad_MD = 5; // Pin PWM para el control de la velocidad de giro del motor derecho

int GiroCW_MI = 7; //Control del sentido de giro CW Motor Derecho
int GiroCCW_MI = 6; // Control del sentido de giro CCW Motor Derecho

void setup ( )
{

pinMode(Velocidad_MD, OUTPUT);
pinMode(Velocidad_MI, OUTPUT);

pinMode(GiroCW_MI, OUTPUT);
pinMode(GiroCCW_MI, OUTPUT);

pinMode(GiroCW_MD, OUTPUT);
pinMode(GiroCCW_MD, OUTPUT);

}

//Subrutinas de control, que se ejecutan una a una

//Primera subrutina en la que ambos motores deberán girar CW a una velocidad fija.

void Subrutina1( )

{
digitalWrite(GiroCW_MI, HIGH);
digitalWrite(GiroCW_MD, HIGH);

analogWrite(Velocidad_MD, 180); //Establece la velocidad del motor A en 180
analogWrite(Velocidad_MI, 180); //Establece la velocidad del motor B en 180
delay(5000); //Los motores giran CW durante 5 segundos

digitalWrite(GiroCW_MI, LOW);
digitalWrite(GiroCW_MD, LOW);
delay(2000);

//Cambio de Giro de los motores, ahora en sentido CCW a velocidad 180

digitalWrite(GiroCCW_MI, HIGH);
digitalWrite(GiroCCW_MD, HIGH);

analogWrite(Velocidad_MD, 180); //Establece la velocidad del MI en 180
analogWrite(Velocidad_MI, 180); //Establece la velocidad del MD en 180
delay(5000);

//Apagar los motores
digitalWrite(GiroCCW_MI , LOW);
digitalWrite(GiroCCW_MD , LOW);
delay(3000); //motores A y B apagados durante 3 segundos

}

void Subrutina2( )
{
//Giro de motores CW que acelerarán desde 0 a máxima velocidad

digitalWrite(GiroCW_MI , HIGH);
digitalWrite(GiroCW_MD , HIGH);

//Aceleración de los motores desde 0 a máxima velocidad

for (int a = 0;  a < 256;   a++)        //a inicia en 0, hasta 256, a se incrementa 1 en cada ciclo
{
analogWrite(Velocidad_MD, a);
analogWrite(Velocidad_MI, a);
delay(20);
}

//Desaceleración de los motores de máxima velocidad a cero

for (int a = 255;  a>=0;  a--)  //para a = 255, mientras a sea >= 0, a decrementa 1 en cada ciclo
{
analogWrite(Velocidad_MD, a);
analogWrite(Velocidad_MI, a);
delay(20);
}

//Apagar motores

digitalWrite(GiroCW_MI , LOW);
digitalWrite(GiroCW_MD , LOW);
delay(3000); //motores apagados durante 3 segundos

}

void loop ( )
//Llamado a las subrutinas 1 y 2
{
Subrutina1( );
delay(3000);
Subrutina2( );
delay(3000);
}






No hay comentarios:

Publicar un comentario