Arduino · 27 aprile 2013 0

LED clock

LED clock

LED clock

Vi presento il LED clock, un orologio a LED che visualizza l’orario usando la modalità decimale e dividendo i LED in colonne rappresentanti le decine/unità di ore, minuti e secondi. Rispetto agli orologi binari che si vedono in circolazione, la lettura è molto più immediata.

L’orologio utilizza un ATmega328P ed un PCF8563 come RTC esterno. Il pilotaggio avviene senza ricorrere al multiplexing per poter sfruttare tutta la luminosità dei LED, che sono da 10 mm per aumentarne la visibilità anche a distanza. Il circuito può modificare la luminosità dei LED in base alla luce ambientale della stanza in cui è posto.

Parte hardware

Il cuore del circuito è un ATmega328P alimentato a 5V con oscillatore interno a 8 MHz (ho tolto il quarzo esterno perché non mi serviva una frequenza operativa molto elevata, così ho risparmiato componenti). L’MCU pilota i LED usando 5 registri a scorrimento 74HC595 collegati a 5 array di Darlingthon ULN2803. In questo modo posso tenere i LED sempre accesi, evitando il multiplexing che, anche se di poco, riduce la luminosità della matrice. La corrente è fornita da un transistor PNP BDX54: pilotandolo in PWM posso anche modificare la luminosità dell’intera matrice, permettendo così al firmware di adattare la luminosità dell’orologio alla luce della stanza (riducendola di notte) in base alla lettura di una fotoresistenza.

L’alimentatore esterno deve fornire almeno 1 A di corrente, meglio se di più (io ho scelto un modello da 5 V/2,5 A). Tutti i LED accesi consumano sui 550 mA di corrente (~14 mA a LED), a cui va aggiunto il consumo degli altri componenti.

L’RTC scelto è il PCF8563, con una batteria di backup di tipo CR2032 che dovrebbe garantire una decina d’anni di funzionamento dell’RTC senza alimentazione principale. Grazie ai 2 diodi che separano la linea positiva della batteria da quella dell’alimentazione del circuito principale, la batteria alimenta l’RTC solo quando viene scollegato l’alimentatore esterno.

Parte software

Per compilare il firmware sono necessarie 3 librerie aggiuntive, scaricabili dai seguenti link:

PinChangeInt
Rtc_Pfc8563
leOS2

Il codice è stato scritto e testato su un Atmega328P (ma dovrebbe funzionare anche su un Atmega168P perché occupa poco meno di 9K di Flash e 445 byte di RAM [consumo statico]). Per impostare l’ATmega328P usate i seguenti fuse:

low fuses=0xE2
high fuses=0xDE
extended fuses=0x05

L’orologio funziona in questo modo. All’avvio, controlla se l’RTC sta girando oppure no, in caso negativo fa partire l’ora da 00:00:00. Per programmare l’orario basta premere il pulsante SET per più di 1,5 secondi. Il display fa un lampeggio accendendo tutti i led poi passa in modalità programmazione. Si programmano, in ordine: ore, minuti, secondi. Il principio è lo stesso per tutti: inizialmente viene visualizzato il valore corrente (attenzione al caso “0” perché non vedete nessun led acceso), che potete aumentare o diminuire premendo i pulsanti INC e DEC. I led lampeggiano per farvi capire che siete in programmazione. Per confermare la scelta, premete SET. Dopo 10 secondi che l’utente non preme nessun tasto, il programma passa alla scelta seguente in automatico quindi dopo 30 secondi complessivi esce dalla programmazione da solo.
Alla fine della programmazione l’orario viene salvato localmente e sull’RTC (ricordo che dall’RTC l’orario viene prelevato solo 1 volta all’ora e che l’incremento dell’orario in locale viene fatta con un PCINT agganciato al pin CLK_OUT dell’RTC).

In modalità visualizzazione dell’ora, i pulsanti INC e DEC hanno 2 funzioni aggiuntive, che possono essere attivate premendoli per più di 1,5 secondi.
INC attiva/disattiva la funzione di variazione della luminosità dei led in base alla luminosità ambientale: massima durante il giorno o in piena luce, minima durante la notte o in ambiente buio. Questo per permettere di tenere l’orologio anche nella stanza in cui si dorme.
Il pulsante DEC attiva invece la “modalità notturna” (2 accensioni veloci di tutti i led conferma l’attivazione della modalità, 1 accensione di tutti i led conferma la disattivazione della modalità), ossia il display si spenge del tutto dalle 00:00:00 alle 05:59:59 per non disturbare durante le ore notturne.

LED Clock
LED Clock
led_clock_1_5_3.zip
Version: 1.5.3
6.4 KiB
2656 Downloads
Dettagli...