Home Elettronica Informatica Chi sono

Display 3 cifre

Il progetto è nato da una necessità pratica, ovvero un evento, dove i fruitori ordinavano il cibo e questo, una volta pronto, veniva annunciato attraverso un numero assegnatogli. Essendo presenti band che suonavano ininterrottamente durante la serata, non era plausibile una soluzione acustica, per cui abbiamo optato per un display luminoso da porre in posizione ben visibile.

Il tutto è stato realizzato in collaborazione con un amico, Gabriele, che ha contribuito in modo importante per la parte di realizzazione fisica.

Abbiamo puntato a una soluzione "home-made" perché volevamo porci una sfida personale e realizzare qualcosa di nostro che risultasse al contempo utile. Siamo entrambe due persone determinate a cui piace fare esperienza sul campo, e questa era un'occasione notevole. Soprattutto una bella storia da raccontare.

Descrizione:

Il progetto riguarda un display a 3 cifre 7 segmenti, ricavato da una lastra di alluminio 250x500mm.

L'alimentazione è fornita dai 5v di una presa USB, e la comunicazione avviene attraverso bluetooth, con un classico modulo HC-05. Durante la serata è stato alimentato da un power-bank, poiché posto sotto un tetto in posizione infelice, senza problemi di consumo eccessivo e scarica della batteria, nonostante le ancora poche ottimizzazioni.

Il tempo di realizzazione è stato un fattore importante, poiché il lavoro è stato distribuito in una manciata di fine settimana, trovandoci in due città diverse, con impegni di studio e lavoro. Se uno dei due aveva in casa la lastra, l'altro era per forza di cose fermo coi lavori. In particolar modo è stata adottata una soluzione con Arduino Nano poiché già disponibile nel cassetto ed economico, oltre che facilmente programmabile e testabile.

Realizzazione fisica:

Schizzo di una singola cifra

La parte fisica è partita da uno schizzo su carta, poi elaborato in programmi di disegno, della disposizione dei singoli led. Dopo varie proposte sono stati scelti led rossi a 5mm, 151 per cifra, disposti come si vede dalle immagini.

Questo disegno sarebbe stato posizionato sopra una lastra di alluminio da forare. Per ogni led è stata segnata la posizione con un punteruolo, fatto un primo foro, un secondo da 5mm, svasato fronte e retro.

Di seguito sono stati inseriti tutti i led e fissati con colla, curando il verso di inserimento per permettere una connessione di serie / parallelo.

La necessità è evidente: visto l'elevato numero di led per segmento, la scelta di metterli tutti in serie avrebbe comportato la necessità di una tensione troppo alta (1,8V * 25 = 45V), con la conseguenza di non trovare un integrato adatto alla gestione della luminosità o anche della sola accensione, oltre a uno step-up in grado di supportare la tensione richiesta. La scelta di porre tutti i led in parallelo, avrebbe portato a una necessità di corrente troppo elevata per essere gestita da un alimentatore a basso costo e di facile reperibilità (ricordo il fattore tempo e soldi). Considerando un assorbimento di 20mA a led, ogni cifra assorbirebbe circa 3A.

Come è possibile vedere dall'immagine sopra riportata (lo schizzo su carta), per ogni segmento sono state effettuate delle serie da circa 7 led, laddove non si riusciva a raggiungere il numero, abbiamo aggiunto un led nel retro per pareggiare ed ottenere la stessa corrente da tutte le serie. Questo ha evitato di perderci in calcoli di resistenze che compensassero la mancata caduta di tensione, in fondo ci avanzavano led e dietro non danno fastidio a nessuno!

Considerando 2v / led, per una serie da 7, l'alimentazione è stata fissata a 14v, con un buon margine. I 14v sono stati ottenuti con moduli classici step-up reperibili un po' ovunque, che alzano i 5v dell'usb. Il margine è giustificato dal fatto che i led sono pilotati in corrente.

Tabellone forato

Gestione led:

Per la gestione dei led, dopo innumerevoli ricerche e confronti, mi sono lanciato sul TLC5943, il cui datasheet è tranquillamente reperibile in rete. Riassumendo le caratteristiche principali:
- dispone di 16 uscite, ognuna delle quali è pilotata da un PWM a 16 bit;
- permette di regolare globalmente la corrente massima di ogni pin attraverso una resistenza esterna;
- fornisce fino a 50mA per uscita;
- attraverso 7 bit è in grado di regolare la corrente per ogni uscita lato software, in rapporto alla massima impostata attraverso la resistenza;
- a differenza di altri integrati della stessa serie (come il TLC5940 ben documentato per arduino), dispone di auto-repeat;
- più moduli possono essere connessi in cascata attraverso un'uscita dati da porre nell'ingresso del successivo.

Auto-repeat:

Mi accingo a spiegare meglio questa funzione in quanto non immediata da comprendere e, appunto, particolare di questo integrato.

Il valore di PWM non è gestito da un timer, per il TLC, ma da un clock esterno. L'integrato conta fino a 2^16 (65536) attraverso il clock fornito, e abilita l'uscita secondo uno schema pre-impostato visibile nel datasheet (pagina 18). Una volta giunto alla fine del conteggio, il ciclo è finito e viene arrestato. La funzione di auto-reset (controllata da un bit impostabile) forza l'integrato a ricominciare il conto dal clock immediatamente successivo a quello della fine. Questo può sembrare scontato, ma in realtà altri integrati (prendo come esempio sempre il TLC5940) necessitano di un toggle del segnale di blank (abilitazione) per il reset del contatore. E' quindi possibile programmare il dispositivo e lasciarlo attivo per un tempo non precisato senza bisogno di altri segnali oltre al clock. E' inoltre possibile svincolare il clock del PWM dal microcontrollore, non dovendo quest'ultimo conoscere la fine del conteggio. Il driver caricherà i nuovi valori inseriti a un toggle del blank o a fine conteggio.

