Progetto Orologio a lettere! Consigli?

Salve ragazzi! Come da titolo ho pensato bene di occupare il mio tempo cercando di progettare un Orologio a lettere come regalo per la mia ragazza. Per facilitare la comprensione di ciò che ho in mente di fare ho allegato una foto di questo tipo di orologio ( sicuramente molto più bello esteticamente di quello che uscirà dalle mie mani :smiley: )

Per gestire questi led ho pensato di ricorrere ad Arduino Mega 2560 a 54 pin I/O. Peccato che io non ho mai avuto a che fare con Arduino fin ora e vorrei qualche consiglio soprattutto per quanto riguarda la costruzione dell'assieme.
Infatti per quanto riguarda il programmino software, cercando un po' qua e là, e grazie alle conoscenze pregresse del C/C++, dovrei essere già arrivato a una soluzione che mi dovrebbe garantire teoricamente il funzionamento dell'orologio senza modulo RTC (non ho bisogno di memorizzare l'orario e neanche di una precisione elevata nel tempo). Naturalmente io ve lo carico ugualmente, magari anche se il compilatore non mi ha dato errori potrebbero comunque esserci problemi, alla fine devo accendere e spegnere strisce led.

Passiamo ai dati tecnici:
Io ho pensato di alimentare una matrice 11x11 di Led, ognuno posto sotto una determinata lettera, più strisce di LED formeranno le parole che indicano l'orario. Altri 4 LED serviranno ai lati per indicare i minuti intermedi, infatti le parole cambiano ogni 5 minuti. Per spiegarmi meglio vi do un esempio:
Se sono le 15:47 si dovranno illuminare le strisce di led collegate alle parole:
"SONO" "LE" "TRE" "MENO" "UN QUARTO" "PM" con 2 pallini su 4 accesi che indicano che sono e 47. Ad ogni PIN dell'arduino sarà quindi collegata una striscia led, quindi una parola (nell'esempio in questione 8 pin sono in HIGH: 6 parole e 2 pallini). I pin all'interno del programma sono gestiti così:

Pin 1-12 Regolano le ore (h)
Pin 13-14 Accende "E" o "MENO"
Pin 15-19 Regolano i minuti (m) che accendono i LED: "CINQUE" "DIECI" "UN QUARTO" "VENTI" "TRENTA"
Pin 20-23 Regolano i minuti intermedi (mp)
Pin 24-25 Accende "SONO" e "LE"
Pin 26-27 Accende "PM" o "AM"
Pin 28 Accende "I LOVE U"
Pin 29 Accende "TI AMO CECI"
Pin 30-32 Sono collegati ai pulsanti di regolazione dell'ora (INPUT)

Inoltre facendo un po' di calcoli ho trovato che:
Pin utilizzati: 32
Max LED accesi contemporaneamente: 32
Max Pin coinvolti contemporaneamente per i LED: 11
Max Led collegati a un pin: 9;

Sapendo che ogni Pin da la 5 V, 20 mA e che l'Arduino da massimo 200 mA (Giusto?) mi sapreste consigliare quali componenti elettrici acquistare per assemblare questo progetto? Per il momento è intuitivo che ho bisogno di LED a 5 V e di resistenze, ma ho più dubbi riguardo la gestione della poca corrente a disposizione. Grazie in anticipo! :smiley:

Orologio_a_lettere.ino (5.69 KB)

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… 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 tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Scusami tanto, non avevo fatto caso a quel punto del regolamento :smiley:

Dany9746:
vi do un esempio:
Se sono le 15:47 si dovranno illuminare le strisce di led collegate alle parole:
"SONO" "LE" "TRE" "MENO" "UN QUARTO" "PM" con 2 pallini su 4 accesi che indicano che sono e 47. Ad ogni

Direi che dovrebbe dire
"SONO" "LE" "QUATTRO" "MENO" "UN QUARTO" "PM"

hai previsto l'uso dell'RTC perché se ti basi solo sul delay allora il tuo orologio sarà veramente poco affidabile come precisione (nel codice postato non c'è traccia dell'RTC è solo una prova?)
Per alimentare le strice led a 12V sicuramente ti serviranno dei transistor o dei mosfet (Attenzione che siano logic level ovvero ad esempio si ai IRL540 e no agli IRF540) per i led singoli intendi normali led da 3,5mm o anch'essi saranno singoli led a 12V?

