BINARY_COLOR_CLOCK (e altri orologi)

Eccomi con un nuovo “orologio”: qualcuno dirà che sono fissato (meglio: maniaco) perchè ormai di orologi elettronici ne ho fatti diversi ognuno con stili e caratteristiche diverse.

Avevo inziato, quasi 10 anni fa, ad interessarmi di microcontroller per uno scopo ben preciso: progettare un timer per la gestione di una caldaia per il riscaldamento. Avendo una esperienza decennale in programmazione e qualche conoscenza di elettronica, ho deciso di provare con i PIC: Compro la EasyPic 5 della MicroElektronica e comincio la mia nuova esperienza.

Dopo aver fatto un po’ di prove con il PIC16F887 (in dotazione alla board) progetto il primo timer  e dopo qualche tempo progetto anche il secondo. Qui inizia la mia mania degli orologi digitali appunto perchè per fare un timer ci vuole un orologio per scandire il tempo. Mi sono lasciato prendere la mano e sempre con il PIC16 ho progettato quello che vedete in questa foto:

E’ un orologio digitale “analogico”: sfrutta un display (128×64) touch_screen pilotato appunto da un PC16F887. L’ impostazione del tempo si avvale di  pulsanti laterali. Il tempo viene cadenzato dai timer interni del PIC. Chiaro che se si spegne occorre reimpostare il tutto.

Continuo con i miei progetti ed ecco un’altra versione:  è un  orologio che utilizza un display 8 caratteri (recupero da una stampante) e un sensore di temperatura (LM35). Il display effettua lo scorrimento da destra a sinistra dei valori: un trimmer regola la velocità e uno la luminosità. Anche in questo caso si utilizza un PIC16. Ecco come si presenta(va). I tasti laterali servivano a impostare i valori, un cicalino suonava ad ogni ora.

Non contento, dopo qualche tempo avvio il progetto di un nuovo orologio usando stavoolta un PIC16F84 con questo risultato:

Questo orologio si avvale di un display compatto di 4 cifre a sette segmenti. I led che fanno corona al display rappresentano i secondi e si accendono ogni 5 secondi. Anche in questo caso il timer è gestito dai registri interni. 4 pulsanti lateralmente impostano ore, minuti. Questo orologio è attualmente funzionante e fa gola ad un nostro amico. Quello analogico è stato regalato.

La ciliegina sulla torta (scusate la vanteria), è questo ulteriore orologio: è un calendario perpetuo che utilizza 31 led per i giorni, 12 per i mesi, 7 per la settimana, e un display LCD 16×2 per mostrare l’ora. Qui per le temporizzazioni ho usato una schedina autonoma per produrre i valori della data e dell’ora. Funzionava in modo seriale e veniva programmata sempre serialmente con gli appropriati parametri per la data e l’ora e per leggere l’intera sequenza dei valori. Questa scheda era prodotto da FuturaElettonica ma non credo che oggi sia ancora in commercio.

Ecco l’ oggetto finale:

Devo dire che è stato un parto laborioso sia dal punto di vista Hardware che Software per risolvere anche alcuni problemi di temporizzazione.  Purtroppo non era preciso e nel tempo ritardava di qualche minuto e occorreva riprogrammare il timer.

Ho smesso di occuparmi dei PIC da quando ho iniziato a interessarmi di Arduino. Non sono un patito beninteso, però rispetto ai pic (che saranno sicuramente più potenti specie gli ultimi) ma per un hobbista dilettante quale il sottoscritto, la piattaforma Arduino o meglio il controller ATMEGA328, è più che valida e dato l’ enorme disponibilità di software e hardware, ben si adatta alle mie esigenze.

Anche in questo caso, dopo approfondite esperienze, ho progettato realizzato diversi prototipi per la prova di dispositivi HW come sensori di temperatura, sensori di luce, timer, display 7 segmenti e matrici 8×8 e 7×5 e il relativo software di gestione. E dove possibile utilizzando solo componenti di riciclo.

Ma restando nell’ambito “orologi digitali” e utilizzando dispositivi specifici dopo accurato studio e prove varie, mi rimetto a riprogettare nuovi modelli di orologi tra cui il seguente:

Direte: uffa che barba sono sempre i soliti…. no questo è diverso: usa ATMEGA328 e un display compatto a 4 cifre. Le ore si alternano ogni 5 secondi con i valori della temperatura e della umidità. Inoltre per il passaggio dall’ora legale al quella solare e viceversa, usa uno switch esterno per cui una volta impostato è sufficiente premere il reset. Mentre per  i PIC i valori del tempo venivano gestiti dai timer interni, adesso uso il DS1307 (o DS3231) mentre per i valori temperatura e umidità uso il DHT11 ( o DHT22). L’unico problema è la mancanza di precisione del DS1307. L’alimentazione di questo orologio come quelli che vedrete successivamente, è fornita da un semplice caricabatterie per cellulari che forniscono i 5V/1A più che sufficienti alla bisogna. Di questo orologio esiste una versione (l’ ultima funzionante) che effettua lo scorrimento da destra a sinistra dei valori ORE,MINUTI,GIORNO,MESE,TEMPERATURA,UMIDITA’ ad una velocità costante per dare tempo alla visualizzazione dei dati.

