lunes, 26 de septiembre de 2016

Control del motor a pasos unipolar 28BYJ-48 mediante el driver ULN2003


En este POST os voy a mostrar cómo controlar tanto el sentido y velocidad de giro como la posición del eje de un motor a pasos (Stepper) unipolar 28BYJ-48, mediante la utilización del módulo driver ULN2003. El uso de este pequeño motor es muy habitual cuando se requiera un posicionamiento con precisión, como puede ser en pequeñas aplicaciones de robótica, en máquinas CNC o en impresoras 3D.
Motor a pasos unipolar 28BYJ-48

Aunque no es ni demasiado potente ni rápido,  tiene un buen comportamiento junto con Arduino, además de ser bastante económico y fácil de encontrar en cualquier tienda online de electrónica. Las características más importantes de este motor a pasos se detallan a continuación.

Características del motor a pasos unipolar 28BYJ-48

Nosotros vamos a conectar el motor a pasos en su modo “Half Steps”, es decir, en un principio necesitaríamos 8 medios pasos o impulsos para completar un giro completo del eje del motor, pero teniendo en cuenta que el motor está dotado de una reductora de 1/64, finalmente necesitamos dar 8 * 64 = 512 pulsos para completar un giro completo en este modo de conexión (256 pulsos para media vuelta por ejemplo), teniendo en cuenta que el movimiento es más suave y lento que con el modo “Full Steps” que únicamente utiliza 4 pasos, y el consumo y el par es intermedio. Para ello, y teniendo en cuenta que el motor está dotado únicamente de 4 bobinas, para que el motor gire por ejemplo en el sentido de las agujas del reloj (horario) tendríamos que ir excitando las bobinas según la secuencia 1, 2, 3… 7 y 8, de ahí las 8 señales necesarias para el correcto funcionamiento del motor (ver siguiente imagen). Si por el contrario queremos que el eje del motor gire en sentido contrario (antihorario), debemos de invertir el orden de la secuencia (8, 7, 6… 2, 1).

Secuencia de excitación de las bobinas

Como se ha mencionado anteriormente vamos a utilizar el módulo driver ULN2003 que conectaremos a nuestro Arduino, para poder excitar las bobinas en la secuencia correspondiente mediante programación.  Como cabía esperar este módulo basa su funcionamiento en el chip  ULN2003, el cual permite amplificar las señales PWM  y digitales de nuestro Arduino a voltajes y corrientes mucho mayores, es decir, es capaz de manejar hasta 25V y 0.5A en cada una de sus salidas. Internamente está formado por siete pares de  transistores NPN Darlington de uso general para controlar relés, motores, lámparas LED,  y otras aplicaciones de corriente de alta tensión, incluyendo diodos de fijación de cátodo común para cada par Darlington NPN, lo que hace que este chip sea muy útil para la conmutación.

Modulo driver ULN2003

Además este módulo está dotado de 4 LEDS que indican qué bobina está activa en cada momento. La entrada de alimentación del módulo permite un voltaje comprendido entre 5 y 12VDC, siempre que el JUMPER permanezca en “ON”. Es recomendable el uso de una batería externa para la alimentación del módulo (en cuyo caso debemos unir la masa de la batería con la de nuestro Arduino para un correcto funcionamiento), ya que el motor a pasos puede consumir más corriente de la que nuestro Arduino es capaz de suministrar y de este manera dañarlo, aunque yo lo he conectado directamente a los +5V de Arduino y funciona sin problemas. La conexión entre el módulo y el motor a pasos es bastante intuitiva ya que tiene un conector con ranuras para guiar el acople entre los dos dispositivos (5 cables). También deciros que los pines IN1, IN2, IN3 e IN4 pertenecen a las entradas de control del módulo, y son las que irán conectadas a las salidas digitales de Arduino (pines digitales del 8 al 11 empezando por el IN1 con el pin digital 8). 
Como ya os anticipaba al principio de este POST, con el programa que se muestra a continuación, seremos capaces de controlar tanto el sentido y velocidad de giro como la posición del eje del motor a pasos unipolar 28BYJ-48 a través del módulo driver ULN2003, siempre que previamente hayamos hechos las conexiones oportunas de las que el conjunto requiere y hayamos cargado el programa correctamente en nuestro Arduino. El programa consta de 5 estados de movimiento posibles que comandaremos a través de un interruptor táctil capacitivo TTP224 de 4 Vías, cuyas salidas tenemos conectadas a las entradas digitales 4, 5, 6 y 7 de nuestro Arduino (salidas OUT4,  OUT3,  OUT2 y OUT1 respectivamente). Os dejo aquí el enlace donde podéis descargar la imagen para cada uno de los botones.
Interruptor táctil capacitivo TTP224 de 4 Vías

 Para que podáis entender mejor lo que se logra realizar mediante este programa, os muestro una tabla resumen de dichos movimientos y el botón que tendremos que pulsar del interruptor táctil capacitivo TTP224, cuyo voltaje de alimentación oscila entre 2,4 y 5,5VDC, para que nuestro Arduino actúe en consecuencia.

