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