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:

miércoles, 6 de julio de 2016

Robot Miniskybot 2.0 controlado a través de Bluetooth


Hoy os voy a enseñar a controlar, a través de Bluetooth, el “Robot Miniskybot 2.0” que construimos en un POST anterior. Para ello utilizaremos una aplicación, para Smartphones con Sistema Operativo Android, llamada ”Wise HC-06 Carrinho Bluetooth”, mediante la cual, enviaremos una cadena de caracteres única a través de Bluetooth, cada vez que pulsemos cualquiera de las flechas de control de las que dispone la aplicación, a un módulo HC-06 que tendremos conectado a nuestro Arduino, para que este decodifique las cadenas enviando las ordenes de movimiento a los dos servos de rotación continua  del “Robot Miniskybot 2.0", que son los encargados de generar el movimiento.

Aplicación para Android “Wise HC-06 Carrinho Bluetooth”


La aplicación para Android “Wise HC-06 Carrinho Bluetooth” la podemos obtener directamente desde la “Play Store” de nuestro Smartphone Android o instalarla a través de nuestro PC en este enlace.  

Como de momento no se ha trabajado nunca con dispositivos Bluetooth en este BLOG, nos vamos a parar un poco para poder comprender este tipo de comunicación y en concreto describir el funcionamiento del módulo Bluetooth HC-06, que tan comúnmente se va a utilizar junto con nuestro Arduino, puesto que es inevitable utilizar un módulo Bluetooth HC-06 o HC-05 como puerta de enlace entre los dispositivos Bluetooth, tales como Smartphones o PC´s, y nuestro Arduino, ya que por sí solo no es capaz de comunicarse con este tipo de tecnología.

Bluetooth es una especificación industrial para Redes Inalámbricas de Área Personal (WPAN) que posibilita la transmisión de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia en la banda ISM de los 2,4 GHz. Los principales objetivos que se pretenden conseguir con esta norma son:

·         Facilitar las comunicaciones entre equipos móviles.

·         Eliminar los cables y conectores entre éstos.

·         Ofrecer la posibilidad de crear pequeñas redes inalámbricas.

·         Facilitar la sincronización de datos entre equipos personales.

Los dispositivos que con mayor frecuencia utilizan esta tecnología pertenecen a sectores de las telecomunicaciones y la informática personal, como PDA, teléfonos móviles, computadoras portátiles, ordenadores personales, impresoras, cámaras digitales y en nuestro caso el módulo Bluetooth HC-06 que vamos a interconectar con nuestro Arduino.

Logotipo del dispositivo Bluetooth
 
El módulo de Bluetooth HC-06 se trata de un dispositivo relativamente económico y que habitualmente se vende en un formato que permite insertarlo en un protoboard y cablearlo directamente a nuestro Arduino, incluso sin realizar soldaduras. Algunas de las características más importantes de este dispositivo se describen a continuación:

·         Compatible con el protocolo Bluetooth V2.0.

·         Voltaje de alimentación: 3.3VDC – 6VDC.

·         Voltaje de operación: 3.3VDC.

·         Baud rate ajustable: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.

·         Trabaja exclusivamente en modo esclavo, es decir, solo recibe datos.

·         Corriente de operación: < 40 mA

·         Corriente modo sleep: < 1mA


Módulo Bluetooth HC-06

Podemos cambiar las configuraciones de  velocidad de transmisión de datos, el código de emparejamiento, el nombre, etc. mediante un protocolo denominado comandos AT. Para poder hacerlo es necesario que el HC-06 no este emparejado ni siendo usado por ningún dispositivo aunque no es el propósito de este POST, sino que simplemente utilizaremos los valores por defecto que el módulo trae programados, aunque es posible que hayan sido manipulados y tengamos que recurrir a los comandos AT.

·         Nombre por defeco: “linvor” o “HC-06”.

·         Código de emparejamiento por defecto: 1234.

·         La velocidad por defecto (BAUD RATE): 9600. 

Para conectar el módulo Bluetooth HC-06 con la aplicación de Android, lo primero que tendremos que hacer es encender el Bluetooth de nuestro Smartphone y cerciorarnos de que el módulo Bluetooth HC-06 esté correctamente alimentado (+5V y GND) y conectado a nuestro Arduino de la siguiente manera:

·         Pin TX del módulo Bluetooth HC-06  à Pin digital 10 de Arduino.

·         Pin RX del módulo Bluetooth HC-06  à Pin digital 11 de Arduino.

Posteriormente tendremos que vincular el módulo Bluetooth HC-06 con nuestro Smartphone como si de cualquier otro dispositivo Bluetooth se tratara, es decir, una vez encontrado el módulo Bluetooth HC-06 (con nombre  “linvor” o “HC-06” si no lo hemos modificado mediante comandos AT), tendremos que ingresar el código de emparejamiento (1234 si no la hemos modificado mediante comandos AT). Por último, abriremos la aplicación y pulsaremos sobre el icono del Bluetooth para que nos muestre la lista de dispositivos vinculados a nuestro Smartphone, donde tenemos que seleccionar la conexión con nombre “HC-06” para conectarnos al módulo Bluetooth HC-06. Solo tendremos que fijarnos que si hemos realizado la conexión Bluetooth correctamente, el LED de conexión del módulo Bluetooth HC-06 dejará de parpadear para finalmente quedarse encendido todo el tiempo y de esta manera sabremos que todo está ya listo para que comience a moverse el “Robot Miniskybot 2.0” en distintas direcciones, cada vez que pulsemos sobre las diferentes flechas de la aplicación. 

Para la programación del robot he tenido en cuenta los cinco estados siguientes:

•          Avance: Recibe la cadena “F1S0“ à Flecha arriba de la aplicación.

•          Retroceso: Recibe la cadena “T1S0“ à Flecha abajo de la aplicación (si el robot está parado).

•          Paro: Recibe la cadena “T1S0“ à Flecha abajo de la aplicación (si el robot está moviéndose).

•          Derecha: Recibe la cadena “D1S0“ à Flecha derecha de la aplicación.

•          Izquierda: Recibe la cadena “E1S0“ à Flecha izquierda de la aplicación. 

Al pulsar cada una de las flechas de la aplicación, el robot se moverá en una dirección concreta,  a excepción de la flecha hacia abajo, puesto que si el robot está en movimiento, al pulsarla el robot se para, y si el robot está parado, al pulsarla se moverá marcha atrás (retroceso). El tratamiento de las cadenas de caracteres que recibe nuestro Arduino a través de Bluetooth se realiza dentro del programa mediante sentencias “if”, además de incluir múltiples comentarios que nos aclaran el funcionamiento de todo el sistema.   

Por último y antes de que se me olvide, tengo que darle las gracias a “Adriano Moutinho” por haber creado una aplicación tan simple y funcional, y a vosotros deciros que es muy importante dejar votos positivos en las aplicaciones gratuitas que os descarguéis, para que los desarrolladores obtengan algún tipo de beneficio con su trabajo, aunque solo sea el del reconocimiento del mérito personal.



Lista de Materiales:

 
·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo Bluetooth HC-06 (Esclavo).

·         2 Servos de rotación continua (SM-S4306R).

·         Portapilas 6xAAA con conector Jack macho de 2,1mm.

·         6 pilas recargables AAA de 1000mAh con cargador.

·         Robot Miniskybot 2.0:
o   Chasis y dos ruedas impresos en plástico ABS.
o   4 tornillos de  M3x10mm  y 4 tuercas M3.
o   Canica de 16mm de diámetro.
o   2 Juntas tóricas de 50mm de diámetro y 3 mm de grosor.

·         Gomas elásticas para la sujeción de los elementos.

·         Smartphone con S.O Android.

·         Aplicación “Wise HC-06 Carrinho Bluetooth” (Play Store).

·         Protoboard.

·         Cables de conexión.

  
Código del programa: