Mostrando valores en Display LED de 4 dígitos TM1637

tm1637-1

Gracias a este simple módulo podemos obtener los valores de nuestros sensores entre otras funciones. Su costo es bajo, alrededor de los 4 dólares, y a diferencia de otros módulos similares, incluye un integrado TM1637 que reduce una gran cantidad de cables a solamente 4.

La conexión es muy simple:

Arduino 3.3V  ==> Display VCC

Arduino GND ==> Display GND

Arduino Digital 2 ==>  Display CLK

Arduino Digital 3 ==>  Display DIO

Existen muchas librerías que podemos utilizar, algunas con muchas ventajas pero no las recomiendo si se está probando el módulo por primera vez. Si lo único que queremos es mostrar valores numéricos en la pantalla, la librería DigitalTube es perfecta y es la que usaremos para el siguiente ejemplo:


#include "TM1637.h"
#define CLK 2 // Pin CLK
#define DIO 3 // Pin DIO
TM1637 tm1637(CLK,DIO);
void setup()
{
tm1637.init(); // Inicializa modulo
tm1637.set(2); // Brillo, 0 (minimo) a 7 (maximo)
tm1637.point(POINT_OFF); // Apaga dos puntos, POINT_ON para encenderlos
}
void loop()
{
tm1637.display(0, 9); // Digito 0 => 9
tm1637.display(1, 8); // Digito 1 => 8
tm1637.display(2, 7); // Digito 2 => 7
tm1637.display(3, 6); // Digito 3 => 6
}

tm1637-2

Aquí el display nos muestra el número 9876, pero también es capaz de entregar más dígitos con valores hexadecimales, por ejemplo las letras A,B,C,D,E y F.


#include "TM1637.h"
#define CLK 2 // Pin CLK
#define DIO 3 // Pin DIO
TM1637 tm1637(CLK,DIO);
void setup()
{
tm1637.init(); // Inicializa modulo
tm1637.set(2); // Brillo, 0 (minimo) a 7 (maximo)
tm1637.point(POINT_OFF); // Apaga dos puntos
}
void loop()
{
tm1637.display(0, 0x0a); // Digito 0 => A
tm1637.display(1, 0x0b); // Digito 1 => B
tm1637.display(2, 0x0c); // Digito 2 => C
tm1637.display(3, 0x0d); // Digito 3 => D
}

tm1637-3

 

Espero que estos breves ejemplos sean suficientes para empezar a experimentar con este display y así potenciar sus proyectos.

Author: Henry López del Pino

Actualmente estudiante universitario, curioso por excelencia.

