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