[WORKLOG] Project LEC - light emitting clock

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
Salve popolo di Toms!

Evitando lunghe premesse, ciò che voglio condividere in questo thread è il worklog del progetto che ho realizzato per il mio esame di maturità di quest'anno.
Come forse intuibile dal titolo, si tratta di un orologio a led. Non un comune orologio a led digitale, bensì uno analogico.
Il tutto è stato realizzato con materiali di facile reperibilità online e funziona grazie ad Arduino.

Il progetto è già ultimato e sono a disposizione di tutto il materiale necessario per portare a termine la discussione, ma per questioni puramente di souspense (lasciatemi credere che ne riesca a creare:asd:) pubblicherò il susseguirsi delle operazioni in più giorni.

Ma ora cominciamo!

VjSCUzu.png




Un buon progetto, qualunque esso sia, parte per forza di cose dall'
ZdOLixq.png


Per molti anni vari dispositivi sono stati creati e perfezionati per misurare e tenere traccia del tempo. Essi possono essere meridiane, clessidre, orologi meccanici o atomici.

Con il desiderio di creare uno di questi dispositivi, ho deciso di costruire un orologio "moderno" e piacevole alla vista, con componentistica di facile reperibilità e semplicità di utilizzo.

Riordinando un po' le idee mi sono procurato tutto il necessario, più precisamente:

  • una scheda di sviluppo Arduino UNO,
  • una striscia di LED RGB con LED driver incorporato (WS2812B),
  • la libreria per Arduino necessaria a pilotare i vari LED,
  • un regolatore di tensione LM7805,
  • condensatori,
  • resistenze,
  • pulsanti,
  • basetta di vetronite ramata (per la realizzazione del PCB)

MqyZhcI.jpg


Come molti sapranno, Arduino si programma in un linguaggio simile al C.
Con un setup improvvisato, sono riuscito quindi a scrivere il codice che verrà eseguito in loop fino a quando il dispositivo rimane acceso.


EDIT: problema immagini risolto :)
 
Ultima modifica:

Blume.

Moderatore
Staff Forum
Utente Èlite
24,323
11,198
CPU
I7 8700K
Dissipatore
Silent loop B-Quiet 360
Scheda Madre
Fatal1ty Z370 Gaming K6
HDD
3 Tera su Western Digital 3 Tera su Toshiba p300 3Ssd da 500Gb
RAM
Corsair Vengeance DDR4 LPX 4X4Gb 2666Mhz
GPU
Msi Gtx 1080Ti Gaming Trio X
Audio
Integrata
Monitor
SyncMaster P2470HD
PSU
Evga Supernova 650W G2
Case
Dark Base 700 B-Quiet
Net
100/50 Ftth Fastweb
OS
Windows 10Pro. 64Bit
Salve popolo di Toms!

Evitando lunghe premesse, ciò che voglio condividere in questo thread è il worklog del progetto che ho realizzato per il mio esame di maturità di quest'anno.
Come forse intuibile dal titolo, si tratta di un orologio a led. Non un comune orologio a led digitale, bensì uno analogico.
Il tutto è stato realizzato con materiali di facile reperibilità online e funziona grazie ad Arduino.

Il progetto è già ultimato e sono a disposizione di tutto il materiale necessario per portare a termine la discussione, ma per questioni puramente di souspense (lasciatemi credere che ne riesca a creare:asd:) pubblicherò il susseguirsi delle operazioni in più giorni.

Ma ora cominciamo!





Un buon progetto, qualunque esso sia, parte per forza di cose dall'
ZdOLixq.png


Per molti anni vari dispositivi sono stati creati e perfezionati per misurare e tenere traccia del tempo. Essi possono essere meridiane, clessidre, orologi meccanici o atomici.

Con il desiderio di creare uno di questi dispositivi, ho deciso di costruire un orologio "moderno" e piacevole alla vista, con componentistica di facile reperibilità e semplicità di utilizzo.

Riordinando un po' le idee mi sono procurato tutto il necessario, più precisamente:

  • una scheda di sviluppo Arduino UNO,
  • una striscia di LED RGB con LED driver incorporato (WS2812B),
  • la libreria per Arduino necessaria a pilotare i vari LED,
  • un regolatore di tensione LM7805,
  • condensatori,
  • resistenze,
  • pulsanti,
  • basetta di vetronite ramata (per la realizzazione del PCB)



