Usando mais dois displays LED de 4 dígitos TM1637 com Arduino
Você já precisou mostrar dois valores diferentes ao mesmo tempo em seu projeto Arduino? Talvez você esteja construindo uma estação meteorológica que precisa exibir tanto a temperatura quanto a umidade, ou um monitor de fonte de alimentação que mostra tensão e corrente simultaneamente. Usar dois displays LED de 4 dígitos TM1637 é uma solução simples e econômica. Este guia mostrará como conectar e programar dois desses displays populares usando uma única placa Arduino, dando a você a capacidade de exibir informações independentes em cada tela. Você pode usar essa técnica para uma variedade de projetos, como:
- Construindo um voltímetro de canal duplo para monitorar duas fontes de energia separadas.
- Criando um cronômetro de contagem regressiva e um contador de voltas para o seu próximo projeto de corrida.
- Exibindo a hora atual em um display e a temperatura ambiente no outro.
- Fazendo um placar para jogos de dois jogadores.
Neste tutorial, nós iremos conectar dois módulos TM1637 a um Arduino Uno e executar um esboço de demonstração que mostra valores diferentes em cada display. O TM1637 utiliza uma interface de dois fios (CLK e DIO), o que significa que adicionar um segundo display requer apenas dois pinos digitais adicionais em seu Arduino. Vamos começar! (no vídeo às 00:00)
Hardware Requerido
- Arduino Uno (ou qualquer placa compatível)
- 2x módulos de display LED de 7 segmentos de 4 dígitos TM1637
- Fios de jumper
- Placa de ensaio (opcional, mas útil para protótipos)
Manual de Fiação
Conectar os displays é simples. O módulo TM1637 tem quatro pinos: VCC, GND, DIO (dados) e CLK (clock). Ambos os displays compartilham as conexões de 5V e GND do Arduino, mas cada um precisa de pinos dedicados para DIO e CLK. Isso permite que o Arduino os controle de forma independente. (no vídeo às 01:26)
Aqui está o diagrama de fiação para o projeto:
Para o primeiro display (o módulo azul maior no vídeo), faça as seguintes conexões:
- VCCpara Arduino5V
- GNDpara ArduinoGND
- DIOpara pino digital Arduino11
- CLKpara o pino digital do Arduino10
Para o segundo display (o módulo menor), conecte-o da seguinte forma:
- VCCpara Arduino5V
- GNDpara ArduinoGND
- DIOpara pino digital do Arduino6
- CLKpara o pino digital do Arduino5
Lembre-se, o código e a biblioteca funcionam da mesma forma para os módulos TM1637 maiores e menores. (no vídeo às 01:00)
Explicação do Código
O código usa oTM1637Displaybiblioteca, que você precisará instalar. Você pode fazer isso acessandoEsboço > Incluir Biblioteca > Gerenciar Bibliotecasno Arduino IDE e procurando por "TM1637". O código define os pinos para cada display e cria dois objetos para controlá-los. Vamos olhar as partes principais que você precisará configurar para seu próprio uso. (no vídeo às 02:31)
Primeiro, as definições dos pinos para cada módulo de display. Você precisará alterar isso para corresponder à sua fiação:
// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6
// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11Próximo, oTEST_DELAYa variável controla por quanto tempo cada sequência de teste é exibida. Você pode ajustar isso para acelerar ou desacelerar a demonstração:
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 5000A parte principal do código utiliza oshowNumberDec()função. Esta função tem quatro argumentos: o número a ser exibido, se deve preencher os dígitos iniciais vazios com zeros, quantos dígitos usar e a posição inicial do número na exibição. Por exemplo,display1.showNumberDec(23, false, 2, 0)mostrará o número "23" começando na posição 0. Alterando o último argumento para 1, 2 ou 3, você pode mover o número pelo display. (no vídeo às 05:23)
Para adicionar um terceiro display, você simplesmente copiaria o bloco de código de um display, trocaria todos os "2" por "3" e atribuiria dois novos pinos para as conexões CLK e DIO do novo módulo. (no vídeo às 03:58)
Demonstração de Projeto Ao Vivo
Depois de carregar o código, você verá os dois displays ligarem e limparem suas telas. A demonstração então passa por uma série de testes para mostrar como cada display pode ser controlado independentemente. Primeiro, mostrará os números "23" e "34" nos dois displays. O código então cicla colocando esses números em diferentes posições no display de 4 dígitos (posição 0, 1, 2 e 3). Depois disso, exibe os números maiores "741" e "1562". Finalmente, executa um loop de contagem de 0 a 1273 em ambos os displays simultaneamente. Isso demonstra a plena funcionalidade de usar dois displays em um único projeto. (no vídeo em 05:01)
Capítulos
- [00:00] Introdução ao uso de dois displays TM1637
- Conectando os displays ao Arduino
- [02:31] Explicando o código
- [05:01] Demonstração dos displays em ação
/*
* 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
Coisas que você pode precisar
-
Amazonas
-
eBay
-
AliExpressTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
Recursos e referências
-
ExternoBiblioteca TM1637 (do GitHub)github.com
-
Interno
Arquivos📁
Bibliotecas do Arduino (zip)
-
Biblioteca Arduino TM1637
TM1637_library.zip1.36 MB
Arquivo Fritzing
-
Módulo de sete segmentos TM1637
TM1637.fzpz0.01 MB -
Display de sete segmentos de 4 dígitos TM1637
TM1637-1.fzpz0.01 MB
Manual do Usuário
-
Manual do Display TM1637
robojax-TM1637_display_manual.pdf0.31 MB