La placa de manejo de motores que vamos a usar está basada en el chip L298 que es un puente en H capaz de manejar 2 motores.
Las placas basadas en este chip suelen tener capacidad para controlar 2 motores normales o un paso a paso de 4 entradas y suelen manejarse del siguiente modo:
- Se usan 2 pines para controlar la direccion de giro de cada motor. Un pin establece la polaridad de cada uno de los hilos de cada motor, así si ponemos uno a 1 y el 0 a 0 tendremos que la corriente va de positivo al otro girando en un sentido. Para hacer el giro en sentido contrario cambiaremos los estados. Si activamos las 2 entradas a 0 el motor estará en estado libre y si ponemos las 2 a 1 estará bloqueado
- Un pin activa las salidas para cada motor, conectando este pin a una salida PWM conseguiremos modular la «intensidad» de la salida dando la sensación de velocidad
En resumen necesitamos 6 pines: 4 para controlar la dirección y 2 para controlar la velocidad.
Veamos las conexiones:
//Test the L298N motor driver shield – Arduino UNO // motor A int dir1PinA = 13; int dir2PinA = 12; int speedPinA = 11; //motor B int dir1PinB = 10; int dir2PinB = 8; int speedPinB = 9;
En las imágenes se puede ver el conexionado utilizando el cable que viene en el kit con el que conectamos la placa de sensores conectada a la placa de arduino con el driver de motores

Para esta primera prueba he hecho un programa sencillo, pero que ya está preparado para futuras funcionalidades.
//Test the L298N motor driver shield – Arduino UNO
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 11;
//motor B
int dir1PinB = 10;
int dir2PinB = 8;
int speedPinB = 9;
#define FORWARD 'f'
#define BACKWARD 'b'
#define FREE 'F'
#define BLOCK 'B'
#define velocidadMaxima 255
#define velocidadStop 0
#define velocidadMedia 200
void setup()
{
pinMode(dir1PinA,OUTPUT); // Dir 1 Motor A
pinMode(dir2PinA,OUTPUT); // Dir 1 Motor A
pinMode(speedPinA,OUTPUT); // In arduino UNO it has to be a PMW pin (3, 5, 6, 9, 10, and 11)
pinMode(dir1PinB,OUTPUT); // Dir 1 Motor A
pinMode(dir2PinB,OUTPUT); // Dir 1 Motor A
pinMode(speedPinB,OUTPUT); // In arduino UNO it has to be a PMW pin (3, 5, 6, 9, 10, and 11)
Serial.begin(9600); // To begin to comunincate with the serial port
}
int potencias[]={255,200,150,100,50,0};
void controlMotor(char command,int pinDir1,int pinDir2,int pinSpeed,int Speed)
{
Serial.print(command);
Serial.print("[");
Serial.print(pinDir1);
Serial.print(",");
Serial.print(pinDir2);
Serial.print("]");
switch(command)
{
case FORWARD:
{
digitalWrite(pinDir1,HIGH);
digitalWrite(pinDir2,LOW);
}
break;
case BACKWARD:
{
digitalWrite(pinDir1,LOW);
digitalWrite(pinDir2,HIGH);
}
break;
case FREE:
{
digitalWrite(pinDir1,LOW);
digitalWrite(pinDir2,LOW);
}
break;
case BLOCK:
digitalWrite(pinDir1,HIGH);
digitalWrite(pinDir2,HIGH);
break;
}
analogWrite(pinSpeed,Speed);
Serial.print(":");
Serial.println(Speed);
}
void loop()
{
// Vamos hacia adelante
controlMotor(FORWARD,dir1PinA,dir2PinA,speedPinA,velocidadMedia);
controlMotor(FORWARD,dir1PinB,dir2PinB,speedPinB,velocidadMedia);
delay(1000);
// giramos en el sitio
controlMotor(FORWARD,dir1PinA,dir2PinA,speedPinA,velocidadMaxima);
controlMotor(BACKWARD,dir1PinB,dir2PinB,speedPinB,velocidadMaxima);
delay(5000);
// Volvemos hacia atras
controlMotor(BACKWARD,dir1PinA,dir2PinA,speedPinA,velocidadMedia);
controlMotor(BACKWARD,dir1PinB,dir2PinB,speedPinB,velocidadMedia);
delay(1000);
}
Os dejo un vídeo de sus primeros pasos
Robot 4WD II: primeras pruebas


