A la hora de desarrollar nuestros proyectos de Arduino existen numerosos tipos de displays de los que podemos echar mano para dar un punto más interactivo y visual a nuestras creaciones. Existen los paneles LCD, OLED y LED entre otros. Pero aprender a utilizar estos paneles no siempre es fácil. Es con esto en mente que hoy vamos a hablar acerca de cómo utilizar el display TM1637 de 7 segmentos.
También te puede interesar : ¡Agrega un Display TM1637 a tu alarma HC-SR04!
Se trata de un tipo de display bastante popular, ideal a la hora de visualizar distancias, tiempo y demás elementos que conlleven solo 4 dígitos. Nosotros hemos echado mano del display de 7 segmentos TM1637 de AZ-Delivery puesto que tenemos bastante confianza en esta marca gracias a su excelente reputación en el sector de la electrónica y a su excepcional atención post-venta.
La firma también ofrece descuentos al comprar más de una unidad, envío gratis dentro de la unión europea y un manual de uso para la mayoría de sus componentes que te ayudan en la configuración inicial.
Dicho esto, avanzamos con nuestro tutorial para aprender a usar el display de 7 segmentos TM1637 haciendo un repaso al cableado necesario y las principales funciones de su librería.
Tutorial Para Usar El Display De 7 Segmentos TM1637
¿En qué consiste este panel?
En pocas palabras se trata de un panel que consta de 4 digitos y 7 segmentos cada uno. El panel está compuesto de LEDs que activamos o desactivamos según lo que estemos mostrando en el mismo.
También es posible hacerse con el panel sin el driver TM1637 pero no recomendamos esto principalmente porque entonces pasamos de un módulo cómodo de utilizar que solo requiere de 4 pins a un módulo que nos acapara 12 pins.
El display cuenta entonces con 4 pins:
- 1 Pin VCC
- 1 Pin GND
- 1 Pin CLK
- 1 Pin DIO
Resulta importante mencionar que puedes conectar los pins CLK y DIO a cualquier pin de entrada de Arduino dado que no están atados a ninguna función especial. En este sentido tampoco estás limitado a utilizar este segmento con los pines digitales, pudiendo usarlo también con los pines analógicos que tuvieras disponibles.
En el caso que nos ocupa hemos utilizado el panel con los pines 10 y 11 para las conexiones CLK y D10 respectivamente.
¿Qué librería necesito?
Para hacer uso de este panel vamos a utilizar la librería TM1637 por Avishay Orpaz. Puedes instalar dicha librería directamente desde el buscador del IDE de Arduino buscando TM1637.
¿Qué otros componentes necesito?
No necesitaremos nada más para aprender a utilizar este panel. No obstante, los usos más comunes para este tipo de displays son relojes, medidores de temperatura y contadores para los que sí necesitaríamos hacer uso de algún que otro componente adicional.
¿Cómo funciona el display?
Comenzamos compartiendo con vosotros el diagrama de conexiones.
A continuación el código que utilizamos para imprimir el nombre Jose (el de vuestro servidor) y el contador que va subiendo un punto el brillo en cada iteración.
Función clear ()
Hemos creado un par de arrays para
inicializar y apagar el display. Esto es una buena práctica pero en la realidad también
tienes la opción de utilizar la función clear () de la clase TM1637 que también limpia el display de todos los elementos que había impreso previamente.
Función setBrightness (int valor)
Lo primero que haremos en la función setup () es justamente definir el brillo que tiene el panel de 7 segmentos. En este sentido debemos recordar que 0 es el brillo mínimo y 7 es el brillo máximo.
Array de Nombres
Dentro del loop () vamos a crear un array que sirva para imprimir el nombre "JOSE" en el display. Para ello lo que hacemos es sencillamente "activar" los segmentos que necesitamos en cada dígito. Esto no te sirve para cualquier nombre. Por ejemplo, no puedes imprimir la V, W o Z entre otras letras de forma clara.
En el caso que nos ocupa, para imprimir la letra "J" vemos que necesitamos activar el segmento B,C y D.
SEG_B | SEG_C | SEG_D,
Función setSegments (array, longitud, posición)
Para imprimir el nombre que hemos dispuesto en el array vamos a utilizar la función setSegments () que recibe tres parámetros.
El primero de ellos es el array del texto. El segundo parámetro es la longitud que ocupa. No es un parámetro obligatorio, en nuestro caso habría sido 4 si lo hubiéramos incluido.
Finalmente tenemos el parámetro posición. Este parámetro tampoco es obligatorio y lo que hace es definir desde qué posición se empieza a imprimir en el panel el texto introducido. Si, por ejemplo, quisiéramos que el primer segmento estuviera libre diríamos que la posición es 1 para que la posición 0 no muestre nada.
Función showNumberDec (número, leading_cero, longitud, posición)
Esta es la función más popular dentro de este tipo de paneles puesto que fueron creados justamente con el objetivo de imprimir valores numéricos y no tanto texto.
En este función tenemos 4 parámetros, el primero es el número que queremos que se muestre en el display, el segundo es un booleano e indica si queremos que los números vengan precedidos de un 0 en caso de no tener ese dígito ocupado (por defecto es false).
El tercer parámetro, al igual que en la función anterior, hace referencia a la cantidad de segmentos ocupados y el último parámetro nos permite indicar dónde queremos comenzar a mostrar el número que hemos dado como parámetro.
Función showNumberDecEx (número, puntos, leading_cero, longitud, posición )
Esta función es una extensión de la anterior y te permite encender los puntos que tuvieras disponibles. En nuestro caso solo tenemos los dos puntos de separador. Para activar dichos puntos tenemos que colocar 0b01000000 como segundo parámetro en esta función.
Parámetro Puntos Ejemplo
0b10000000 0.000 1.234
0b01000000 00.00 12.34
0b00100000 000.0 123.4
0b11100000 0.0.0.0 1.2.3.4
Como podemos observar, el parámetro que pasemos a la función showNumberDecEx determinará donde se colocará el punto. Así, si quisiéramos mostrar en el panel 15.00 entonces escribiríamos la siguiente línea:
display.showNumberDecEx(1500,0b01000000,false,4,0);
¿Y tú? ¿Qué vas a crear con él? ¿Un reloj? ¿Un contador? ¿Un medidor de temperatura? ¡La imaginación es el límite!