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 11Siguiente, 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 5000La 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
/*
* 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
-
Amazonas
-
eBay
-
AliExpressTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
Recursos y referencias
-
ExternoBiblioteca TM1637 (de GitHub)github.com
Archivos📁
Bibliotecas de Arduino (zip)
-
Biblioteca TM1637 para Arduino
TM1637_library.zip1.36 MB
Archivo de Fritzing
-
Módulo de siete segmentos TM1637
TM1637.fzpz0.01 MB -
Pantalla de siete segmentos de 4 dígitos TM1637
TM1637-1.fzpz0.01 MB
Manual del Usuario
-
Manual de Display TM1637
robojax-TM1637_display_manual.pdf0.31 MB