Pilotare segnapunti con LED 7 segmenti

Salve a tutti, sono nuovo del forum e sono un appassionato di elettronica.
Sono qui a chiedere una mano per un problema con un pannello a LED e ringrazio in anticipo tutti coloro che vorranno aiutarmi in questo progetto che, magari, può tornare utile anche a scopo didattico.
Avrei la necessità di assemblare un pannello segnapunti per un campo da baseball (premetto che il mio è un hobby e ciò che faccio è assolutamente non lucrativo).
Il pannello verrà assemblato inserendo LED da 10mm in serie, fino a formare le classiche matrici dei display a 7 segmenti, in totale saranno 20 cifre disposte su 2 file, una per home ed una per guests.
Allego una foto di ciò che più o meno vorrei realizzare, con la differenza che ogni numero dovrà essere comporto da 2 cifre per arrivare ad un massimo di 19 per cifra, ovvero, 2 cifre per inning più il punteggio totale, sia per home che per guests.
Non mi interessa realizzare anche la parte superiore (quella che indica strike, ball ecc...)
Ciò che mi interessa è poter segnare, ad ogni inning, il punteggio, incrementandolo semplicemente agendo su un pulsante.
All'inizio avevo pensato ad un semplice multiplexer collegato ad ogni gruppo di 2 cifre, ma ciò rende praticamente ingestibile il pannello tramite un comando remoto cablato, in quanto i cavi sarebbero talmente tanti che alla fine mi ritroverei con un cavo spesso 5 centimetri o più.
In seguito ho pensato di adottare interfacce tipo i2c, che codificano utilizzando soli 2 fili oltre all'alimentazione ed il GND, ma, sinceramente, a livello di sketch non saprei proprio da dove iniziare, tantomeno come effettuare i dovuti collegamenti.
Inoltre, dato che i LED utilizzati saranno di tipo ad alta luminosità, credo che occorrerà una serie di transistor per di potenza, considerato che ogni segmento è composto da 6 led da 10mm che assorbono circa 20mA.
Ringrazio nuovamente chiunque avesse la possibilità di darmi una mano in questo progetto.
Ciao a tutti!

baseballBB15RSPT.jpg

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Salve,
A quanto ho capito lei vorrebbe avere n (con n molto elevato) led più potenti del normale tali da formare 20 display 7s che possano mostrare valori alterabili con la sola pressione di un pulsante. Tutto questo usando meno fili in giro possibili. Corretto?
Se é così le do un promo consiglio: divida il programma in due metà. Nella prima crea e gestisce il o i numeri da visualizzare, lavorando sugli input (tasti o sensori o etere o impulsi cerebrali o...) e li scrive su Seriale al banco di prova.
Quando avrà questo lato funzionante come le occorre (con o senza aiuti) potrà dedicarsi alla parte: gestire la rappresentazione grafica dei numeri.
Per ora mi fermo qui chiedendole, che non ho capito lo ammetto, in quale delle parti si trova il suo problema/la sua domanda

Errata corrige:
in totale le cifre dovranno essere 9 + il totale per ogni riga, ovvero, esattamente come il pannello di cui ho allegato la foto.
I led saranno poco meno di un migliaio (6 led per 7 segmenti x 22 cifre = 924 led).
Il mio primo problema e come gestire elettronicamente tutti questi display senza l'ausilio di 8 fili per ogni cifra, utilizzando Arduino mi basterebbe poter scegliere, tramite un pulsante, la cifra da modificare, magari rendendola temporaneamente lampeggiante, e poi agire tramite un pulsante di incremento.
Avere anche un pulsante di decremento diventa superfluo, in quanto, in caso di errore, basta girare far scorrere la cifra fino al valore desiderato (da 0 a 9).
Fatto questo si può inserire un pulsante di conferma, oppure temporizzare in modo che dopo alcuni secondi la cifra smetta di lampeggiare.
Esempio pratico:

  • premo il pulsante SELECT tante volte fino a far lampeggiare la cifra desiderata
  • premo il pulsante di incremento fino ad ottenere il valore desiderato
  • attendo che il display smetta di lampeggiare, oppure premo un pulsante di conferma.

Dopo aver aggiornato il punteggio per inning, allo stesso modo, vado ad aggiornare anche le ultime 2 cifre per il totale.

Tenendo da parte per un attimo il pannello led grande, lo stesso pannello andrebbe riportato su un piccolo display sulla console, in quanto è molto difficile, per chi segna i punti, tenere d'occhio il tabellone.