16 thoughts

  1. Include da error. No funciona. Por favor cuelguen un tutorial que funcione alguna vez!

    P.D:

    Normalmente estos «módulos» son de 12 «patas», a si que si quieres hacer un tutorial útil hazlo con el modelo habitual.

    1. Luis, primero que nada, lee bien el tutorial, dice claramente que debes instalar una libreria, la cual se llama mediante la linea include, si hay un error en la linea include claramente no has instalado la libreria.

      Segundo, el tutorial es especifico para el modelo de 4 pines, porque presenta mejores ventajas que los modulos de doce. Si no dispones del modulo TM1637 claramente este tutorial no es para ti.

      Saludos y no seas tan agresivo, recibirias mas ayuda si fueras mas amigable.
      JZ

  2. Estoy diseñando un proyecto y necesito tener 2 display independientes (uno para un temporizador y otro para un contador), se podrán conectar dos de estos módulos a un mismo arduino? se que por conexion no supone problemas, pero habria que modificar la libreria?

    1. Juan, no tenemos otro display para probar, pero en teoria no deberias modificar la libreria, cada modulo tiene cuatro conexiones, dos son para tierra y V+, las otras dos para CLK (reloj) y DIO (display), solo deberias definir dos constantes nuevas como CLK2 y DIO2 en los pines digitales 4 y 5 (respectivamente), finalmente crear una nueva instancia para el segundo modulo TM1637 tm2(CLK2,DIO2).
      El codigo deberia ser el siguiente:

      #include "TM1637.h"
      #define CLK1 2 // Pin CLK
      #define DIO1 3 // Pin DIO
      #define CLK2 4 // Pin CLK
      #define DIO2 5 // Pin DIO

      TM1637 tm1(CLK1,DIO1);
      TM1637 tm2(CLK2,DIO2);
      void setup()
      {
      tm1.init(); // Inicializa modulo 1
      tm1.set(2); // Brillo, 0 (minimo) a 7 (maximo)
      tm1.point(POINT_OFF); // Apaga dos puntos, POINT_ON para encenderlos

      tm2.init(); // Inicializa modulo 2
      tm2.set(2); // Brillo, 0 (minimo) a 7 (maximo)
      tm2.point(POINT_OFF); // Apaga dos puntos, POINT_ON para encenderlos

      }
      void loop()
      {
      tm1.display(0, 9); // Digito 0 => 9
      tm1.display(1, 8); // Digito 1 => 8
      tm1.display(2, 7); // Digito 2 => 7
      tm1.display(3, 6); // Digito 3 => 6

      tm2.display(0, 8); // Digito 0 => 8
      tm2.display(1, 8); // Digito 1 => 8
      tm2.display(2, 8); // Digito 2 => 8
      tm2.display(3, 8); // Digito 3 => 8
      }

      Saludos
      JZ

      1. Funciona perfecto con 2 display, lo acabo de probar.
        Muy buena tu pagina, hace dos dias que me estaba complicando tratando de pasarle valores binarios a un parametro y mostrarlo. Tu ejemplo es claro y sencillo. Gracias!

  3. hola estimado
    muy interesante sus tutoriales he aprendido mucho gracias a su pagina pero tengo un problema el cual me gustaria que me ayudara.

    estoy midiendo temperatura con un sensor dht11 (gracias a su tutorial de dicho sensor) el cual quiero plasmar mis datos en dos display de un caracter de 7 segmentos.
    descarge su libreria respectiva pero no puedo realizar el control o plasmar los digitos en los display.
    me puede ayudar con algun control.
    desde ya muchas gracias

  4. Hola, queria comentarles que implemente el ejemplo y funciona perfectamente. Luego al utilizarlo en mi programa (hice un contador, con una entrada por optoacoplador y una salida con rele) me surgio el inconveniente que el arduino se cuelga y no cuenta mas, tengo que resetear para que vuelva a funcionar y en forma aleatorea se vuelve a colgar. Encontre que si al momento de colgarse desconecto y vuelvo a conectar el display vuelve a funcionar normalmente, hasta que se cuelga nuevamente.
    Sabes a que puede deberse esto?

    Saludos

    PD: estoy usando un arduino nano

    1. Hola Damian, nosotros hemos solucionado problemas parecidos al tuyo cambiando la fuente de poder por una estabilizada. Arduino es sensible a cambios en el voltaje de alimentacion.
      Saludos

  5. Che nieri bo’ savee’ q yo tengooo un problema con un programa tengo q hacer relog digital con Tim rea’ denle nierii ayuden o los mato

    1. Estimado Nahuel, aquí se habla y escribe en español, intentamos hacerlo de la mejor forma (aunque a veces no usamos acentos porque tenemos conputadores con teclados en inglés y es engorroso estar digitando los códigos para cada acento). Por lo mismo, pedimos un mínimo de respeto por nuestro lenguaje para recibir comentarios y no nos gustan las amenazas.
      Saludos
      JZ

  6. Hola a todos. El tutorial funciona perfectamente.
    Lo que necesito es controlar los dos puntos, como hago para prenderlos o apagarlos?

    Esta función tm2.point(POINT_OFF); prende o apaga los puntos de cada display, pero necesito es controlar los dos puntos

    Muchas gracias

    1. Estimado Carlos

      Si revisas el codigo fuente de la libreria en GitHub la funcion a la que haces referencia efectivamente deberia apagar y encender los dos puntos de reloj, mira el comentario que tiene esta funcion en el fuente.

      //Whether to light the clock point ":".
      //To take effect the next time it displays.
      void TM1637::point(boolean PointFlag)
      {
      _PointFlag = PointFlag;
      }

      Saludos
      JZ

  7. buenas amigo excelente tutorial queria preguntarte que comando deberia escribir para que el display muestre el signo de grados °

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *