Código de búsqueda

Uso de dos pantallas LED de 4 dígitos TM1637 adicionales con Arduino

Uso de dos pantallas LED de 4 dígitos TM1637 adicionales con Arduino

¿Alguna vez has necesitado mostrar dos valores diferentes al mismo tiempo en tu proyecto de Arduino? Quizás estás construyendo una estación meteorológica que necesita mostrar tanto la temperatura como la humedad, o un monitor de suministro de energía que muestra voltaje y corriente simultáneamente. Usar dos pantallas LED de 4 dígitos TM1637 es una solución sencilla y rentable. Esta guía te mostrará cómo conectar y programar dos de estas pantallas populares utilizando una sola placa de Arduino, dándote la capacidad de mostrar información independiente en cada pantalla. Puedes utilizar esta técnica para una variedad de proyectos, como:

  • Construyendo un voltímetro de doble canal para monitorear dos rieles de alimentación separados.
  • Crear un temporizador de cuenta regresiva y un contador de vueltas para tu próximo proyecto de carreras.
  • Mostrando la hora actual en una pantalla y la temperatura ambiente en la otra.
  • Crear un marcador para juegos de dos jugadores.

En este tutorial, conectaremos dos módulos TM1637 a un Arduino Uno y ejecutaremos un boceto de demostración que muestra diferentes valores en cada pantalla. El TM1637 utiliza una interfaz de dos hilos (CLK y DIO), lo que significa que agregar una segunda pantalla solo requiere dos pines digitales adicionales en tu Arduino. ¡Comencemos! (en el video a las 00:00)

Hardware Requerido

  • Arduino Uno (o cualquier placa compatible)
  • 2x módulos de visualización LED de 4 dígitos 7 segmentos TM1637
  • Cables saltarines
  • Protoboard (opcional, pero útil para prototipos)

Guía de cableado

Conectar las pantallas es simple. El módulo TM1637 tiene cuatro pines: VCC, GND, DIO (datos) y CLK (reloj). Ambas pantallas comparten las conexiones de 5V y GND del Arduino, pero cada una necesita sus propios pines dedicados para DIO y CLK. Esto permite que el Arduino las controle de forma independiente. (en el video a las 01:26)

Aquí está el diagrama de cableado para el proyecto:

Para la primera pantalla (el módulo azul más grande en el video), haz las siguientes conexiones:

  • VCCa Arduino5V
  • GNDa ArduinoGND
  • DIOal pin digital de Arduino11
  • CLKa pin digital de Arduino10

Para la segunda pantalla (el módulo más pequeño), conéctalo de la siguiente manera:

  • VCCa Arduino5V
  • GNDa ArduinoGND
  • DIOal pin digital de Arduino6
  • CLKal pin digital de Arduino5

Recuerda que el código y la biblioteca funcionan igual para los módulos TM1637 más grandes y más pequeños. (en el video a las 01:00)

Explicación del código

El código utiliza elTM1637Displaybiblioteca, que necesitarás instalar. Puedes hacerlo yendo aBoceto > Incluir Biblioteca > Administrar Bibliotecasen el IDE de Arduino y buscando "TM1637". El código define los pines para cada pantalla y crea dos objetos para controlarlas. Vamos a ver las partes clave que necesitarás configurar para tu propio uso. (en el video a las 02:31)

Primero, las definiciones de pines para cada módulo de visualización. Necesitarás cambiarlas para que coincidan con tu cableado:

// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6

// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11

Siguiente, elTEST_DELAYla variable controla cuánto tiempo se muestra cada secuencia de prueba. Puedes ajustarla para acelerar o desacelerar la demostración:

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   5000

La parte principal del código usa elshowNumberDec()función. Esta función tiene cuatro argumentos: el número a mostrar, si se deben rellenar los dígitos vacíos iniciales con ceros, cuántos dígitos usar y la posición inicial del número en la pantalla. Por ejemplo,display1.showNumberDec(23, false, 2, 0)mostrará el número "23" comenzando en la posición 0. Al cambiar el último argumento a 1, 2 o 3, puedes desplazar el número a través de la pantalla. (en el video a las 05:23)

Para agregar una tercera pantalla, simplemente copiarías el bloque de código de una pantalla, cambiarías todos los "2" por "3" y asignarías dos nuevos pines para las conexiones CLK y DIO del nuevo módulo. (en el video a las 03:58)

Demostración de Proyecto en Vivo

Una vez que hayas subido el código, verás que las dos pantallas se encienden y limpian sus pantallas. La demostración luego pasa a través de una serie de pruebas para mostrar cómo se puede controlar cada pantalla de manera independiente. Primero, mostrará los números "23" y "34" en las dos pantallas. Luego, el código recorre las diferentes posiciones de estos números en la pantalla de 4 dígitos (posición 0, 1, 2 y 3). Después de eso, muestra los números más grandes "741" y "1562". Finalmente, ejecuta un bucle de conteo ascendente de 0 a 1273 en ambas pantallas simultáneamente. Esto demuestra la funcionalidad completa de usar dos pantallas en un solo proyecto. (en el video a las 05:01)

Capítulos

  • Introducción al uso de dos pantallas TM1637
  • [01:26] Conectar las pantallas al Arduino
  • [02:31] Explicando el código
  • [05:01] Demostración de las pantallas en acción

Imágenes

Usando dos pantallas LED de 4 dígitos TM1637 más
Usando dos pantallas LED de 4 dígitos TM1637 más
168-Using two more TM1637 4-digit LED displays
Idioma: C++
/*
 * Original code from https://github.com/avishorp/TM1637
 * Modified for Robojax video on October 28, 2018 at 15:05
 * This is an Arduino sketch to use two or more TM1637 seven-segment LED displays
 * 
 * Watch video instruction for this code:https://youtu.be/27KjMfPH1dk
 * 
 * by Ahmad Shamshiri, in Ajax, Ontario, Canada
 * 
 *  display2.showNumberDec(23, true, 2,1);
 *  showNumberDec(arg1, arg2, arg3, arg4);
 *  arg1 is the number to be displayed
 *  arg2 can be 'true' or 'false' and if true it fills empty spots with data[]
 *  arg4 position of starting number on the display can be either 0, 1, 2 or 3
 */
#include <Arduino.h>
#include <TM1637Display.h>

// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6

// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   5000


TM1637Display display1(CLK1, DIO1);// define display 1 object
TM1637Display display2(CLK2, DIO2);// define display 1 object

   uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };  // all segments clear    
   
void setup()
{
  // Robojax.com two or more TM1637 Display 20181029  
  display1.setBrightness(0x0f);// set brightness of display 1
  display2.setBrightness(0x0f);// set brightness of display 1  

 
  display1.setSegments(data);// fill display 1 with whatever data[] array has
  display2.setSegments(data);// // fill display 2 with whatever data[] array has  
// Robojax.com two or more TM1637 Display 20181029  
}

void loop()
{
 // Robojax.com two or more TM1637 Display 20181029
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,0);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,0);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
  
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,1);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,1);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,2);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,2);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,3);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,3);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds    
/////////////////////////////////////////////////
  display1.setSegments(data);// fill(clear) display with data[] array
  display1.showNumberDec(741);// display 1

  display2.setSegments(data);// fill(clear) display with data[] array  
  display2.showNumberDec(1562);// display 2
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds

// Robojax.com two or more TM1637 Display 20181029 
/////////////////////////////////////////////////
   display1.setSegments(data);// fill(clear) display 1 with data[] array
   display2.setSegments(data);// fill(clear) display 2 with data[] array   
  for(int i=0; i<=1273; i++)
  {
    display1.showNumberDec(i);// display from 0 to 1273 to display 1
    display2.showNumberDec(i);// display from 0 to 1273 to display 2    
  }
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds


// Robojax.com two or more TM1637 Display 20181029
  
}// loop end

Cosas que podrías necesitar

Recursos y referencias

Archivos📁

Bibliotecas de Arduino (zip)

Archivo de Fritzing

Manual del Usuario