Como
ya hemos dicho, las salidas de nuestra placa nos proporcionan una intensidad
baja. Esa intensidad se queda corta a la hora de accionar muchos elementos,
como por ejemplo los motores de cc que tanto usamos en el aula.
Podemos
amplificar fácilmente esta señal por medio de un transistor, pero vamos a
aprender a usar un driver que nos ofrece más posibilidades. Se trata del
TB6612FNG.
El
driver TB6612FNG nos permite controlar dos motores basándose en un doble
puente-H. Con él podemos fijar el sentido de giro e incluso gracias a una
salida tipo PWM ajustar la velocidad de giro. Recuerda que las salidas PWM son
aquellas que delante del su número tienen el símbolo ~.
El
aspecto que presenta el fabricado por POLOLU es el siguiente:
A
pesar de su aspecto, la conexión es sencilla. Como siempre, lo primero que
deberíamos hacer es ir al datasheet del componente. Allí encontraremos todos
los datos que nos hacen falta. Como se te nota poco motivado, vamos a ir
conectando cables y verás que no era tan complicado. Empezando por la
izquierda:
- GND y VCC: es la alimentación de micro. Podemos sacarla de un GND y del +5V
de la Arduino,
o de otro sitio siempre que esté entre 2.5 y 13v.
- AO1 y AO2: aquí conectaremos los dos bornes del motor A.
- BO1 y BO2: o, de output, salida, b del motor y 1 y 2
de cada una de ellas. Salidas para el motor B.
- Vmot y GND: alimentación externa para los motores, baterías, fuente de
alimentación…
Ya
llevamos 8 pines y no tenemos bajas, seguimos con la parte derecha:
- PWMA:
controla la velocidad por medio de una salida digital con PWM (modulación
por ancho de pulsos) del motor A.
Recuerda que tiene que tener el símbolo ~ delante.
- AIN2 y AIN1: para controlar el sentido de giro de un motor necesitamos dos
salidas digitales de la placa. Usaremos dos cualquiera para el motor A.
- STBY,
standby: poniéndolo en LOW conseguimos parar los motores. Lo conectaremos
a otra salida digital.
- BIN1 y BIN2, in, entrada, b, del motor B, 1 y 2,
cada una de las dos. Las
conectaremos a dos salidas
digitales de la placa.
- PWMB: control
de velocidad del motor B. 0
parado, 255 velocidad máxima.
Ya
lo tenemos conectado. Vamos con el código.
//CONTROLANDO MOTORES CC CON UN DRIVER 6612
//motor A conectado a A01y A02
//motor B conectado a B01 y B02
int STBY = 10; // definimos el pin de standby
//Motor A
int PWMA = 3; // Control de velocidad
int AIN1 = 9; // Dirección
int AIN2 = 8; // Dirección
//Motor B
int PWMB = 5; // Control de velocidad
int BIN1 = 11; // Dirección
int BIN2 = 12; // Direccion
void
setup(){
pinMode(STBY, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
}
void loop(){
mover(1, 255,
1); // acciona el motor 1, velocidad máxima, adelante
mover(2, 255, 1); //
acciona el motor 2, velocidad máxima, adelante
delay(1000); // durante un segundo
stop(); // para los motores
delay(1000); // espera 1 segundo
mover(1, 128, 0); //
acciona el motor 1, velocidad media , atrás
mover(2, 128, 0); //
acciona el motor 2, velocidad media , atrás
delay(1000);
stop();
delay(1000);
}
void
mover(int motor, int velocidad, int direccion){
//Vamos a definir la funcion move,
que va a acciona un motor, fijar su velocidad y el sentido de giro. Definimos: //motor: 1 para el motor A, 2 para el motor B
//velocidad: desde 0 a 255
//direccion: 0 sentido horario, 1 sentido antihorario
digitalWrite(STBY,
HIGH); //deshabilitar standby
boolean inPin1 = LOW;
boolean inPin2 = HIGH;
if(direction == 1){
inPin1 = HIGH;
inPin2 = LOW;
}
if(motor == 1){
digitalWrite(AIN1, inPin1);
digitalWrite(AIN2, inPin2);
analogWrite(PWMA, speed);
}else{
digitalWrite(BIN1, inPin1);
digitalWrite(BIN2, inPin2);
analogWrite(PWMB, speed);
}
}
void
stop(){
//enable
standby
digitalWrite(STBY, LOW);
}