... forse il suggerimento e' "scontato", ma ... usare uno schermettino LCD per visualizzare il testo, invece del pannello con i led ? ... :wink:

Magari un 7 pollici, tanto non deve fare refresh veloci o roba del genere, se anche il testo a cambiare ci mette un secondo o due, non dovrebbe avere grande importanza ...

Dany9746:
funzionamento dell'orologio senza modulo RTC (non ho bisogno di memorizzare l'orario e neanche di una precisione elevata nel tempo)

Se non usi un RTC il meglio che puoi ottenere sono circa 5 secondi di errore all'ora.

Max LED accesi contemporaneamente: 32

Quattro integrati ULN2803: puoi gestire contemporaneamente 32 uscite a 40mA con un innalzamento di circa 30 gradi centigradi (o 32 uscite a 20mA con un innalzamento di 15).

Il "WORD CLOCK TWO" ( https://qlocktwo.com/en/qlocktwo-classic/ ) é un orologio conosciuto e spesso copiato (originale costa 500€ in sú) percui trovi tante istruzioni.
Non userei delle strisce led ma delle strisce con WS2812 che hanno il controlle integrato nel LED.
In questo modo puoi pilotare ogni LED singolarmente senza aver bisogno di elettronica di pilotaggio.

Ciao Uwe

Grazie mille per le risposte!!!

fabpolli:
Direi che dovrebbe dire
"SONO" "LE" "QUATTRO" "MENO" "UN QUARTO" "PM"

hai previsto l'uso dell'RTC perché se ti basi solo sul delay allora il tuo orologio sarà veramente poco affidabile come precisione (nel codice postato non c'è traccia dell'RTC è solo una prova?)
Per alimentare le strice led a 12V sicuramente ti serviranno dei transistor o dei mosfet (Attenzione che siano logic level ovvero ad esempio si ai IRL540 e no agli IRF540) per i led singoli intendi normali led da 3,5mm o anch'essi saranno singoli led a 12V?

Non mi ero proprio reso conto di aver sbagliato orario! Anche nel programma devo modificare questo errore, l'ora deve cambiare quanto scattano i meno venti.
Per quanto riguarda il modulo RTC, avevo trovato un tutorial dove faceva un orologio senza usare il modulo. Nei commenti una persona aveva affermato che l'orologio si era starato di 2 minuti in un mese quindi ero fiducioso. Non l'ho previsto per non complicare il progetto ma se è semplice da implementare e da controllare tramite software sicuro lo prendo in considerazione.
Per quanto riguarda i LED non saprei, tu consiglieresti le strisce led da 5 V o da 12 V? Non ho bisogno di chi sa che luminosità, visto che poi ci sara il pannello con le lettere bianco/nero.
Immaginavo avessi bisogno di alcuni transistor che mi aiutassero con la corrente. Ho guardato i IRL540 e sembrano essere buonissimi visto che assorbono pochissima corrente. Ne avrei bisogno 1 per ogni pin per caso? Grazie mille per l'aiuto

Etemenanki:
... forse il suggerimento e' "scontato", ma ... usare uno schermettino LCD per visualizzare il testo, invece del pannello con i led ? ... :wink:

Magari un 7 pollici, tanto non deve fare refresh veloci o roba del genere, se anche il testo a cambiare ci mette un secondo o due, non dovrebbe avere grande importanza ...

Volevo fare una cosa molto originale per questo non ho pensato a uno schermetto LCD, però potrebbe essere la soluzione nel caso non riesco con i LED.

Claudio_FF:
Se non usi un RTC il meglio che puoi ottenere sono circa 5 secondi di errore all'ora.
Quattro integrati ULN2803: puoi gestire contemporaneamente 32 uscite a 40mA con un innalzamento di circa 30 gradi centigradi (o 32 uscite a 20mA con un innalzamento di 15).

Visto che al massimo avrò 11 pin che lavorano assieme dici che sarebbe un problema l'innalzamento della temperatura? Non conoscendo l'assorbimento di un singolo LED una sola porta del transistor può supportare 9 led accesi? Per il resto dopo l'integrato ho solo da mettere le resistenze per ogni striscia di led o ho bisogno di di un power supply esterno?Grazie mille!

uwefed:
Il "WORD CLOCK TWO" ( QLOCKTWO - A NEW SENSE OF TIME - Handmade in Germany ) é un orologio conosciuto e spesso copiato (originale costa 500€ in sú) percui trovi tante istruzioni.
Non userei delle strisce led ma delle strisce con WS2812 che hanno il controlle integrato nel LED.
In questo modo puoi pilotare ogni LED singolarmente senza aver bisogno di elettronica di pilotaggio.

Ciao Uwe

Ciao Uwe! Non ero a conoscenza di questa possibilità molto interessante, naturalmente dovrei cambiare tutto il codice però non sarebbe male. Ho visto questo video su youtube (https://www.youtube.com/watch?v=jkg7T7jlIzU). Dici che posso prendere esempio da qua??

"Una sola porta del transistor" ? ? ?
Hai presente com'è fatto un transistor?...

Stai parlando dei transistor degli ULN?...

Punto di vista alternativo:
Considera ogni parola singolarmente, con i suoi led accesi assieme
Ti servono 21 "parole"
E cinque led singoli
Le uscite comandano dei transistor, che accendono i vari gruppi di led
Massimo della a semplicità

Dany9746:
Grazie mille per le risposte!!!

Non mi ero proprio reso conto di aver sbagliato orario! Anche nel programma devo modificare questo errore, l'ora deve cambiare quanto scattano i meno venti.
Per quanto riguarda il modulo RTC, avevo trovato un tutorial dove faceva un orologio senza usare il modulo. Nei commenti una persona aveva affermato che l'orologio si era starato di 2 minuti in un mese quindi ero fiducioso. Non l'ho previsto per non complicare il progetto ma se è semplice da implementare e da controllare tramite software sicuro lo prendo in considerazione.

Se ti doti di RTC ottieni due cose in un colpo solo, la prima una buona precisione nel tempo e la seconda che il programma diverrà molto più semplice e lineare da gestire, leggi l'ora, i minuti e i secondi da questi decidi i led da accendere e fine.
Se poi segui il consiglio di uwe (a discapito del costo) anche la parte elettronica diventa super semplice e il software non si compilca più di tanto.
Poi l'appetito vien mangiando e dovrai pensare a mettere qualcosa per "rimettere" l'orologio che siano pulsanti o altro quindi visto che dovrai riscrivere il codice quasi da zero ti suggerisco anche di pensarlo da subito senza l'uso di delay ma usando millis, avendo l'RTC puoi pensare di verificare l'ora ogni 30 secondi (al massimo ma puoi abbassare) anziché ogni secondo tanto hai la precisione al minuto e se eviti il delay non dovrai staviolgere dopo il codice quando dovrai gestire la parte che gestirà la modifica dell'orario

Bello l'orologio però le 10:37 sono più "immediate" che "SONO LE UNDICI MENO VENTICINQUE" e tre pallini...
L'estetica è molto bella ma gli architetti ci hanno abituato che "bello" non è necessariamente "funzionale".

Magari si aggiunge la parola trentacinque
Magari spezzando (trenta)(venti)cinque

Invece se vuoi fare una cosa differente, nuova nuova
Puoi fare 6 righe di uno, 10, 5, 10, 5, 10 , 2 led
Illuminando di volta in volta la cifra che ti serve
Quasi quasi lo faccio anch'io....

Dany9746:
Ciao Uwe! Non ero a conoscenza di questa possibilità molto interessante, naturalmente dovrei cambiare tutto il codice però non sarebbe male. Ho visto questo video su youtube (https://www.youtube.com/watch?v=jkg7T7jlIzU). Dici che posso prendere esempio da qua??

2 considerazioni
Monterei le striscie su una lamiera di aluminio, cosí si rafreddano meglio e porrei i distanziatori con i buchi davanti. Metti come penultimo davanti al vetro una pellicola diffusore di un vecchio monitor LCD (sono normalmente 4 fogli di plastica). Questa fa illumiare ogni lettera in modo piú uniforme. come l' ultimo strato metterei una lastra di gomma schiuma da 1mm con i buchi per i LEd. Alla fine una pellicola per le lettere oppure le lettere disegnate dieto il vetro anteriore.

Visto che non accendi mai tutti i LED in contemporanea l' alimentatore e cavi non li devi dimensionare per il valore massimo ( 11 x11 LED *60mA = 7,2A)

Ciao Uwe

Datman:
"Una sola porta del transistor" ? ? ?
Hai presente com'è fatto un transistor?...

Stai parlando dei transistor degli ULN?...

Non ho un idea precisa di come è fatto un transistor però sò qual'è il suo principio di funzionamento. Ieri ho sbagliato intendevo l'integrato ULN

Standardoil:
Punto di vista alternativo:
Considera ogni parola singolarmente, con i suoi led accesi assieme
Ti servono 21 "parole"
E cinque led singoli
Le uscite comandano dei transistor, che accendono i vari gruppi di led
Massimo della a semplicità

In teoria l'avrei già pensato così! Infatti a ogni pin dell'arduino pensavo di connettere la striscia led che corrisponde a una parola o frase da accendere. Più che altro non sapendo quasi nulla di elettronica non saprei che tipo di resistenze e transistor dovrei usare. Nel caso in cui prendessi in considerazione gli iRL540 dovrei metterne uno per ogni PIN dell'arduino?

fabpolli:
Se ti doti di RTC ottieni due cose in un colpo solo, la prima una buona precisione nel tempo e la seconda che il programma diverrà molto più semplice e lineare da gestire, leggi l'ora, i minuti e i secondi da questi decidi i led da accendere e fine.
Se poi segui il consiglio di uwe (a discapito del costo) anche la parte elettronica diventa super semplice e il software non si compilca più di tanto.
Poi l'appetito vien mangiando e dovrai pensare a mettere qualcosa per "rimettere" l'orologio che siano pulsanti o altro quindi visto che dovrai riscrivere il codice quasi da zero ti suggerisco anche di pensarlo da subito senza l'uso di delay ma usando millis, avendo l'RTC puoi pensare di verificare l'ora ogni 30 secondi (al massimo ma puoi abbassare) anziché ogni secondo tanto hai la precisione al minuto e se eviti il delay non dovrai staviolgere dopo il codice quando dovrai gestire la parte che gestirà la modifica dell'orario

Grazie mille, allora credo proprio che mi informerò meglio sulla questione per capire come modificare il programma utilizzando il modulo RTC. Se per caso dovessi scegliere di utilizzare delle strisce LED WS2812 che si controllano in quel modo, posso comunque usare il modulo RTC?

steve-cr:
Bello l'orologio però le 10:37 sono più "immediate" che "SONO LE UNDICI MENO VENTICINQUE" e tre pallini...
L'estetica è molto bella ma gli architetti ci hanno abituato che "bello" non è necessariamente "funzionale".

In quel caso dovrebbe dire che sono "E" "TRENTACINQUE" ahahah! Ti do ragione al 100% ma un motivo ci sarà per cui sono andato verso questa scelta. La mia ragazza è un Designer :smiley:

Standardoil:
Magari si aggiunge la parola trentacinque
Magari spezzando (trenta)(venti)cinque

Invece se vuoi fare una cosa differente, nuova nuova
Puoi fare 6 righe di uno, 10, 5, 10, 5, 10 , 2 led
Illuminando di volta in volta la cifra che ti serve
Quasi quasi lo faccio anch'io....

È proprio quello che ho fatto! Nel mio pannello di cui ho già fatto fare l'adesivo ho previsto solo un "CINQUE" un "VENTI" e un "TRENTA" per semplificare la cosa. Ho già impiegato molto per riuscire a riempire come si deve la matrice 11x11 quindi direi che su quello non vorrei modificare, ma come idea è molto carina.

uwefed:
2 considerazioni
Monterei le striscie su una lamiera di aluminio, cosí si rafreddano meglio e porrei i distanziatori con i buchi davanti. Metti come penultimo davanti al vetro una pellicola diffusore di un vecchio monitor LCD (sono normalmente 4 fogli di plastica). Questa fa illumiare ogni lettera in modo piú uniforme. come l' ultimo strato metterei una lastra di gomma schiuma da 1mm con i buchi per i LEd. Alla fine una pellicola per le lettere oppure le lettere disegnate dieto il vetro anteriore.

Visto che non accendi mai tutti i LED in contemporanea l' alimentatore e cavi non li devi dimensionare per il valore massimo ( 11 x11 LED *60mA = 7,2A)

Ciao Uwe

Grazie mille per i suggerimenti! Prendo nota! Prendo nota anche del consumo di corrente che ha ogni singolo LED, sinceramente non lo sapevo!

Ciao, posso unirmi alla festa?
io sono per la soluzione di uwe, cioè la striscia led con controller per pilotare i led singolarmente, così non alimenti nulla da arduino ma controlli solo.

uwefed:
Visto che non accendi mai tutti i LED in contemporanea l' alimentatore e cavi non li devi dimensionare per il valore massimo ( 11 x11 LED *60mA = 7,2A)

Spero ci sia sempre anche una qualche limitazione hardware per evitare di friggere tutto per un errore sul software che in fase di debug può sempre capitare. Se non c'è già sull'alimentatore io la prevederei nel tuo circuito di alimentazione.

Ora un suggerimento estetico che può piacere come no:
Premetto che io sono tendenzialmente tonto per cui il discorso dei due pallini accesi ad indicare due minuti in più rispetto a quelli scritti non mi è risultato particolarmente intuitivo.
Se oltre a questi due pallini ne fai altri 60 tutto attorno al display o su una striscia a parte per evidenziare i secondi, potrebbe saltare più all'occhio che quando si spengono tutti e si accende un pallino in più questo rappresenti i minuti in più.
I pallini dei secondi, cambiando ogni secondo, dovrebbero essere a prova di tonto...

EDIT: i pallini dei secondi non è necessario siano accesi in modo incrementale, può esserne lasciato acceso anche uno solo alla volta, cioè solo quello che indica il numero attuale.

Ciao ragazzi! Alla fine credo di aver optato per la scelta di Uwe. Devo solo capire come fare il codice e utilizzare al meglio le librerie che controllano questi led e come implementare il modulo RTC. Se qualcuno ha consigli da darmi a tal proposito sono ben accetti.
Per quanto riguarda la parte elettronica ho deciso di utilizzare gli stessi componenti che ha usato il ragazzo del video su youtube (1 resistenza da 470 ohm, un condensatore da 1000u 10V, un alimentatore da 5V 10 A). Prenderò 300 led (5 metri) di led WS2812b IP30 e cercherò di costruire una matrice 13 x 13 così da metterci anche i pallini per i secondi.

maubarzi:
Ora un suggerimento estetico che può piacere come no:
Premetto che io sono tendenzialmente tonto per cui il discorso dei due pallini accesi ad indicare due minuti in più rispetto a quelli scritti non mi è risultato particolarmente intuitivo.
Se oltre a questi due pallini ne fai altri 60 tutto attorno al display o su una striscia a parte per evidenziare i secondi, potrebbe saltare più all'occhio che quando si spengono tutti e si accende un pallino in più questo rappresenti i minuti in più.
I pallini dei secondi, cambiando ogni secondo, dovrebbero essere a prova di tonto...

EDIT: i pallini dei secondi non è necessario siano accesi in modo incrementale, può esserne lasciato acceso anche uno solo alla volta, cioè solo quello che indica il numero attuale.

Sarebbe davvero una bella idea. Ma non saprei proprio come realizzarla dal punto di vista software. Io avevo pensato di memorizzare nella memoria di Arduino le 30 matrici che corrispondono alle 30 parole che combinate mi danno l'orario giusto. Per i secondi come dovrei fare?? Altre 60 matrici?

Dany9746:
Sarebbe davvero una bella idea. Ma non saprei proprio come realizzarla dal punto di vista software. Io avevo pensato di memorizzare nella memoria di Arduino le 30 matrici che corrispondono alle 30 parole che combinate mi danno l'orario giusto. Per i secondi come dovrei fare?? Altre 60 matrici?

Per i secondi userai 60 led indirizzabili sequenzialmente, per cui stabilito l'indirizzo del primo led ci sommi i seconti -1 e ottieni l'indirizzo del led corrispondente da leggere o li accendi tutti fino a quello se li vuoi tenere accesi fino al termine del minuto.

Se ti riferisce a 300 led WS2812 in strip credo tu stia facendo confusione, non devi vederli come matrice ma come singoli led, ciascuno di essi ha un suo id e in base a quello lo programmi indicando colore e intensità luminosa del led.
Il consiglio è sempre il solito, visto che non hai dimestichezza invece di sparare subito alto e cercare di arrivare da zero all'obiettivo in un solo colpo perdendo un sacco di tempo e creando (forse) codice poco manuntenibile/modificabile con poco sforzo ti consiglio di acquistare solo Arduino (anche una uno o una nano tanto se hai optato per tali led ti basta e ti avanzano i pin) almeno due pulsanti (per rimettere l'orario) e un RTC e prendere dimestichezza con quest. Quando riuscirai a visualizzare correttamete l'ora sul monitor seriale, rimetterla e trasformarla nel formato che serve a te (ovvero stampare sempre su monitor seriale sono le quttro meno un quarto, sono le sei, ecc.) solo quando l'ora cambia (ovvero non una sequela infinita di righe sul monitor seriale) ma una cosa del tipo

Sono le quattro meno un quarto (una volta)
Sono le quattro meno cinque (una volta)
Sono le sei (una volta)

sei a posto e potari passare a imparare a gestire i led, anche qui magari prima di prenderene mille tutti assieme prendine uno per ciascuna parola che devi illuminare simulando che per ognuna di esse basti un led, impara a gestirli con un programam a se che non necessariamente sia legato all'ora ma che ti permetta di impratichirti con essi (Es. accendo solo il led uno, premo il pulsante accedo il secondo, poi il terzo e così via. Poi fai un altro programma che ad ogni pressione spenga il precedente e accenda il successivo ecc.) quando avrai appreso la logica allora accenderai i singoli led in base all'ora. Ottenuto il funzionamento potrai acquistare tutti gli altri led necessari, ti basterà modificre il programma in modo tale da non accendere un solo led per parola ma i led dal numero 1 al 5 per la prima parola, dal 6 al 11 per la seconda e così via (è un esempio alcune parole avranno più led altre meno).
Ah consiglio spassionato NON usare delay ma inizia subito a pensare il programma con l'uso di millis

fabpolli:
Se ti riferisce a 300 led WS2812 in strip credo tu stia facendo confusione, non devi vederli come matrice ma come singoli led, ciascuno di essi ha un suo id e in base a quello lo programmi indicando colore e intensità luminosa del led ...

Ciao ragazzi, rispolvero questo vecchio post. Anche se è difficile da credere alla fine ho sviluppato quello che sarebbe il programma definito. Ho seguito alla lettera i tuoi consigli e sono arrivato ad avere sul monitor seriale l'ora giusta e quindi adesso è semplice inserire i led da accendere. Ho comprato e assemblato tutto ma purtroppo non sono riuscito ad accendere i led in nessun modo. Naturalmente ho provato con un programma semplice per vedere prima se i led funzionassero ma a quanto pare non riesco proprio ad accenderli.

Per chi legge per la prima volta: Il mio progetto è quello di realizzare un orologio a lettere utilizzando i led WS2812b.
In questo momento sto provando almeno ad accendere un solo led ma sto fallendo miseramente. La connessione è semplice: ho collegato i 5V e il GND ai rispettivi pin dell'arduino e il DIN al pin 6. Con l'arduino connesso al PC ho controllato e c'è tensione sia prima del led che dopo. Sto utilizzando la libreria fastled.h e il programma naturalmente è quello base:

/*
Prova funzionamento led
*/

#include <FastLED.h>
#define LED_PIN     6
#define NUM_LEDS    1

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
}

void loop() {
 leds[0] = CRGB(255, 0, 0);
 FastLED.show();
 delay(500);
 
}

Qualcuno saprebbe dirmi come mai questo led non si accende?