La nostra squadra di baseball non ha alcuna sovvenzione da parte di istituzioni e si cerca di andare avanti con mezzi propri e con qualche sponsor, per cui, l'acquisto di un tabellone dal costo di alcune migliaia di euro, è assolutamente da escludere.

Grazie ancora a tutti

Ok, chiaro.
Io comincerei a scrivere il programma di modifica numeri su un Arduino master, e verificare che funzioni via seriale. Per velocizzare un po la cosa si potrebbe fare che io gestisca solamente le 9 cifre, mentre al totale ci pensi lui.
Una volta sistemato questo punto, in modo take da essere certi che non sia più un problema si passa al secondo punto: la rappresentazione grafica delle cifre.
Per questo secondo problema temo che non vi siano soluzioni semplici, almeno senza usare che led e transistor, visto che ogni sistema di comunicazione (i2c, seriale, etere ...) richiede che chi lo riceva sappia decodificarlo.
Quello che penso sia fattibile é che il master, l'Arduino che comanda i tasti) gestisca un display lcd per mostrare graficamente i numeri all'operatore, ed invii tramite Seriale tali numeri anche agli Arduino posti dietro il tabellone che dovranno pilotare i led.
Questo può essere fatto usando moduli radio/seriale, che Arduino vede come seriale ma che trasmettono radio, ce ne sono che una casa la attraversano senza problemi.
Quanto al numero di Arduino necessari temo siano uno ogni due cifre, se si sta parlando di Uno, visto che le porte disponibili scarseggiano.
Tali Arduini riceveranno un segnale di questo tipo
'INIZIO', 'cifra', 'stato', 'SEPARATORE', 'cifra', 'stato', 'FINE', dove ' ' delimitano un byte.
Gli Arduini, poi, gestiranno i led cone display 7s, comandando da ogni porta un transistor di potenza (isolato come e se serve) che comandi i led. Così facendo gli unici fili che correranno in giro saranno le alimentazioni, mentre i fili dei led saranno corti.
Non so se funziona, ne se é una buona soluzione, visto che non so cosa c'é in commercio a tal proposito.
Idee migliori?

Questa è la soluzione più indolore: forum.arduino.cc/index.php?topic=431577.msg2990710#msg2990710

Con TRE pin di Arduino comandi tutti i display che vuoi senza alcun multiplexing (ogni cifra ha uno shift register in serie con le altre cifre, e un driver di potenza per comandare i segmenti).

La soluzione strip-led semplifica ulteriormente rispetto a migliaia di saldature.

PIcopallo:
Salve a tutti, sono nuovo del forum e sono un appassionato di elettronica.
Non mi interessa realizzare anche la parte superiore (quella che indica strike, ball ecc...)
Ciò che mi interessa è poter segnare, ad ogni inning, il punteggio, incrementandolo semplicemente agendo su un pulsante.
All'inizio avevo pensato ad un semplice multiplexer collegato ad ogni gruppo di 2 cifre, ma ciò rende praticamente ingestibile il pannello tramite un comando remoto cablato, in quanto i cavi sarebbero talmente tanti che alla fine mi ritroverei con un cavo spesso 5 centimetri o più.
chiunque avesse la possibilità di darmi una mano in questo progetto.
Ciao a tutti!

mah piu che la parte di arduino il problema è il pannello stesso li richiede tutto lo "sforzo" economico.

cercare di assemblare 1000 led potrebbe essere un impresa pesante :frowning:
attenzione che con i led alta luminosità troppo vicini (o colati in qualche tipo di resina) potresti avere delle sorprese terribili :confused:

consiglio di fare prima una cifra sola e testarla a dovere nella durata e in condizioni estreme (caldo e/o sotto il sole)

Le strisce di led sono ancora la soluzione piu semplice, ci sono da 60 led per metro, ma se si vogliono usare quelli bianchi invece che colorati, le producono anche con piu led per metro, e addirittura con i led montati su due file parallele (ma avrebbe senso solo in caso di cifre "molto" grandi e per uso in esterni)

