Come utilizzare un display LED a sette segmenti con Arduino
I display a LED a sette segmenti sono ovunque intorno a noi, dagli orologi digitali e elettrodomestici agli indicatori di piano degli ascensori e ai tabelloni. Sono uno dei modi più intuitivi per visualizzare informazioni numeriche e imparare a controllarli con un Arduino è un'abilità fondamentale per qualsiasi appassionato di elettronica. Questo tutorial ti guiderà nella costruzione di un driver semplice ma versatile per display a sette segmenti che può contare da 0 a 9 ed è progettato per funzionare sia con display a catodo comune che ad anodo comune. Puoi utilizzare questo progetto come base per costruire una varietà di dispositivi pratici, come un contatore digitale per il tuo laboratorio, un display della temperatura per una stazione meteorologica, un timer per un gioco da tavolo o un semplice registratore di punteggio per la tua prossima serata di gioco in famiglia.
Componenti Hardware
Per seguire questo progetto, avrai bisogno dei seguenti componenti. Il cablaggio è semplice e l'elenco dei componenti è ridotto al minimo, rendendo questo progetto perfetto per i principianti.
- Arduino Uno (o qualsiasi scheda compatibile)
- display a LED a 7 segmenti (catodo comune o anodo comune)
- 8 resistori da 1kΩ (560Ω a 1kΩ funzionano bene)
- Cavi jumper
- Breadboard
Come utilizzare un display LED a sette segmenti con Arduino
Guida al cablaggio
Il cablaggio per questo progetto collega ogni segmento del display a un pin digitale dell'Arduino, con una resistenza di limitazione della corrente in serie per ogni segmento. La differenza principale nel cablaggio dipende dal fatto che tu abbia un display a anodo comune o a catodo comune. In un display a anodo comune, tutti gli anodi (gambe positive) dei LED interni sono collegati insieme e dovrebbero essere collegati all'alimentazione a 5V. In un display a catodo comune, tutti i catodi (gambe negative) sono collegati insieme e dovrebbero essere collegati alla massa. Il codice gestisce automaticamente l'inversione della logica necessaria per il tuo specifico tipo di display, quindi devi solo assicurarti che il cablaggio fisico sia corretto.

