Lezione 22/31: Utilizzo del Display a Sette Segmenti con Arduino e Dado Elettronico | SunFounder Robojax
In questa lezione esploriamo come controllare un display a sette segmenti con un Arduino. Invece di usare una dozzina o più pin I/O per pilotare direttamente ogni segmento LED, impieghiamo un trucco intelligente: un registro a scorrimento. Questo chip piccolo ed economico ci consente di controllare tutti e sette i segmenti (più il punto decimale) usando solo tre fili dall'Arduino. Questa è una tecnica fondamentale in elettronica che ti permette di espandere il numero di uscite disponibili sul tuo microcontrollore, rendendo possibile costruire progetti più complessi senza dover cambiare scheda.
Oltre al contatore di base, costruiremo un dado elettronico. Questo progetto non solo rafforza il controllo del display, ma introduce anche l'input utente tramite un pulsante e il concetto di interrupt, creando un dispositivo reattivo e interattivo. Questa guida si basa su una lezione del Corso Arduino Robojax, che utilizza il kit Arduino SunFounder 3-in-1.
Ecco alcune idee pratiche che puoi realizzare con questa conoscenza:
- Crea un semplice tabellone segnapunti per giochi come ping pong o basket.
- Costruisci un timer digitale per giochi da tavolo o un timer da cucina.
- Realizza un generatore di numeri casuali per giochi o decisioni.
- Costruisci un termometro digitale di base aggiungendo un sensore di temperatura.
Hardware e Componenti
Prima di iniziare, raccogliamo i componenti necessari. Il cuore di questo progetto è il registro a scorrimento 74HC595, che è la chiave per minimizzare il numero di pin necessari. Invece di collegare ciascuno dei sette segmenti direttamente all'Arduino, li colleghiamo al registro a scorrimento. L'Arduino invia quindi i dati per una cifra in modo seriale (un bit alla volta) al chip, che poi emette il pattern corretto per accendere i segmenti.
- Arduino Uno (o scheda compatibile)
- Display a sette segmenti (modello 5161AS, catodo comune)
- Registro a scorrimento IC 74HC595
- Pulsante
- Resistenze (220Ω - 330Ω)
- Cavi jumper
- Breadboard
Il display 5161AS è di tipo a catodo comune. Ciò significa che tutti i catodi (i lati negativi) dei LED interni sono collegati insieme a un pin di massa comune. Per accendere un segmento, fornisci una tensione positiva al suo specifico pin anodo. Il 74HC595 agisce come un ponte, prendendo i dati seriali dall'Arduino ed emettendo i segnali paralleli necessari per pilotare questi anodi.
Guida al Cablaggio
Cablaggio del registro a scorrimento e del display può sembrare complicato, ma seguire lo schema passo dopo passo è fondamentale. Il video (a 04:48) fornisce una spiegazione dettagliata di questo processo. Il chip 74HC595 ha una tacca a un'estremità per identificare il pin 1. I pin sono numerati in senso antiorario dalla tacca (1-8 su un lato, 9-16 sull'altro).
Ecco il riepilogo del cablaggio dal video:
- Alimentazione e Massa: Collega il pin 8 e il pin 13 del 74HC595 alla barra di massa. Collega il pin 10 e il pin 16 alla barra a 5V.
- Linee Dati: Collega i pin digitali dell'Arduino ai pin dati del registro a scorrimento: Pin 12 (STcp) al pin 12 del chip, Pin 8 (SHcp) al pin 11 del chip e Pin 11 (DS) al pin 14 del chip.
- Display al Registro a Scorrimento: Questa è la parte più complessa. Il video (a 07:18) dettaglia ogni connessione. Ad esempio, il segmento 'a' sul display si collega al pin 6 del chip, il segmento 'b' al pin 5 e così via. I pin del catodo comune del display sono collegati a massa tramite una resistenza.
Per una guida visiva e precisa, fai riferimento allo schema di cablaggio ufficiale:
Le connessioni esatte dei pin sono critiche ed è facile commettere errori. Prenditi il tuo tempo e ricontrolla ogni filo rispetto allo schema. Il video è un'ottima risorsa da seguire.
Spiegazione del Codice
In questa lezione vengono forniti due esempi di codice. Il primo è un semplice contatore e il secondo si basa su di esso per creare il dado elettronico. Entrambi condividono la stessa logica di base per il controllo del display.
Ecco il codice per il contatore di base:
const int STcp = 12;//Pin collegato a ST_CP del 74HC595
const int SHcp = 8;//Pin collegato a SH_CP del 74HC595
const int DS = 11; //Pin collegato a DS del 74HC595
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
All'inizio del codice, puoi configurare i tre pin collegati al registro a scorrimento. STcp, SHcp e DS sono assegnati rispettivamente ai pin Arduino 12, 8 e 11. datArray[] è una parte cruciale. È una tabella di ricerca contenente i valori esadecimali per le cifre da 0 a 9. Ogni valore rappresenta il pattern di segmenti da accendere per quella specifica cifra.
La funzione loop() esegue il contatore. Utilizza un ciclo for per contare da 0 a 9. All'interno del ciclo, il codice invia i dati per il numero corrente al registro a scorrimento. Il delay(1000) alla fine imposta la velocità del contatore in millisecondi. Modifica questo valore a 100 per un conteggio più veloce, o a 500 per uno più lento.
Il codice del dado elettronico introduce un nuovo elemento: l'input dell'utente tramite un pulsante. Le principali modifiche alla configurazione sono:
const int buttonPin = 2;
//...
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
Qui, buttonPin è impostato sul pin digitale 2. Questo pin è speciale perché può essere utilizzato come interrupt. Un interrupt consente all'Arduino di fermare immediatamente ciò che sta facendo quando il pulsante viene premuto, garantendo una risposta rapida e affidabile. La modalità FALLING attiva l'interrupt quando il pulsante viene premuto (il segnale passa da HIGH a LOW).
La funzione rollDice viene chiamata dall'interrupt. Alterna la variabile state tra 0 e 1. Quando state è 0, il dado è "in rotazione" e il loop() principale visualizzerà numeri casuali. Quando il pulsante viene premuto di nuovo, state cambia a 1, fermando il ciclo e visualizzando il risultato finale. La funzione showNumber() è la stessa della logica del contatore, ma accetta un numero come argomento da visualizzare.
Progetto Live e Dimostrazione
Una volta caricato il codice, il contatore inizierà a funzionare, visualizzando i numeri da 0 a 9 con un ritardo di un secondo (nel video a 15:04). Il video dimostra come modificare il ritardo per far funzionare il contatore molto più velocemente.
La dimostrazione del dado elettronico (nel video a 20:15) mostra il pulsante in azione. Quando lo premi una volta, il display inizia a ciclare rapidamente attraverso i numeri. Premendolo di nuovo, il ciclo si ferma, lasciando visualizzato un numero casuale tra 1 e 6, proprio come un dado reale.
Capitoli
- [00:00] Introduzione al Progetto del Display a Sette Segmenti
- [01:25] Comprendere il Display a Sette Segmenti
- [03:51] Scheda Tecnica e Specifiche del Display 5161AS
- [04:48] Collegamento del Display e del Registro a Scorrimento
- [12:24] Codice Arduino per il Contatore da 0 a 9
- [15:04] Dimostrazione del Contatore e Regolazione della Velocità
- [16:27] Costruzione del Progetto del Dado Elettronico
- [20:15] Dimostrazione del Dado Elettronico e Debouncing
/*
Lesson 23/31: Using Seven Segment Display
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc
*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void setup ()
{
//set pins to output
pinMode(STcp,OUTPUT);
pinMode(SHcp,OUTPUT);
pinMode(DS,OUTPUT);
}
void loop()
{
for(int num = 0; num <10; num++)
{
digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
delay(1000);
}
}
/*
Lesson 23/31: Electronic Dice
Get this code and watch video Download and resource page https://robojax.com/RJT605
YouTube video https://www.youtube.com/watch?v=3qoGAYh0lbc
*/
const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595
const int DS = 11; //Pin connected to DS of 74HC595
const int buttonPin = 2;
int datArray[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
int number = 0;
int state = 0;
void setup ()
{
//set pins to output
pinMode(STcp, OUTPUT);
pinMode(SHcp, OUTPUT);
pinMode(DS, OUTPUT);
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), rollDice, FALLING);
}
void loop()
{
if (state == 0) {
showNumber((int)random(1, 7));
delay(50);
}
}
void showNumber(int num) {
digitalWrite(STcp, LOW); //ground ST_CP and hold low for as long as you are transmitting
shiftOut(DS, SHcp, MSBFIRST, datArray[num]);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(STcp, HIGH); //pull the ST_CPST_CP to save the data
}
void rollDice() {
state = !state;
}
Common Course Links
Common Course Files
Cose di cui potresti avere bisogno
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Risorse e riferimenti
-
DocumentazioneDocumentazione per il kit di apprendimento SunFounder 3 in 1 IoT/Smart Car.docs.sunfounder.com
-
Esterno
File📁
Librerie Arduino (zip)
-
Codice sorgente del kit di apprendimento Smart Car 3-in-1 di SunFounder
3in1-kit-main-v2.zip12.80 MB