Inoltre le si puo alimentare a 12V, riducendo un po le correnti necessarie (va ricordato che l'alimentazione va sempre prevista per poter dare piu corrente di quella necessaria a tutti i segmenti di tutte le cifre accesi insieme ... se ad esempio si decidesse di usare 6 led per segmento, mettiamo quelli 5050 colorati tanto per dire, 60mA per led, x6= 360mA per segmento, x7= 2520mA per cifra, x22= 55440mA per il tabellone senza le cifre superiori ... piu di 55A a 12V, e poco piu di 665W di led :astonished:

Mi piace la soluzione di el rospo, mi viene da domandarmi se per caso non ci sia una strana pandemia di display a 7 segmenti, come se "per caso" tutti gli istituti tecnici avessero dato lo stesso compito in classe. Sì, o o, non è un mio problema.
come al solito ho pensato a come farei io, e mi sono risposto: lo compero. Psto che così non va si potrebbe usare, invece che una caterva di pin distrbuiti su una tascata di arduini, oppure una serie di shfit register in cascata tra loro (che sarebbero 20 distribuiti su una certa distanza), un certo casino anche il programma che li deve caricare di 20 per 8 bit, sono una caterva di passi e bisogna saltare un bit ogni shift register (che comandano 7 segmenti, non 8 uscite) ho pensato alora di usare (ispirato da quello che ieri non sapeva fare le divisioni delle cifre, gli auguro di aver imparato, oggi) dicevo, ispirato da lui ad usare un cd4511 per ogni display, i 4511 hanno l'ingresso di enable/latch.
fanno 20 4511 tutti in parallelo su 4 pin di ucita bcd, con 20 fili di enable che NON facciamo uscire da arduino, ma da 3 shift register che ci danno fino a 24 possibili cifre,
ance la programmazione dgli shift register sarebbe semplice, dato che di fatto si tratterebbe di un solo bit alto che viaggia lungo la catena di shift register, si potrebbe usare invece che degli shift register due contatori decadici cd 4017, comandati da un solo pin di arduino

oramai sono lanciato, e per soprammercato indico come si potrebbe fare la decodifica da una cifra a bcd (i 4711 sono dichiarati BCD binary coded decimal, ma di fatto usando una sola cifra per volta si tratterebbe di binario a 4 bit)

   primo bit uguale alla cifra modulo 2 
   divisione intera della cifra per due 
       ricordo che shiftare di un bit equivale a dividere per due
   secondo bit la cifra modulo 2
       e via così

non metto il programma perchè non si fa, di mettere il programma fatto e finito, si lascia un po' di divertimento agli altri, sono già stato martellato per questo....

Standardoil:
un certo casino anche il programma che li deve caricare di 20 per 8 bit, sono una caterva di passi e bisogna saltare un bit ogni shift register (che comandano 7 segmenti, non 8 uscite)

Sono 20 shiftOut, con valori letti da un'unica tabella di conversione (valore 0..9 -> display) lunga 10 byte, il bit non usato... è semplicemente un bit non usato. Quindi avendo i valori 0..9 di partenza, l'operazione tabella->shiftOut è banale. A margine tutte le cifre sono circuitalmente identiche e intercambiabili l'una con l'altra. NOTA: vista la lunghezza dei collegamenti potrebbe essere utile scrivere una nuova shiftOut più lenta.

usare un cd4511 per ogni display, i 4511 hanno l'ingresso di enable/latch.
fanno 20 4511 tutti in parallelo su 4 pin di ucita bcd, con 20 fili di enable che NON facciamo uscire da arduino, ma da 3 shift register che ci danno fino a 24 possibili cifre

È possibile (sono 26 fili totali da portare in giro anziché 5, di cui 20 vanno cablati sulla specifica cifra), partendo sempre dai valori 0..9 tocca fare 4 digitalWrite per ogni cifra per settare il codice binaro a 4 bit (in questo contesto lascerei perdere la scrittura diretta su porta del micro), e fare una doppia scrittura degli shift register per generare l'impulso di latch. Per pilotare i segmenti delle big-cifre vanno comunque interposti anche 20x ULN2803 come nel caso precedente. NOTA: i CD4511 hanno anche la "famosa" caratteristica del 6 e del 9 senza una "barretta" che a qualcuno non piace.

Hai ragione, meglio così.

Poi, cercando tabellone baseball, di cui non conosco nulla, vedo che ce ne sono di diversi tipi, ad esempio ball/strike/out in molti sono singole luci (7 faretti in tutto) senza bisogno di pilotare cifre complete.

Per quanto riguarda il minitabellone "interno", forse sarebbe più sensato farlo software su un PC portatile, che invia serialmente le cifre all'Arduino del tabellone grande...

Se poi è fattibile una soluzione "proiettore"... non c'è da costruire niente, e Arduino esce anche mestamente di scena :stuck_out_tongue:

Ciao ragazzi,
probabilmente la soluzione non è semplice, ma la domanda penso di si.
Mi perdonerete, ma il mioproblema non è quanto assorbirà il circuito oppure se i led avranno problemi ad accendersi oppure sulla grandezza del tabellone.
Mi piacerebbe solo sapere come pilotare con arduino un tabellone composto da 2 righe da 9 cifre + totale a due cifre.
Esistono anche molte piccole matrici di led pilotate da MAX7219 che potrei modificare ponendo, al posto dei piccoli led, quelli più grandi pilotati ovviamente da transistor.
Per quanto riguarda il quadro comandi dovrebbero semplicemente esserci pochi pulsanti:

  1. scelta del numero da modifitare
  2. pulsante + o - per variare la cifra
  3. pulsante di conferma

Qualcuno conosce l'esistenza di uno sketch per Arduino in grado di svolgere questa operazione ?

Altri fattori (alimentazione e problemi vari) penso di essere in grado di gestirli.

Grazie ancora a tutti

P.S.: I led devono necessariamente essere di colore rosso, in quanto il pannello potrebbe essere esposto ai raggi solari diretti, quindi diventerebbe poco visibile.
Vorrei utilizzare led da 10mm ad alta luminosità, quelli classici a testa tonda, perché si possono saldare alla distanza desiderata senza essere vincolati a strip.
Inoltre, per rispondere a Etemenanki, i led non saranno MAI tutti accesi, per cui tale assorbimento non potrà verificarsi, a meno che ad ogni inning non si segnino 8 punti per squadra... :))

Se ho capito bene tu vorresti un aiuto per scrivere un programma che possa modificare 2 gruppi di 9 cifre, ne calcoli il totale, e mostri il tutto su display 7 segmenti.
Beh, se è così non è neanche molto complicato. Cominciamo a scindere le seguenti parti:

  1. input lato hardware
  2. software di gestione degli input
  3. modifica delle cifre e calcolo del totale
  4. software di gestione output
  5. output lato hardware

Il primo punto credo sia molto semplice. Si può realizzare con 3/6 pulsanti collegati a pin diversi di Arduino e tutti muniti di DEBOUNCE HARDWARE.
Dal numero di pulsanti cambia leggermente la seconda parte, quella di decodifica. E qui ci si può un po sbizzarrire a seconda della disponibilità di pin (se vuoi vedere come fare tutto con soli 3 pulsanti te lo descrivo, ma non cambia molto)
Completamente avulso dal numero di pulsanti ecco a fase 3, anche nota come cuore del programma. Esso può banalmente essere costituito da un array bidimensionale di 9 colonne e 2 righe, contenente cifre da 0 a 9, con eventuale riporto. Esso altro non è che un programma di modifica cifre indicate come coppia di coordinate. A questi array ci aggiungiamo anche (oltre alle 2 variabili byte puntatori, non mostrate) un altro array bidimensionale di dimensione 2*2 che deve contenere, scomposta in cifre, la somma delle cifre della riga corrispondente (somma che può essere ottenuta in variabile apposita, poi scomposta)
Ora la fase 4, molto legata alla 5, consistente nel comandare l'output nel modo desiderato (devo usare un mare di pin comandando tutti i 7 segmenti assieme? Ho 7 segmenti in codifica BCD? Uso shift register? Ai 7 segmenti ci pensa un altro a cui invio dati via seriale? ...?) E quindi qui interessa sapere come intendi comandare i display.
Infine la fase 5, il collegamento hardware degli output, e qui sembra non ci siano problemi.

Ora, in quale di queste fasi ti serve una mano?

Innanzitutto ti ringrazio per la risposta...
Beh, in realtà di programmazione di Arduino sto proprio alle prime armi, ma d'altronde, non posso pretendere che qualcuno si metta a perdere del tempo per un mio problema.
Facendo alcuni esperimenti con una matrice di LED ho capito che un singolo integrato MAX7219 sarebbe in grado di gestire 64 led, ovvero, nel mio caso, potrebbe addirittura gestire tutta una fila di 9 cifre.
Alla fine, utilizzando due soli MAX7219 in serie, poitrei pilotare tutte le 18 cifre degli inning e mi resterebbero solo le 4 cifre dei due totali, che, eventualmente, potrei gestire con un terzo integrato.
Il punto è: come poter scegliere la cifra da modificare (magari facendola lampeggiare), modificarla (magari con un solo pulsante che fa uno slide da 0 a 9 e poi riprende) e poi confermare con un terzo pulsante?
Potrei anche impiegare 3 pulsanti per riga, ma penso che ciò comporterebbe un maggiore utilizzo di ingressi.
Escludendo la parte elettronica, per la quale riesco a cavarmela da solo, non saprei proprio da dove iniziare con la programmazione di Arduino.
Grazie ancora!