06 agosto 2013

Control de motores DC con Arduino Nano v3

Hace unos días, alguien me preguntaba... ¿Cómo controlar proyectos que utilizan Arduino desde Android vía Bluetooth?

Algo mejor  para responder a esta pregunta, era montar un pequeño proyecto que ejemplificara el uso de Arduino para controlar algo que se moviera y que nos permitiera conectarnos remotamente desde Android vía bluetooth.

Esta entrada, a pesar de lo que puedan imaginar, no vamos  a hablar ni de Bluetooth ni de Android, sino más bien del proyecto que quiero armar: Un pequeño carro a "control remoto" vía Bluetooth.

El primer paso, obviamente, es el control del motor DC que moverá al carrito. Así que en esta brevísima entrada, les explicaré como controlar motores DC son su Arduino Nano, un par de transistores y un poco de paciencia. Al final de esta entrada podrán controlar un pequeño motor DC como el que les muestro en este video:


¡Comencemos!



Nuestro vehículo


Sinceramente no quería armar un carro desde cero, así que fuí a comprar un pequeño carro R/C sencillo que estuviera relativamente barato. Este me en particular me gustó por su aspecto de vehículo de rally. (Uno de mis sueños es correr en Dakar, pero eso no tiene nada que ver con este tema)

Este carro, tiene un control remoto muy sencillo que permite que lo movamos hacia adelante y hacia atrás y giremos las llantas hacia la izquierda y derecha.

Al abrir y revisar el interior nos encontraremos con la tableta controladora que trae de fábrica. Debo decir que trozos de silicon regados por el interior y soldaduras un poco hechas de mala gana no hablan demasiado bien de la calidad de fabricación del vehículo, sin embargo la parte que más nos interesa: el eje trasero y el de dirección nos funcionarán perfectamente para el proyecto que queremos armar.

A pesar de todo el chasis parece lo suficiente robusto y en la parte inferior incluye el porta-baterías que podremos utilizar ya sea para utilizar las baterías AA o luego podremos colocar en su lugar una celda LiPo que de paso ocupan mucho menos espacio.

¿Cómo funciona un motor DC?


Un motor DC como los que utiliza el carro de juguete gira al aplicar un voltaje a sus terminales, las bobinas al interior del motor generan un campo magnético con el paso de la corriente que provocan que el eje del motor comience a girar.

Algo interesante de estos motores DC es que su dirección de giro cambia si invertimos la polaridad en los terminales.

Para nuestro proyecto vamos a utilizar dos motores DC, uno se encargará de cambiar la dirección de las llantas y el otro de impulsar el vehículo hacia adelante o hacia atrás.

La pregunta que te has de estar haciendo en este momento ¿Cómo cambiamos invertimos la polaridad del motor DC sin crear un lindo corto-circuito o dañar nuestro Arduino?

El puente H (H-Bridge)


Un circuito sumamente sencillo para el control de giro en motores DC es conocido como un puente H. Tiene este nombre porque su forma asemeja dicha letra.

En la imagen de la derecha pueden observar como el arreglo de interruptores tiene una forma de "H".

Los terminales A y B es a donde conectaremos nuestro motor DC. Para visualizar facilmente el cambio en polaridad he coloreado de "rojo" las líneas con voltaje positivo y de "azul" las lineas que van a "tierra".

En el puente-H cuando todos los interruptores se encuentran abiertos el motor se encuentra sin voltaje y por tanto no estará girando.

Si cerramos SW2 y SW3 el terminal A tendrá un voltaje positivo y el B se irá a tierra.

En este momento nuestro motor se encontrará girando en una dirección.

Caso contrario si cerramos SW1 y SW4 y abrimos SW3 y SW2 podemos observar como el terminal A recibe el voltaje positivo y el terminal B se va a tierra.

La polaridad en los terminales se ha invertido, provocando que nuestro motor gire en sentido contrario.

El puente-H es una construcción muy sencilla y uno podría caer en la "tentación" de utilizar algo como un relé para construir el circuito. Sin embargo utilizar relés tendría algunas desventajas, por ejemplo que hay un pequeño retardo entre la apertura y cierre del interruptor lo que podría provocar pequeños corto-circuitos.

Sustituyendo interruptores por transistores

Por el momento, no voy a entrar en detalles sobre el funcionamiento de los transistores. Sin embargo nos interesa saber que son componentes semiconductores que básicamente funcionan como interruptores controlados por corriente.

Un transistor tiene tres terminales denominados Emisor (E), Base (B) y Colector (C). El diagrama más comúnmente utilizado se muestra en el circuito de ejemplo a continuación:


El transistor que se muestra en la imagen es del tipo PNP (por su construcción), cuando el transistor tipo PNP no recibe una corriente que circule desde el terminal B al terminal E, impide el paso de corriente entre el terminal C y el terminal E, actuando efectivamente como un "interruptor abierto".

Sin embargo, si cambiamos SW1 para que se aplique un voltaje sobre R1, una pequeña corriente (limitada por R1) circulará entre el terminal B y E, provocando que circule otra corriente entre el terminal C y E.


La intensidad de la corriente que entra por el terminal C es igual a la corriente que entra por el terminal B multiplicado por la "ganancia" o "amplificación de corriente" del transistor. La corriente que sale por el terminal E es la suma de las corrientes que entran por C y B.

El transistor que hemos utilizado en este ejemplo "2N2222" puede soportar hasta 1A de corriente entrando por el Colector. Los motores DC que utiliza el carrito eléctrico no superan los 300mA por lo que el transistor resulta más que suficiente.

Construyendo nuestro puente-H con transistores