Una volta scelto il controller per i led, è stata disegnata e stampata una pcb, essendo disponibile l'integrato in formati non saldabili in un millefori. Volendo mantenere il costo del progetto basso, mi sono affidato a https://jlcpcb.com che in una settimana dal caricamento del gerber mi ha fornito 10 stampati di ottima qualità a prezzi incredibilmente bassi (2€ escluso di costi di spedizione). Visti ancora i dubbi sullo sviluppo, Arduino è stato saldato su millefori, dati anche gli esigui collegamenti necessari.

Board front Board back

Nella pcb, a doppia faccia, si notano ai lati le uscite per i led della cifra, in alto i collegamenti con la scheda precedente e quella successiva (i dati vengono trasmessi in cascata da un integrato all'altro, attraverso un pin SOUT), e un oscillatore (unico per tutte e tre le cifre) che fornisce il clock per il PWM (con relativo regolatore poiché funzionante a 3,3v). Per il controllo della corrente è stata prevista l'implementazione sia di una resistenza che un potenziometro. Il LED1 ha il solo scopo di indicare l'alimentazione della scheda. Il clock viene passato attraverso il pin GSCLK. Sono stati inseriti ulteriori condensatori per stabilizzare la tensione in arrivo dalla scheda principale di arduino.

Con l'aiuto di un amico ho poi saldato il necessario per procedere ai primi test del software, per ottimizzare i tempi (il tabellone era ancora in lavorazione e non aveva i led posizionati e saldati). E' risultata compatibile la porta SPI hardware nativa di Arduino, configurata debitamente prima di ogni trasferimento.

Schema driver ledPCB per il driver ledDisegno eagle della scheda per driver

Ho sfruttato la quantità degli stampati che avevo a disposizione per relegare a ogni integrato la gestione di una cifra, sebbene abbia sovradimensionato il tutto. Ogni segmento è quindi pilotato per metà da un pin, e per metà da un secondo pin, dividendo la potenza e lasciando due uscite del TLC non occupate. Questo mi ha consentito anche un'agevole scrittura del codice, potendo programmare ogni integrato con i dati relativi a una cifra e potendo multiplexare le tre cifre per ridurre il consumo, spegnendo selettivamente i driver. Attraverso una routine di interrupt, viene infatti accesa solo una cifra alla volta, consentendo nella pratica di ottenere un consumo di 1/3 rispetto alle tre cifre accese in contemporanea. Ogni cifra è controllata dal pin dell'integrato di BLANK, che fa capo a un pin di arduino, in grado di porre alte tutte le uscite. Al suo interno, il TLC dispone di una funzione per cui le accensioni dei vari pin sono ritardare di una certa unità di tempo, per evitare uno spunto iniziale eccessivo.

Il consumo per pin è stato fissato a 20mA attraverso una resistenza fissa. I collegamenti sono stati effettuati con una piattina, senza il minimo problema per il segnale di clock (che comunque lavora a 12MHz) o altre interferenze. I tre pin sulla sinistra sono un riporto dell'alimentazione (GND, 5v 3.3v), in particolare il GND è stato utilizzato per potenziare il ritorno dell'alimentazione dei led, che altrimenti sarebbe transitata in un unico filo della piattina.

Allego il codice di Arduino, debitamente commentato, e i file relativi allo schema eagle.

Le funzioni implementate nel momento della pubblicazione includono: scrittura di stringhe (massimo 3 caratteri), con completamento di cifre spente nel caso non siano forniti valori (nel caso scrivo "45" verrà scritto X45 dove X è la cifra spenta); invio di comandi attraverso il carattere '^' (per il controllo della luminosità generale è possibile inviare ^L[0-127] dove il numero indica la luminosità relativa al massimo); possibilità di spegnere selettivamente una cifra attraverso il carattere '/'.

Non sono state sviluppate app ad-hoc ma utilizzate alcune disponibili gratis nel Play Store, cito "Arduino bluetooth" e "Bluetooth Terminal" utilizzate in modalità command line, essendo assolutamente non vincolanti e rimpiazzabili.

Upgrade futuri:

Finita la sessione di esami ho in mente alcuni miglioramenti del progetto. Tra i principali nomino l'introduzione di una sezione di alimentazione migliorata, che possa accettare un ingresso esterno o un ingresso a batteria. In particolare l'idea era di integrare nel retro le batterie per il funzionamento in modo da renderlo completamente autosufficiente. Questo comporta l'introduzione di una modalità di stand-by a risparmio energetico e una possibile disattivazione dei led dopo x secondi impostabile tramite bluetooth. E' possibile anche implementare una funzione a cronometro, introducendo però un comando più immediato del bluetooth per l'avvio del countdown.

Questa soluzione è ben funzionante e ottima per lo scopo di realizzazione. Mi ha consentito di sperimentare nuovi tipi di integrati e di migliorare le mie abilità pratiche, grazie ai diversi problemi presentatisi (integrato rovinato probabilmente dalla stagnatura, oscillatore che inizialmente non faceva bene contatto, realizzazione della scheda etc.). Allego alcune immagini della fase di costruzione...

Tabellone in funzione
Retro del tabellone con driver difettoso
Test delle cifre Fase di lavorazione

Posizionamento dei led Schede saldate