Come molti sapranno, Arduino si programma in un linguaggio simile al C.
Con un setup improvvisato, sono riuscito quindi a scrivere il codice che verrà eseguito in loop fino a quando il dispositivo rimane acceso.


EDIT: problema immagini risolto :)
Seguo incuriosito...:D
 
Ultima modifica:

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
Eccoci pronti allora alla stesura del
5pYr7pk.png


Premetto che il seguente codice può essere ottimizzato e migliorato, magari usando la funzione della misura dell'uptime tramite millis(). Il motivo per cui ho deciso di usare, invece, la funzione delay() è stato per semplicità espositiva. Essendo stato, come già scritto, un progetto realizzato per l'esame di maturità, ho dovuto cercare un sistema per rendere il tutto di facile comprensione, dato che non tutta la commissione sapeva programmare in C.

Il codice si divide in tre parti:
  1. dichiarazione di variabili,
  2. istruzioni da eseguire una volta sola all'accensione del dispositivo,
  3. istruzioni da eseguire in loop fino allo spegnimento del dispositivo.


- Dichiarazione di variabili -


//includo la libreria per il pilotaggio dei LED
#include "FastLED.h"
//definisco il numero totale dei led usati
#define NUM_LEDS 72
//definisco il pin del chip a cui è connessa la linea "data" della LED strip
#define LED_PIN 6
//definisco la luminosità dei LED
#define BRIGHTNESS 64
//definisco il tipo di LED driver (integrato nella LED strip)
#define LED_TYPE WS2812B
//definisco l'ordine dei singoli diodi per ogni LED, da sinistra a destra
#define COLOR_ORDER GRB

//definisco l'array dei LED
CRGB leds[NUM_LEDS];

//pin del chip a cui sono collegati i pulsanti per la regolazione del tempo
const int buttonPin1 = 7, buttonPin2 = 8;
//inizializzo variabili per memorizzare lo stato dei pulsanti (se premuti o meno)
int buttonState1 = 0, buttonState2 = 0;
//tempo di un secondo in millisecondi
int pause = 1000;



- Istruzioni da eseguire una volta sola all'accensione del dispositivo -


void setup() {
//aspetto un po' per prevenire eventuali errori
delay (2500);
//definisco i pin del chip assegnati ai pulsanti come pin di input
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);

//aggiungo i LED con le proprietà scritte in precedenza all'array
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>
(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
//setto la luminosità dei LED
FastLED.setBrightness(BRIGHTNESS);
}


- Istruzioni da eseguire in loop fino allo spegnimento del dispositivo -

A meno che i programmi non siano di notevole complessità, quelli più semplici si possono rappresentare anche mediante un flow chart.


JvfFxJb.png


NOTA: i driver inclusi nei LED sono connessi tra di loro in serie attraverso la linea "data" (citata prima), dunque i LED delle ore vanno da 0 a 11 nell'array, quelli per minuti e secondi vanno da 12 a 71.

Partendo dal flow chart, si può quindi iniziare a scrivere il programma vero e proprio.
- - - Updated - - -

//Perché non funzionano gli spazi a inizio rigaa?:boh:

void
loop() {
for (int h = 0; h < 12; h++){
leds[h].setRGB(0, 255, 130); //setto il colore del LED
FastLED.show(); //accendo il LED
for (int m = 12; m < 72; m++){
leds[m]. setRGB (255, 150, 0); //setto il colore del LED
FastLED .show(); //accendo il LED
for (int s = 12; s < 72; s++){
if (s == m){
leds[m]. setRGB (255, 150, 0); //setto il colore del LED
FastLED .show(); //accendo il LED
delay(pause);
s++;
if (s == 72){
break;
}
}
//regolazione orario
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
if (buttonState1 == HIGH) pause = 0; //velocizza il tempo
else pause = 1000;
if (buttonState2 == HIGH){
leds[h]. setRGB (0, 0, 0); //spengo il LED
h++;
if(h == 12) h = 0;
leds[h]. setRGB (0, 255, 130); //setto il colore del LED
FastLED .show(); //accendo il LED
}
leds.setRGB(150, 0, 255); //setto il colore del LED
FastLED.show(); //accendo il LED
delay(pause);
leds.setRGB(0, 0, 0); //spengo il LED
}
leds[m].setRGB(0, 0, 0); //spengo il LED
}
leds[h].setRGB(0, 0, 0); //spengo il LED
}


Precisazione: quando scrivo "//spengo il LED" in realtà assegno al LED il colore nero (RGB(0, 0, 0), i tre diodi sono spenti); l'assegnazione dei colori ai LED ("gli stati di accensione e spegnimento") è invece gestita dalla funzione FastLED.show(), la quale potrebbe essere scritta quindi meno volte.

Download del codice "tabbato": https://www.dropbox.com/s/k4n6xmwd3zurhfj/Code.zip?dl=0


Finita, ora, la parte relativa alla programmazione, si può procedere alla realizzazione dell'orologio vero e proprio.
Per darmi un'idea della forma finale, ho realizzato per prima cosa l' "involucro" con un software di modellazione 3d


swb8FbS.png



Ora non resta che passare dal digitale al reale:sisilui:
 
Ultima modifica:
  • Mi piace
Reazioni: Anatra di Gomma

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
Mi scuso per il ritardo, ma per problemi di organizzazione (università, mannaggia attè) non ho avuto modo di aggiornare la discussione:patpat:

Ad ogni modo, come preannunciato, eccoci pronti alla realizzazione dell'

ZQ78fe2.png


Per avere dati precisi riguardanti le dimensioni finali dell'involucro, ho realizzato il seguente "progetto" mediante un software di disegno tecnico 2d.


lZPHj25.png



Successivamente, mediante un altro software, questo per modellazione 3d, ho realizzato un render che dovrebbe dare l'idea del prodotto ultimato.



KuK7R3j.png




Per quanto riguarda la realizzazione pratica non c'è molto da dire o spiegare.. Il lavoro è stato eseguito a partire da un asse di legno, il quale è stato ridimensionato e successivamente rifinito al tornio. Gli ultimi dettagli sono stati invece realizzati a mano con carta vetrata di diversa granatura, lime, taglierini, bestemmie e olio per legno.

vg81VHO.jpg


Dopo aver incollato all'involucro e saldato tra loro i led, ecco come appare l'orologio :rock:


HygH1xU.png


V7E19xo.jpg




Nel prossimo post verrà descritta la realizzazione del PCB, resosi necessario al fine di diminuire al minimo le dimensioni della parte elettronica, affiché questa potesse essere nascosta nell'involucro dell'orologio:luxhello:
 
Ultima modifica:

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
Eccoci allora pronti a rimpicciolire le dimensioni occupate dalla componentistica che gestisce e fa funzionare l'orologio.

Durante la fase di sviluppo, in mancanza di una breadboard, mi sono ritrovato a dovermi arrangiare con ciò che avevo a disposizione..
Per far funzionare tutto non mi sono interessato del lato estetico, ma solamente di quello pratico, ottenendo una "soluzione" di questo tipo..

fp2fzp3.jpg


Per rendere il tutto di dimensioni più contenute, occorre usare lo stretto necessario affinché il funzionamento sia garantito.
Ho quindi optato per la realizzazione di un circuito stampato (Printed Circuit Board)

U6Kzs4S.png


Per prima cosa, basandomi sulla "confusione" di fili che andavano e venivano dalla scheda Arduino, ho realizzato lo schema elettrico mediante un software adatto a tale compito (Fritzing nel mio caso)


lrOp0Kf.png



Non starò qui a spiegare il funzionamento o il perché della scelta di ogni singolo componente (come ho invece dovuto fare in sede d'esame:lol:), ma in breve

  • si regola una tensione in ingresso affinché sia stabile a 5V, la quale alimenta il chip e la striscia di LED;
  • si installano i componenti necessari al funzionamento del chip (quarzo e condensatori)
  • si collegano i due pulsanti (con relative resistenze di pull-down) necessari alla regolazione del tempo (vedi post circa il codice)


Realizzato lo schema elettrico, si può procedere al disegnare le piste che collegano tra di loro i vari componenti, sempre mediante il software sopra citato.

Successivamente, ho stampato il design su carta fotografica e, in seguito, grazie ad un ferro da stiro, ho trasferito il toner sulla basetta ramata

gwl8Kdv.png


cEhGahq.png


ATTENZIONE!! NON fare riferimento al design rappresentato nelle immagini! Esso è specchiato e ha richiesto la piegatura di 180° di TUTTI i pin del chip! In caso voleste riprodurre il mio progetto, copiate lo schema elettrico e da quello realizzate nuovamente il disegno delle piste !!
(brutta bestia essere alle prime armi e voler partire già con cose relativamente complicate:sisi:)

Nota: esistono diverse tecniche per realizzare circuiti stampati fatti in casa; internet è pieno di guide a proposito, quindi non mi dilungherò nella spiegazione dei vari passaggi eseguiti


Ciò che ha seguito è stato un bel bagnetto in cloruro ferrico, in maniera tale da rimuovere il rame non coperto dall'inchiostro.
Il risultato è il seguente:


vuAprTo.png


e dopo aver saldato tutti i componenti (e sistemato il problema prima descritto)..


rTjUhnw.jpg



Ora è tutto pronto per essere collegato ad alimentatore e striscia di LED, in maniera tale da apprezzare il risultato finale, il quale comparirà a breve nel prossimo post :oldfap::lol:
 
Ultima modifica:

Blume.

Moderatore
Staff Forum
Utente Èlite
24,323
11,198
CPU
I7 8700K
Dissipatore
Silent loop B-Quiet 360
Scheda Madre
Fatal1ty Z370 Gaming K6
HDD
3 Tera su Western Digital 3 Tera su Toshiba p300 3Ssd da 500Gb
RAM
Corsair Vengeance DDR4 LPX 4X4Gb 2666Mhz
GPU
Msi Gtx 1080Ti Gaming Trio X
Audio
Integrata
Monitor
SyncMaster P2470HD
PSU
Evga Supernova 650W G2
Case
Dark Base 700 B-Quiet
Net
100/50 Ftth Fastweb
OS
Windows 10Pro. 64Bit
Solo una nota....
sotto gli spoiler non vedo niente
 

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
Analisi matematica 1, perché togli tempo al mio svago?:muro:

Comunque..

Dopo aver collegato l'insieme di componenti alla serie di LED, non resta altro che collegare ai pin di Vin (vedi schema elettrico) un alimentatore, "dare corrente" e sperare che funzioni tutto.

Es63lkL.jpg



NQvFuz0.jpg


IoeVwCw.jpg


v1dDzKv.jpg


Quando in funzione, l'orologio si presenta come mostrato nel seguente video



Per eventuali dubbi o curiosità, fate pure un fischio:vv:
Inoltre, tempo permettendo, caricherò un po' di foto scattate durante la realizzazione del progetto, anche se non completamente inerenti ad esso.


Solo una nota....
sotto gli spoiler non vedo niente

Sicuro? Ho provato a visualizzare il thread da più dispositivi e browser e si vedeva tutto.. In ogni caso provvedo subito a togliere gli spoiler :)
 
Ultima modifica da un moderatore:
  • Mi piace
Reazioni: Anatra di Gomma

Blume.

Moderatore
Staff Forum
Utente Èlite
24,323
11,198
CPU
I7 8700K
Dissipatore
Silent loop B-Quiet 360
Scheda Madre
Fatal1ty Z370 Gaming K6
HDD
3 Tera su Western Digital 3 Tera su Toshiba p300 3Ssd da 500Gb
RAM
Corsair Vengeance DDR4 LPX 4X4Gb 2666Mhz
GPU
Msi Gtx 1080Ti Gaming Trio X
Audio
Integrata
Monitor
SyncMaster P2470HD
PSU
Evga Supernova 650W G2
Case
Dark Base 700 B-Quiet
Net
100/50 Ftth Fastweb
OS
Windows 10Pro. 64Bit

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
  • Mi piace
Reazioni: Anatra di Gomma

Anatra di Gomma

The squawking hammer
Utente Èlite
7,066
2,219
CPU
I5-3570K 4.1 GHz
Dissipatore
Macho HR-02
Scheda Madre
MSI Z77A-G45 Thunderbolth
HDD
Samsung 830 256GB; WD Blue 1TB; WD Red 4TB
RAM
Corsair Vengeance 2x8 GB 1600 MHz
GPU
PALIT 980ti Superjetstream
Audio
Asus Xonar DX
Monitor
Hannspree 27" 1440p
PSU
XFX 550W
Case
Corsair Obsidian 650 d - modded
OS
Windows 10
  • Mi piace
Reazioni: brgVE

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
Se lo fai, mi avrai ancora tra i tuoi followers!

Ci proverò si, al massimo non funziona :asd:

Non so esattamente quando dato che ho altri progetti ancora in fase di realizzazione e l'università mi sta togliendo tantissimo tempo
I progetti sono

  • una stazione saldante a temperatura regolabile digitalmente (con arduino)

  • un controller RGB basato sull'invio di "codici"(?) tramite porta seriale verso arduino, con software dedicato (programmato in java o visual c++, boh). Questo è un lavoretto di "modding" che illustrerò (se mai funzionerà) nella discussione (la aprirò) dei lavori di modding del pc da poco assemblato (idea avuta prima di scoprire questa :lol: https://www.asus.com/Motherboards/ROG-MAXIMUS-VIII-HERO-ALPHA/ )

  • un altro orologio, questo digitale, sempre su base arduino, ma con le piste di rame che connettono i vari led "stampate" su vetro, a mo di "clear PCB"
  • alimentatore a voltaggio regolabile su base dell' LM338k e di un trasformatore che avevo vagante per casa
  • non mi ricordo che altro giace da mesi sul pavimento del "laboratorio":sisi:

---

Per il progetto L.E.C. - a meno che io non me ne dimentichi (possibile) domani carico le altre foto scattate durante la realizzazione del progetto :party:
 
Ultima modifica:
  • Mi piace
Reazioni: Anatra di Gomma

Lorenzoliuni_

Nuovo Utente
3
0
Ciao allora il mio prof vorrebbe sapere il datashit della striscia led, la foto del funzionamento, montaggio striscia.
E quanta corrente assorbe la striscia led?
 

brgVE

Utente Attivo
131
37
CPU
Intel i7 6700
Dissipatore
Scythe Kotetsu
Scheda Madre
Asrock z170 extreme 4
HDD
WD blue 1TB
RAM
Crucial ballistix 8gb
GPU
Palit gtx 1070 Super Jetstream
Monitor
LG 25UM57
PSU
EVGA supernova g2 550w
Case
Fractal Design ARC midi R2
OS
Windows10
Ciao allora il mio prof vorrebbe sapere il datashit della striscia led, la foto del funzionamento, montaggio striscia.
E quanta corrente assorbe la striscia led?

Ciao, nel progetto ho usato una striscia di LED, come scritto nel primo post, con cotrollore WS2812B. Penso ti basti fare una breve ricerca su google cercando 'WS2812B' per trovare quello che cerchi.

Purtroppo al momento non ho l'orologio a portata di mano, puoi intanto guardare le foto che ho postato, in particolare guarda quelle nella cartella dropbox che ho già linkato


Nel caso di necessità di altre foto posso recuperarlo durante la settimana prossima.

Per montaggio della striscia cosa intendi? A livello meccanico con l'adesivo di cui era già dotata la striscia, aggiungendo colla a caldo dove serviva. Se intendi a livello di collegamento elettrico credo che lo schema già postato sia esaustivo :)

Per quanto riguarda l'assorbimento di corrente, sempre nella cartella dropbox c'è una foto fatta ad un tester analogico che misura l'assorbimento di tutti i componenti. Evitandoti la ricerca e l'interpretazione, assorbiva 140mA. Questo valore cambia al variare della luminosità che imposti. Purtroppo l'assorbimento della sola striscia non lo conosco/ricordo, nel caso posso misurarlo nei prossimi giorni.
 

Lorenzoliuni_

Nuovo Utente
3
0
Guarda ho un problema con arduino , io copio e incollo tutta la programmazione e ho inserito la libreria FastLed.h , ma alla verifica di arduino mi da i seguenti errori :
error: request for member ‘setRGB’ in ‘leds’, which is of non-class type ‘CRGB [72]’
Poi problema con :
leds.setRGB(150, 0, 255); //setto il colore del LED
Poi ancora:
error: request for member ‘setRGB’ in ‘leds’, which is of non-class type ‘CRGB [72]’
Ancora :
leds.setRGB(0, 0, 0); //spengo il LED

Se puoi darmi la soluzione di questo problema , perché ne io ne il mio professore riusciamo a capire il perché. Grazie
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!