Para el puente H de este ejemplo, decidí no complicar mucho el diseño. Los motores DC de juguete usualmente trabajan entre 1.5 y 3V, pero nuestro Arduino Nano necesitará de al menos 5V para trabajar, así que tomaremos la línea de 3V de las primeras dos baterías AA y la línea de 6V de las cuatro baterías.

El diseño del puente H trabajará entonces con los voltajes de nivel lógico de 5V y un voltaje de alimentación de 3V para el motor. Debemos conectar nuestro motor a los terminales A y B que se muestran en el circuito a continuación:


Notarán que hemos colocado las líneas de 3V en verde y la alimentación del Arduino de 6V en rojo. Para los tierras mantenemos el color azul. Es muy importante que utilicemos un tierra común o no obtendremos los voltajes adecuados para el funcionamiento de los transistores.

Los transistores 2N2222 que tengo disponibles vienen en el paquete TO-92, para saber que terminal corresponde a Emisor, Base y Colector basta con revisar la hoja técnica que nos muestra una imagen con los terminales como la que muestro a la derecha.

Armar el puente-H en la breadboard resulta sumamente sencillo, solo colocamos los transistores uno a la par del otro y colocamos las resistencias de 1K en serie con la línea de base de los transistores como se muestra en el siguiente diagrama:


En el diagrama solo he dejado indicados los pines del Arduino Nano, ya armado sobre la breadboard se ve más o menos como la siguiente fotografía:


La alimentación del circuito

Habrán notado que en el diagrama he utilizado dos fuentes de voltaje, una de 3V para el puente H y una de 6V para el Arduino. Con cuatro baterías AA podemos hacer una sencilla "fuente" de doble voltaje siguiendo el diagrama a la izquierda.

Una pequeña desventaja de este circuito es que los motores DC ocuparán más energía que el Arduino, agotando más rápidamente las baterías que se encuentran en la parte inferior del diagrama.  Una posible solución sería utilizar un regulador de voltaje partiendo de una fuente de voltaje común. Sin embargo para este ejemplo esta fuente será suficiente.

El Sketch de Arduino

Para nuestro sketch primero haremos una pequeña tabla de verdad que nos ayudará a programar más facilmente nuestro Arduino.

D2D3D4D5Motor
0000Parado
1001Giro
0110Giro Inverso

El código de nuestro sketch resulta sumamente sencillo:

void setup() {
  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT); 
  pinMode(4, OUTPUT); 
  pinMode(5, OUTPUT); 
}

void loop() {
  digitalWrite(2,HIGH); // Giro
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  delay(1000);
  
  digitalWrite(2,LOW); // Parada
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  delay(1000);
  
  digitalWrite(2,LOW); // Giro inverso
  digitalWrite(3,HIGH);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
  delay(1000);
  
  digitalWrite(2,LOW); // Parada
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  delay(1000);
}

Guardamos nuestro sketch en el nano, alimentamos todo y si todo nos ha salido bien, deberíamos tener nuestro motor funcionando como en el video que les mostramos al inicio de esta entrada:




Concluyendo...

El H-Bridge es uno de los circuitos más sencillos para el control de motores DC, si bien no nos hemos detenido en la parte del diseño habrán notado como su construcción es bastante sencilla y su costo es muy bajo.

En próximas entradas sustituiremos por completo la tableta de control del carro RC para sustituirlo por un Arduino Nano, un transmisor Bluetooth y llevaremos el Control RC a otro nivel.


Espero que les haya gustado esta entrada y no habiendo nada más por escribir por ahora... ¡Hasta la próxima!

Lista de Materiales

  • 1 x Arduino Nano v3
  • 4 x Resistencias 1K
  • 4 x Transistores 2N2222
  • 1 x Motor DC 3V (De juguetes)
  • 1 x Porta baterías para 2 baterías AA en serie
  • 4 x Baterías Alcalinas AA 1.5V
  • Cable UTP para conexiones

+Fuentes y recursos

6 comentarios:

Nacho Sanchez dijo...

Hola me encanta la idea es muy buena, yo estoy haciendo algo similar pero con raspberry, mi idea fue con un procesador L293D pero me he dado cuenta que aunque funciona pierde mucha fuerza, compré el coche y corria muchisimo aunque la direccion dejaba mucho que desear, al conectar los motores al procesador controlado desde raspberry los motores han perdido un 30% de potencia, sabes si ocurre lo mismo con el puente H que explicas???
mil gracias

Nacho Sanchez dijo...

Hola me encanta la idea es muy buena, yo estoy haciendo algo similar pero con raspberry, mi idea fue con un procesador L293D pero me he dado cuenta que aunque funciona pierde mucha fuerza, compré el coche y corria muchisimo aunque la direccion dejaba mucho que desear, al conectar los motores al procesador controlado desde raspberry los motores han perdido un 30% de potencia, sabes si ocurre lo mismo con el puente H que explicas???
mil gracias

alvaro cadima dijo...

Hola. queria consultarte si puedo poner 5 voltios a la alimentacion del puente H. y trabajar en un arduino uno

alvaro cadima dijo...

Hola. queria consultarte si puedo poner 5 voltios a la alimentacion del puente H. y trabajar en un arduino uno

alvaro cadima dijo...

Hola. queria consultarte si puedo poner 5 voltios a la alimentacion del puente H. y trabajar en un arduino uno

carlos montes dijo...

Buen día

Este dispositivo se podrá utilizar en un carrito montable para niños? los motores, el de avance como el del volante, se alimentan de una bateria de acido-plomo de 6v 4.5ah. gracias