Come dimostrato nel video, collega i pin segnale del display (da A a G e il punto decimale) ai pin di Arduino 2-9 in ordine. Ogni pin segnale dovrebbe avere una resistenza di 1kΩ in serie. Il pin comune (anodo o catodo, a seconda del tuo display) dovrebbe essere collegato a 5V o GND rispettivamente. È importante utilizzare resistenze individuali per ogni segmento piuttosto che una singola resistenza condivisa. Questo garantisce una luminosità uniforme tra tutti i segmenti, indipendentemente da quanti siano accesi simultaneamente. Con una singola resistenza, la corrente sarebbe divisa in modo non uniforme, causando l'apparenza di alcuni numeri più deboli di altri.
Spiegazione del codice
Il codice per questo progetto è scritto da zero e non richiede alcuna libreria esterna. È progettato per essere semplice da configurare e adattare al tuo specifico display. Le principali parti configurabili dell'utente si trovano nella parte superiore del file.
#define type 1 // 0 for common cathode and 1 for common anode
const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal pointLa prima linea è l'impostazione più critica. Devi impostare iltypevariabile per1se stai usando un display a catodo comune e0se stai utilizzando un display a catodo comune. Questo singolo valore informa il codice se invertire i segnali logici, assicurando che i segmenti corretti si accendano.
Le due righe successive definiscono i pin dell'Arduino collegati al display.displayPinsl'array contiene i numeri dei pin per i segmenti da A a G, edicimalPointdefinisce il pin per il punto decimale. Se desideri utilizzare pin diversi, puoi modificare questi valori, ma si consiglia di mantenerli in ordine sequenziale per semplicità.
Il codice include una funzione personalizzata,writeDigit(int digit), che è il modo principale per visualizzare un numero. Puoi chiamare questa funzione dal tuo codice per mostrare qualsiasi cifra da 0 a 9. Ad esempio, per visualizzare il numero 5, dovresti semplicemente chiamarewriteDigit(5);. La funzione gestisce l'attività complessa di cercare il modello di segmento corretto e impostare i pin di conseguenza. Un'altra funzione di supporto,convertHighLow(int v)gestisce la conversione logica tra display a catodo comune e anodo comune, quindi non devi preoccuparti della logica interna.
Dimostrazione del Progetto dal Vivo
Una volta completato il cablaggio e caricato il codice, l'Arduino inizierà a contare da 0 a 9, visualizzando ogni cifra per un secondo sul display a sette segmenti. Dopo aver raggiunto il 9, il punto decimale si accenderà per tre secondi prima che il conteggio ricominci. Come mostrato nel video, l'uso di resistori individuali garantisce che la luminosità delle cifre rimanga costante, sia visualizzando un singolo segmento (come il numero 1) sia tutti e sette i segmenti (come il numero 8). Questo è un miglioramento significativo rispetto all'uso di un singolo resistore, che causerebbe variazioni di luminosità evidenti.
Capitoli
- Introduzione al Display a Sette Segmenti
- [00:22] Comprendere i display a sette segmenti
- [01:09] Cablaggio Anodo Comune vs. Catodo Comune
- [03:25] Cablaggio passo dopo passo con resistori
- [06:07] Considerazioni sulla dimostrazione e sulla luminosità
- [08:26] Spiegazione del codice e configurazione
- [14:25] Funzioni di Setup e Ciclo Principale
- [16:33] Conclusione e Applicazioni
/*
* Robojax Arduino Step-by-Step Course
* Lesson 21: Seven-Segment Display
* Display number on seven-segment display with Arduino
Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
or watch this https://youtu.be/f3GqRMQ8jYs
* Written by Ahmad Shamshiri for Robojax (Robojax.com)
* on December 07, 2018 at 22:34 in Ajax, Ontario, Canada
*
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#define type 1 // 0 for common cathode and 1 for common anode
const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point
// array for seven-segment LED values. Do not change.
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = {
{ 0,0,0,0,0,0,1 }, // = 0
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,0 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,0,1,0,0 } // = 9
};
/*
*
* @brief Writes digit to display
* @param digit (integer)
* @return no return value
* Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
*/
void writeDigit(int digit) {
// Robojax Seven-Segment Display for Arduino
Serial.print(digit);
Serial.print(" ");
int digitValue;
for (int i=0; i < 7; i++)
{
digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor
}// for i
}//writeDigit ends here
/*
*
* @brief Converts HIGH and LOW based on the "type" variable value
* if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
* @param v (integer)
* @return the convertedValue
* Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
*/
int convertHighLow(int v)
{
int convertedValue;
if(type ==0)
{
convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
}else{
convertedValue = v;// if common cathode, keep it the same
}
return convertedValue;
}
void setup() {
// Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338
for(int d=0; d<8; d++)
{
pinMode(displayPins[d], OUTPUT);// set pin as output
}
pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode
Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here
void loop() {
// Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338
for (int i=0; i<=9 ; i++) {
writeDigit(i);
Serial.println("=====");
delay(1000);
}
digitalWrite(dicimalPoint,LOW);// turn decimal point ON
delay(3000);
// writeDigit(4);
// delay(3000);
}// loop ends here
Cose di cui potresti avere bisogno
-
Amazon
-
Amazon
-
AliExpressPurchase seven segment display from AlixExpresss.click.aliexpress.com
Risorse e riferimenti
-
Interno
File📁
Altri file
-
Come utilizzare un display a sette segmenti LED con Arduino
robojax-ISD1890-SoundRecorder_manual.pdf0.29 MB