Persevero ancora con questi orologi e colgo l’ occasione di un malfunzionamento dell’orologio calendario (quello con i led in circolo) dovuto forse alla ossidazione delle piste del circuito (non facevo PCB ma “filavo” i vari pin tra loro, per rivedere e riprogettare detto orologio/calendario con componenti più moderni e caratteristiche software migliori. Ecco (vedi foto) il risultato della riprogrettazione:

Rispetto al precedente, forse più appariscente, questo mostra i giorni divisi in due quindicine, i mesi in un unica fila così come la settimana. Il display mostra ore,minuti,e secondi oltre ai valori della temperatura e umidità. Per la regolazione e l’impostazione dei valori ho usato un “encoder rotativo” con il quale alternando rotazione del cursore con il pusante incorporato, si modificano in più e meno i valori della data e dell’orario che via via sono visualizzati nell’ LCD. Questo orologio non ha bisogno di essere connesso ad un PC (via HyperTerminal) per l’aggiornamento dei valori contrariamente ad altri come quello precedente. (Sto pensando ad una modifica per ovviare questo handicap).

E veniamo finalmente all’ultimo progetto e realizzazione (scopo anche di questo articolo).

Questo è il

BINARY_COLOR_CLOCK

Ovvero l’orologio calendario per “INFORMATICI“. La foto ritrae l’ oggetto ancora in fase di “moglioramenti al case“. Perchè per “informatici” ?: perchè la visualizzazione dei giorni, dei mesi, delle ore, dei minuti e dei secondi è fornita in modo “BCD!“. Le ore i minuti i giorni i mesi e i secondi si leggono sommando i pesi binari di ogni led acceso !. Sono suddivisi in gruppi per migliorare la visualizzazione.

REALIZZAZIONE DEL PROGETTO:

Per prima cosa occorre scegliere quali led usare e come pilotarli, quale RTC e quale controller. Mentre nei precedenti ho usato l’ ATMEGA328 quale componente singolo (per intendersi non la board Arduino 1),  in questo progetto ho usato la board “ARDUINO NANO“: questa board  dalle dimensioni estemamente ridotte mi ha risparmiato la circuiteria (quarzo, condensatori, e pin  per la programmazione) in quanto già tutto pronto nella stessa board compreso il connettore USB (per l’alimentazione e/o per la connessione al PC) i pin per l’ingresso autonomo dell’ alimentazione (max 12V). 

I led usati sono del tipo a “cilindro” classicamente usati nelle catene luminose: ho cannibalizzato una di queste catene recuperando 72 led con i colori giallo,verde,blu,rosso. Più che sufficienti per il progetto. I led sono pilotati dal classico “MAX7219” ormai stra_abusato nei mie progetti. Il motivo è semplice: da solo può controllare fino a 8 displaya sette segmenti (oppure 8 led) o una sola matrice 8×8. Gestisce da solo il multiplex alleggerendo, non poco, la programmazione.

Il criterio con cui sono connessi i led (vedi anche lo schema elettrico) parte dal seguente presupposto: per i giorni occorrono 7 led, per i mesi 6 led, per le ore 7 led, per i minuti 8 led, per i secondi 9 led

Perchè ?: qui interviene con la sua logica interna, l’ RTC Ds3121 orologio calendario con molte opzioni rispetto al Ds1307 (tipo gestione allarmi ecc.).  I registri interni che gestiscono tempo e data forniscono i valori in formato “BCD“: quindi le ore “15” non sono in binario puro ( 15 in binario sarebbe “0000 1111“) bensì nel formato “0001 0101” che si legge appunto “15” ma che tradotto in decimale darebbe “21“.  Il Max7219 ha 8 registri corrispondenti agli 8 display pilotabili. Ogni registro di 8 bit ha una corrispondenza 1:1 con i segmenti ( o led) che pilotano il display stesso secondo questa configurazione:

Se invece del display ci mettiamo 8 led si raggiunge lo scopo: infatti è sufficiente caricare il registro “display” con i valori del registro ore (come per gli altri) dell’RTC. Ecco perchè per quanto riguarda proprio le ore sono sufficienti solo 7 led: i giorni vanno da 1 a 31 quindi da “0000 0001” a “0011 0001”. Non dimentichiamo il giorno 10,20,30 ovvero accendere un led per indicare lo zero. Un trucchetto semplice risolve il tutto: basta accendere il led “DP” visto come 7^ led  gestito dallo sketch in  modo opportuno e posizionato logicamente nel PCB. Tutto questo marchingegno vale anche per i restanti valori del mese, delle ore, dei minuti e dei secondi. Per i secondi ho inserito un “9^” led pilotato da un pin extra per visualizzare correttamente i secondi da “00” in poi.

SCHEMA ELETTRICO:

Lo schema è stato realizzato con KIKAD: i pin dell’ATMEGA328 nello schema potrebbero non corrispondere al quelli dell’ Arduino NANO ma le funzioni sono le stesse. Nel caso dell’ Arduino NANO lo schema si semplifica ulteriormente eliminando quarzo, condensatori, reset e circuito per i pin di programmazione.

Alcune foto della realizzazione:

Nella prima possiamo vedere la main board con Arduino Nano, il chip Max7219, e i connettori per i led. Nella seconda la board in funzione con l’ RTC DS3231.

In queste due foto invece la board con i led inseriti e la stessa funzionante.

PCB:

Sono stati prodotti: un pcb per la main board, 3 pcb per i led giorni e  mesi, ore e minuti, secondi. Questi ultimi 3 poi sono stati fusi in un unica board. Le tre board poi sono state connesse tra loro con delle piccole piastrine atte alla connessione dei pin “A/DP” oltre ai pin di pilotaggio. I PCB sono stati prodotti con PCBEXPRESS in modo assolutamente manuale.

Come si può vedere dalla prima foto del progetto ad ogni gruppo di led è stata sovrapposta una mascherina come la seguente:

E’ la didascalia che copre ogni led al fine di assumere il corretto significato: in effetti si ripropone la notazione binaria: “8421 8421”. Lo “zero” che non  esiste nella notazione binaria, si accende quando i giorni, i mesi, i minuti hanno lo zero finale (10,20,30).

Anche questa mascherina è stata prodotta con PCBEXPRESS sfruttandone alcune caratteristiche. Per evitare che la luminosità di ciascun led quando acceso interferisse con quello adiacente spento, ognuno di loro è stato incapsulato in una guaina termorestringente nera.

La programmazione dello sketch:

Anche l’ RTC necessita di una programmazione “una tantum” per la assegnazione dei valori del tempo e della data. Sono possibili due opzioni: uno sketch apposito per la gestione da usarsi ogni volta si ha la necessità di aggiornarlo oppure inserire nello sketch l’opzione per detta programmazione. Nel primo caso andrebbe tolto dall’alloggiamento e una volta programmato con l’ apposito sketch, reinserirlo. Nel secondo caso, previsto nel mio sketch, ho inserito all’inizio (nel setup per intenderci) la gestione della sua programmazione usando la connessione USB e l’Hyper_Terminal per l’I/O dei valori. Se dopo una attesa di 5 secondi non si innesca la connessione lo sketch passa direttamente all’inizializzazione del MAX7219. Parte quindi il loop che non fa altro che leggere l’ RTC e mandare i valori letti al chip. Per evitare eventuale sfarfallio dei led giorni/mesi/ore/minuti, dovuti al continuo refresh, ho inserito un controllo tale per cui l’aggiornamento di questi valori avverrà solo se cambiano tra una lettura e l’altra dell’  RTC. Fanno eccezione i secondi che sono sempre aggiornati.

CONSIDERAZIONI FINALI:

Tutto ovviamente è migliorabile anche dal punto di vista “visivo”. Sono una frana in bricolage per cui mi vengono fuori scatole sbilenche e così via. Non ritengo di aver fatto qualcosa di originale ma, come hobbista, mi sono divertito e ho passato un pò di tempo mantenendo vivo il cervello cosa che arrivati ad una certa età è necessaria. Non dovete pensare però che abbia speso, tempo e denaro, a progettare il tutto. A fine agosto ho cominciato a gettare le basi e solo una settimana fa sono arrivato al termine. La spesa potete quantificarla andando su AMAZON o EBAY per Arduino NANO, MAX7219, DS3231 . La spesa più grossa ?: 19,90 per i 72 led.

Se qualcuno è interessato a  realizzare uno degli  orologi presentati può richiedermi il materiale al mio indirizzo email: gvsoft75@hotmail.com.

Grazie per l’ attenzione e….alla prossima.

Gvsoft Novembre 2017

 

VOTO
1 commento
  1. Marcello
    Marcello dice:

    Simpatica l’idea della visualizzazione binari e come hai risolto il valore dello zero. Potrebbe essere un bel gaget da regalare a qualche patito di informatica o studente.
    Resto in attesa del prossimo orologio.

    Approvazioni

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento

Specify Instagram App ID and Instagram App Secret in Super Socializer > Social Login section in admin panel for Instagram Login to work