Utilizzare due ulteriori display a LED 4 digit TM1637 con Arduino
Hai mai avuto bisogno di mostrare due valori diversi contemporaneamente nel tuo progetto Arduino? Forse stai costruendo una stazione meteorologica che deve visualizzare sia la temperatura che l'umidità, o un monitor di alimentazione che mostra tensione e corrente simultaneamente. Utilizzare due display LED a 4 cifre TM1637 è una soluzione semplice ed economica. Questa guida ti mostrerà come collegare e programmare due di questi popolari display utilizzando una singola scheda Arduino, dandoti la possibilità di visualizzare informazioni indipendenti su ciascun schermo. Puoi utilizzare questa tecnica per una varietà di progetti, come:
- Costruire un voltmetro a doppio canale per monitorare due linee di alimentazione separate.
- Creare un timer di conto alla rovescia e un contapassi per il tuo prossimo progetto automobilistico.
- Visualizzazione dell'ora corrente su un display e della temperatura ambientale sull'altro.
- Creare un tabellone dei punteggi per giochi a due giocatori.
In questo tutorial, collegheremo due moduli TM1637 a un Arduino Uno e eseguirà uno sketch dimostrativo che mostra valori diversi su ciascun display. Il TM1637 utilizza un'interfaccia a due fili (CLK e DIO), il che significa che aggiungere un secondo display richiede solo due pin digitali aggiuntivi sul tuo Arduino. Iniziamo! (nel video a :00)
Hardware richiesto
- Arduino Uno (o qualsiasi scheda compatibile)
- 2x moduli di display LED a 7 segmenti TM1637 a 4 cifre
- Cavi di collegamento
- Breadboard (opzionale, ma utile per il prototipaggio)
Guida al cablaggio
Collegare i display è semplice. Il modulo TM1637 ha quattro pin: VCC, GND, DIO (dati) e CLK (orologio). Entrambi i display condividono le connessioni 5V e GND dall'Arduino, ma ciascuno ha bisogno dei propri pin dedicati per DIO e CLK. Questo consente all'Arduino di controllarli in modo indipendente. (nel video al 01:26)
Ecco lo schema elettrico per il progetto:
Per il primo display (il modulo blu più grande nel video), effettuare le seguenti connessioni:
- VCCa Arduino5V
- GNDa ArduinoGND
- DIOal pin digitale Arduino11
- CLKal pin digitale Arduino10
Per il secondo display (il modulo più piccolo), collegalo come segue:
- VCCa Arduino5V
- GNDa ArduinoGND
- DIOal pin digitale di Arduino6
- CLKal pin digitale Arduino5
Ricorda, il codice e la libreria funzionano allo stesso modo sia per i moduli TM1637 più grandi che per quelli più piccoli. (nel video a 01:00)
Spiegazione del codice
Il codice utilizza ilTM1637Displaylibreria, che dovrai installare. Puoi farlo andando suSchizzo > Includi Libreria > Gestisci Librerienell'IDE di Arduino e cercando "TM1637". Il codice definisce i pin per ciascun display e crea due oggetti per controllarli. Vediamo le parti chiave che dovrai configurare per il tuo utilizzo. (nel video alle 02:31)
Innanzitutto, le definizioni dei pin per ciascun modulo di visualizzazione. Dovrai modificarle per adattarle al tuo cablaggio:
// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6
// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11Successivamente, ilTEST_DELAYla variabile controlla per quanto tempo viene visualizzata ciascuna sequenza di test. Puoi regolarla per accelerare o rallentare la dimostrazione:
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 5000La parte principale del codice utilizza ilshowNumberDec()funzione. Questa funzione ha quattro argomenti: il numero da visualizzare, se riempire le cifre iniziali vuote con zeri, quante cifre utilizzare e la posizione iniziale del numero sul display. Ad esempio,display1.showNumberDec(23, false, 2, 0)visualizzerà il numero "23" a partire dalla posizione 0. Cambiando l'ultimo argomento in 1, 2 o 3, è possibile spostare il numero sul display. (nel video alle 05:23)
Per aggiungere un terzo display, dovresti semplicemente copiare il blocco di codice per un display, cambiare tutti i "2" in "3" e assegnare due nuovi pin per le connessioni CLK e DIO del nuovo modulo. (nel video a 03:58)
Dimostrazione di progetto dal vivo
Una volta caricato il codice, vedrai i due display accendersi e pulire i loro schermi. La dimostrazione quindi eseguirà una serie di test per mostrare come ciascun display possa essere controllato indipendentemente. Prima, mostrerà i numeri "23" e "34" sui due display. Il codice poi cicla posizionando questi numeri in diverse posizioni sul display a 4 cifre (posizione 0, 1, 2 e 3). Dopo di che, visualizza i numeri più grandi "741" e "1562". Infine, esegue un ciclo di conteggio da 0 a 1273 su entrambi i display simultaneamente. Questo dimostra la piena funzionalità dell'uso di due display in un unico progetto. (nel video a 05:01)
Capitoli
- [00:00] Introduzione all'uso di due display TM1637
- [01:26] Collegare i display all'Arduino
- [02:31] Spiegare il codice
- Dimostrazione dei display in azione
/*
* 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
Cose di cui potresti avere bisogno
-
Amazon
-
eBay
-
AliExpressTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
Risorse e riferimenti
-
EsternoLibreria TM1637 (da GitHub)github.com
File📁
Librerie Arduino (zip)
-
Libreria TM1637 per Arduino
TM1637_library.zip1.36 MB
File Fritzing
-
Modulo a sette segmenti TM1637
TM1637.fzpz0.01 MB -
Display a sette segmenti a 4 cifre TM1637
TM1637-1.fzpz0.01 MB
Manuale dell'utente
-
Manuale del Display TM1637
robojax-TM1637_display_manual.pdf0.31 MB