

Los motores de corriente continua (CC para abreviar) se utilizan en muchas de las maquinas que nos rodean son baratos, fáciles de manejar y pueden dar velocidad o fuerza si empleamos una caja reductora.
El problema que tienen es que tienen un consumo alto, y su velocidad depende de la alimentación que les demos, más voltios, más velocidad. Esto hace que los 5V y 20mA que puede entregar Arduino sea insuficiente para lograr que el motor se mueva, por ello necesitamos algo que reciba las ordenes de Arduino y haga llegar a los motores la potencia que necesiten.
A estos intermediarios se les llama driver y existen varios modelos, cada uno con unas características y precios distintos. Para este circuito usaremos el TA8050P, que es capaz de controlar un motor de continua, tanto su puesta en marcha cómo el sentido de giro utilizando sólo dos pines de Arduino. Si quieres saber más sobre el TA8050P existe un completo tutorial en Trastejant llamado Controlando Motores de CC con TA8050P .
El montaje es el siguiente:
Este el chip por dentro, veamos para que se usa cada patilla y donde debe ir conectada:

Pin | Función |
---|---|
1 | Entrada de control |
2 | Entrada de control |
3 | Conectado a un polo del motor |
4 | GND |
5 | Conectado al otro polo del motor |
6 | No se conecta |
7 | Vcc (entre 6V - 16V) |
Colocaremos la señales de control en dos pines PWM de Arduino para poder controlar la velocidad a la giran os motores.
La reacción de los motores dependerá de las ordenes que mandemos con nuestro Arduino a las entradas de control, estas son todas las posibilidades:
Entradas | Salida | |
---|---|---|
DI1 | DI2 | Motor |
1 | 1 | Parado |
0 | 1 | Movimiento |
1 | 0 | Movimiento Inverso |
0 | 0 | Parado |
Este es un pequeño ejemplo de programa para controlarlo, simplemente avanza hacia delante, para, va hacia atras y vuelve a pararse.
//Declaramos el nombre de los pines int dl1 = 11; int dl2 = 10; void Setup(){ //declaramos que el pin 10 y 11 son salidas pinMode(dl1,OUTPUT); pinMode(dl2,OUTPUT); } void loop{ //avanza 3 segundos digitalWrite(dl1, HIGH); digitalWrite(dl2, LOW); delay (3000); //Se para 3 segundos digitalWrite(dl1, HIGH); digitalWrite(dl2, HIGH); delay(3000); //retrocede 3 segundos digitalWrite(dl1, LOW); digitalWrite(dl2, HIGH); delay(3000); //Se para 6 segundos digitalWrite(dl1, LOW); digitalWrite(dl2, LOW); delay(6000); }