Tabla de movimientos del eje del motor a pasos 28BYJ-48

En número de vueltas se controla modificando el número de pasos en la variable “pasos”, siendo 512 pasos el equivalente a una vuelta completa. La velocidad del motor se controla aumentando o no el retardo entre cada secuencia completa, modificando la variable “velocidad_motor” (como mínimo 900 ms para velocidad máxima), si aumentamos su valor, por ejemplo 4000 ms, la velocidad disminuye. El sentido de giro se controla utilizando las funciones “horario()” y “antihorario()”. Por último deciros que a través del monitor serie del IDE de Arduino se irán mostrando los oportunos mensajes sobre del estado del eje del motor en cada momento. Para mayor información os recomiendo consultar los comentarios realizados en el programa. 

Monitor serie del IDE de Arduino
 

Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Motor a pasos unipolar 28BYJ-48.

·         Módulo driver ULN2003.

·         Interruptor táctil capacitivo TTP224 de 4 Vías.

·         Protoboard.

·         Cables de conexión.


Código del programa:
  





Video:

martes, 13 de septiembre de 2016

Conectando dos LCD 1602 independientes mediante comunicación I²C


Después de estar un tiempo sin dedicarme al BLOG, a partir de hoy retomo la publicación de nuevos POST de manera más o menos continuada como hasta ahora he estado haciendo. Hoy simplemente os voy a mostrar como conectar dos displays LCD 1602 mediante comunicación I²C, sin que su comunicación con nuestro Arduino se cruce, es decir, cada LCD 1602 trabajará de manera independiente. Aunque en este POST nosotros vamos a trabajar con dos LCD 1602, podríamos conectar teóricamente hasta “127” LCD 1602 a nuestro Arduino mediante comunicación I²C, aunque de momento y gracias al módulo LCM 1602 I2C (en sus dos versiones V1 y V2) es posible conectar simultáneamente un máximo de “16”, teniendo en cuenta que sería necesario alimentarlos a +5V externamente y no desde Arduino, puesto que cada versión del módulo LCM 1602 I2C nos ofrece la configuración de ocho direcciones diferentes mediante sus pines A2, A1 y A0 (soldándolos o no a GND), como se muestra en la siguiente imagen.

Tabla de direcciones de los módulos LCM 1602 I²C

Para una mayor información acerca de la conexión y configuración de la dirección I²C en cada uno de los LCD 1602 es importante que analicéis el siguiente POST , teniendo en cuenta que lo más importante para que nos funcionen correctamente ambos LCD 1602 es que cada uno de los módulos LCM 1602 I2C tenga asignada una dirección I²C diferente, para que a través de nuestro Arduino podamos acceder a ella de manera independiente mediante programación.

El programa que tenemos que cargar en nuestro Arduino simplemente realizará un parpadeo alterno inicial de los LCD 1602, para que posteriormente muestren unas líneas de texto diferentes para cada LCD 1602 y finalmente se realice un barrido vertical en bucle continuo de un conjunto de asteriscos a través de ellos, sin que se mezcle la comunicación en ningún momento (para una mayor información debemos de analizar los comentarios del programa).

Este tipo de comunicación en los LCD 1602 es muy interesante cuando conectamos varios sensores a nuestro Arduino y queremos visualizar los resultados de manera independiente, es decir, si por ejemplo tenemos conectados un sensor de temperatura y otro de presión a nuestro Arduino, podremos visualizar un sólo parámetro de manera individual en cada uno de los LCD 1602, para poder acceder a ellos desde diferentes ubicaciones o salas (un LCD 1602 mostraría la temperatura y el otro la presión).



Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Dos módulos LCM 1602 I2C (Versiones V1 y V2).

·         Dos displays 16x2 LCD 1602.

·         Protoboard.

·         Cables de conexión.



 Código del programa:




Video: