

Antes de nada hay que comprender que es y como funciona un motor CC (Corriente Continua). Un motor CC es una maquina que convierte la energía eléctrica en energía mecánica.
Ahora bien ¿Como lo Hace?
Un motor normal de corriente continua esta formada por una pieza móvil llamada rotor u una parte fija llamada estátor. En el estátor hay existen electro imanes que al recibir corriente eléctrica generan un campo magnético que mueve el rotor ( que es metálico).
Una serie de escobillas se encargan de alternar la polaridad del campo magnético para evitar que rotor se detenga una vez a alcanzado el punto hacia el que estaba siendo conducido.
Esto deja entre ver varias cosas, pero las dos mas importantes son:
- Si cambiamos la polaridad con la que alimentamos el motor, el campo magnético se generara en sentido contrario y el motor cambiara su sentido.
- A mayor Voltaje, mas rápida será la alternancia de polos en el campo magnético y mas rápido girara el motor. O lo que es lo mismo. Cuanto mas voltios usemos para alimentar al motor, más rápido va a ir. (hasta cierto punto, demasiado V podría quemar el motor. )
Bien, como hacemos para cambiar la polaridad con la que alimentamos el motor sin ir físicamente allí y darle la vuelta a la pila. Pues la respuesta esta en un montaje muy simple llamado puente H:

Como vemos, si cerrásemos S1 y S4 la corriente iría por S1, atravesaría el motor haciéndolo girar y saldría a l polo opuesto por S4.
Si dejamos abiertas S1 y S4 y cerramos S3 y S2 la corriente entrara por S3, atravesara el motor en sentido contrario al que lo hizo, por lo tanto, el motor girara en sentido opuesto y saldrá por S2 hacia el polo de la pila.
Este circuito es sencillo y fácil de probar, solo son necesarios una pila 9V, cuatro interruptores y un motor de cc. Pero ahora vamos a ver como se implementan en las aplicaciones reales:
Vamos a utilizar el integrado L293B. que básicamente no es más que un "chip" que contiene dos puentes H.
Internamente el L293B es así, y este es el montaje típico que propone el fabricante. Como vemos controla un motor en sus dos direcciones y otros dos en una sola dirección.
Estos son los colores a los que corresponde cada cable y a donde van conectados:
Color | Pin del Integrado | Conectado A... |
---|---|---|
Verde | Enable 1 | Arduino (D1) |
Blanco | Input 1 | Arduino (D3) |
Gris | Input 2 | Arduino (D5) |
Marrón | Input 3 | Arduino (D9) |
Azul | Input 4 | Arduino (D10) |
Verde y Amarillo | Outputs | Motores |
Negro | GND | GND |
Rojo Claro | Vcc 2 | V > 9V |
Rojo Oscuro | Vcc | 5V |
Voy a intentar explicar un poco lo que hace, para ello, primero tenemos que mirar el patillaje del integrado:

Las patillas importantes van a ser las siguientes:
1: Enable 1: cuanto esta a 1 ( es decir, esta recibiendo corriente) Activa el circuito uno del chip ( el que controlara el primer motor) Es importante no olvidarnos de esto. Ya que aunque el resto de la programación y el montaje sea correcto, y las señales lleguen bien, el circuito no hará absolutamente nada si esta patilla no esta a 1.
2:Input1: cuando ponemos corriente en esta patilla ( cuando hacemos que este a 1) la salida en output1 también sera de 1 y el motor ira hacia delante.
3:Output1: Si Input1 esta a 1, por esta patilla sale corriente, y el motor se mueve.
4:GND: Esta patilla se conecta a tierra
5:GND: Esta patilla se conecta a tierra
6:Output2: Si esta patilla esta activa, el motor ira marcha atrás.
7:Input2: cuando esta patilla esta a 1, se activa output2 ( siempre que input1 este a 0, es decir, no tenga corriente).
8:Vcc 2: Alimentación de los motores, se conecta a una fuente externa que de suficiente corriente para alimentar los motores
9:Enable2: Análogo a Enable1, pero para el segundo motor.
10:Input3: Análogo a Input1 para Output3
11:Output3: Análogo a Output1 para Input3
12:GND: Esta patilla se conecta a tierra
13:GND: Esta patilla se conecta a tierra
14:Output4:Análogo a Input1 para Output4
15:Input4:Análogo a Output1 para Input4
16:Vcc: Se conecta a 5V y alimenta el intedrado.
¿Para que sirve todo esto?
Alguno podría pensar viendo todo esto que si las salidas van a depender tan estrechamente de las entradas, no tiene sentido utilizar todo esto y que se podrían conectar directamente los motores a las salidas. Entonces ¿para que emplear este montaje?
La respuesta es muy sencilla, este montaje solventa dos problemas:
- El problema de voltaje. Las entradas se activan con 5V ( una tensión que cualquier integrado puede manejar sin problema, incluidos Arduino y los PIC) pero esta tensión no es suficiente para hacer funcionar un motor.
- El problema del consumo en Amperios: Arduino, como cualquier controlador, solo puede entregar un numero limitado de amperios en sus salidas. Sin lo conectásemos directamente la demanda seria tan grande que podría llegar a quemar el Arduino.
Ese es el sentido de emplear este integrado, ya que podemos activar sus entradas con 5V y devolver un voltaje muy superior por sus salidas. En nuestro caso este voltaje sera de entre 9 y 12 V ( dependerá de la velocidad a la que vea que se mueve el motor. )
Para esto basta con alimentar el integrado por su patilla 8.
Programa
//definimos donde esta conectada cada patilla del integrado const E1 = 1; const E2 = 2; const I1 = 3; const I2 = 5; const I3 = 9; const I4 = 10; void setup{ } void loop{ //activamos los enables digitalWrite(E1, HIGH); digitalWrite(E2, HIGH); //avanzamos digitalWrite(I1, HIGH); digitalWrite(I3, HIGH); digitalWrite(I2, LOW); digitalWrite(I4, LOW); //retrocedemos digitalWrite(I2, HIGH); digitalWrite(I4, HIGH); digitalWrite(I1, LOW); digitalWrite(I3, LOW); //usamos un solo motor digitalWrite(I1, HIGH); digitalWrite(I3, LOW); digitalWrite(I2, LOW); digitalWrite(I4, LOW); //mismo motor con otra dirección digitalWrite(I1, LOW); digitalWrite(I3, LOW); digitalWrite(I2, HIGH); digitalWrite(I4, LOW); //ahora el otro digitalWrite(I1, LOW); digitalWrite(I3, HIGH); digitalWrite(I2, LOW); digitalWrite(I4, LOW); //cambio de direccion digitalWrite(I1, LOW); digitalWrite(I3, LOW); digitalWrite(I2, LOW); digitalWrite(I4, HIGH); //paramos digitalWrite(I1, LOW); digitalWrite(I3, LOW); digitalWrite(I1, LOW); digitalWrite(I3, LOW); }