Bienvenido a un nuevo tutorial de Lunegate, hoy vamos a analizar el driver para controlar motores DC (HG7881 Dual-Chanel H-Bridge).
INTRODUCCIÓN
Este componente será muy útil para controlar 2 motores DC de bajo amperaje (máximo 1A) y con un par relativamente bajo (dado nuestro motor elegido, si usais uno de mayor par ira mejor), pero que para proyectos de robótica sencillos nos funcionara a la mil maravillas.
El HG7881 es un circuito impreso compuesto por 2 chipset modelo L9110S, que trabajan entre 2,5v y 12v (recomendamos de 5 a 12 voltios) y con un amperaje de 800mA. Las dimensiones de este driver son de 2.9 cm x 2.3 cm x 1.4 cm y un peso de 10 g.
El coste de driver es de 1,79€ (actualmente está rebajado), así que no hay escusa de comprarlo :P, podréis encontrar donde comprarlo en el desglose de componentes que vendrán a continuación.
Para este tutorial, se requerirá:
MATERIAL NECESARIO
A continuación os describo el material necesario para realizar el tutorial y donde conseguirlo:
Motor DC Con reductora
(
Review)
HG7881 Dual-Channel H-Bridge Motor Driver
MONTAJE
Bien una vez que disponemos de todos los componentes, vamos a ponernos manos a la obra. Para ello os dejo a continuación un esquemático de como debéis interconectar los diferentes componentes para que esto funcione.
Es importante mencionar, que actualmente estamos alimentando nuestro motor a 5v a través de nuestro driver. Este driver como hemos explicado arriba puede trabajar hasta 12v (pero nunca a más de 1 amperio), o lo quemaremos. Para poder conseguir llegar hasta 12v tendremos que suministrar este voltaje a través de un fuente externa (Esto lo haré en futuros tutoriales), pero básicamente seria alimentar el driver con la fuente externa en vez de con el Arduino.
PROGRAMACIÓN
Una vez montado todo correctamente (verificar las conexiones que eso trae mucho de cabeza). Conectamos nuestro Arduino a el ordenador y añadimos el código que os pongo a continuación:
int M1_Izq = 12; //Direccion
int M1_Derecha = 11; //Direccion
void setup()
{
pinMode(M1_Izq, OUTPUT);
pinMode(M1_Derecha, OUTPUT);
}
void loop(){
move (1);
delay(1000); //1 sg
stop();
delay(250); //250ms
girar (2);
delay(1000); //1 sg
stop();
delay(250); //250ms
}
void girar(int direccion)
{
boolean inPin1 = LOW;
boolean inPin2 = HIGH;
if(direccion == 1){
inPin1 = HIGH;
inPin2 = LOW;
}
digitalWrite(M1_Izq, inPin1);
digitalWrite(M1_Derecha, inPin2);
}
void stop(){
digitalWrite(M1_Izq, LOW);
digitalWrite(M1_Derecha, LOW);
}
Como podemos observar en el código, trabaja en 2 direcciones a través de un booleano que debéis definirle en los 2 datos que le enviáis a través de la salida digital " digitalWrite(M1_Izq, inPin1); digitalWrite(M1_Derecha, inPin2);".
Si lo que buscais es también controlar la velocidad es a través de este codigo que os añador ahora. ¡Pero! vereis que segun el motor algunas veces no os respondera si no marcais la máxima velocidad... es lo que tiene los componentes muy baratos.
//-- Primero los paramos 1 sg --
digitalWrite( MOTOR_B_DIR, LOW );
digitalWrite( MOTOR_B_PWM, LOW );
delay(1000);
//-- Marcamos dirección y velocidad --
digitalWrite( MOTOR_B_DIR, HIGH ); // direction: Hight = adelante
analogWrite( MOTOR_B_PWM, 255 ); // 255 = rapido (max velocidad)
PUNTUACIÓN
La valoración de este producto es por ahora el mejor driver para 2 motores de bajo coste, según valla comprando otros driver más caro os comentare los tiempos de respuesta, si se calientan, etc.
Driver
HG7881
Tutoriales