L’ennesimo orologio calendario

Eccomi di nuovo con un ennesimo orologio calendario…..è una provocazione fatta dall’ ElettroAmico Marcello che nel suo commento al mio articolo del novembre scorso terminava: ” in attesa del prossimo orologio”. Beh ho cercato di accontentarLo e questo è il risultato.

Non è comunque solo questo il pretesto… tutto nasce da un vecchio orologio calendario dove i giorni, i mesi e la settimana venivano gestiti da 31 + 12 + 7 led.

Questa foto ritrae il progetto originale (fatto con un PIC 16F887 qualche anno fa). Però dopo un certo periodo di funzionamento, ha cominciato a dare i numeri: non si accendevano i led del giorno 31 e del giorno 15. (si accendevano quando volevano loro). All’epoca non avevo ancora fatto conoscenza con il MAX7219: i led venivano gestiti in multiplexing, il tempo era controllato da un chip dopo una opportuna programmazione via seriale, ma difettava parecchio in precisione.

Decido quindi di rifare il tutto anche alla luce di nuove mie esperienze con Arduino che all’epoca era ancora in embrione. Così dopo varie esperienze decido di rifare il progetto all luce appunto dei nuovi dispositivi: Arduino e Max7219. Questo è il risutato:

Anche in questo progetto: 31 led per i giorni, 12 per i mesi e 7 per la settimana. Un display per visualizzare l’ora, la temperatura e l’umidità. Però anche questo “aggeggio” dopo qualche tempo di buon funzionamento ha cominciato a dare problemi: mancata accensione dei led o addirittura due o più led giorni accesi insieme: insomma malfunzionamenti vari. A nulla è servito rivedere le connessioni tra le varie piastrine dei led, tra il chip Arduino e il MAx7219 (sostituito più volte). Forse le piste ossidate delle piastrine dei led ??.

Perso la pazienza e il tempo decido di rifare il tutto ridimensionando il progetto originale: niente più scrittura su SD (logger della temperatura e umidità), utilizzo del DHT22 (più preciso) e del DS3231 come RTC. Ridimensionamento dei led giorni (solo 9) dei led mesi (solo 9) salvando solo i led della settimana (solo 7). Dalla foto all’inizio dell’articolo si può vedere come è stato risolto. La foto seguente visualizza la matrice dei led al completo. Un’ unica piastra che alloggia tutti i led.

 

I led sono disposti su tre file: la prima in alto definisce i giorni, la seconda al centro i mesi e la terza in basso la settimana. Perchè solo 9 led per i giorni e i mesi ?… semplicemente i giorni da 10/19, da 20/29 e da 30/31 vengono visualizzati in modo “composto”: ovvero 3 led si accedono rispettivamente per la “decade” relativa. Ovvero il giorno 13 viene visualizzato con il led “3” acceso e il led “10” acceso. Lo stesso criterio vale per tutti i giorni e per i mesi (solo un led per indicare quando si tratta dei mesi 1o,11,12). Fanno eccezione i led della settimana. Il display LCD 2×16 visualizza l’ora la temperatura e l’umidità.

CARATTERISTICHE COSTRUTTIVE:

Le componenti HW utilizzate (molto materiale di recupero) sono le seguenti:

  • Led bianchi “caldi”: 9 per i giorni, 9 per i mesi, 7 per la settimana
  • Led bianchi “caldi”: per le decadi: 3 per i giorni, 1 per i mesi
  • MAX7219 per la gestione dei led.
  • Arduino NANO per la gestione. Scelto per la ridotta dimensione e per avere tutto disponibile: USB per alimentazione e la connessione seriale, PIN digitali ecc. come per Arduino_1.
  • RTC modello DS3231 per la gestione dell’orario e del calendario. Modello più preciso rispetto al DS1307 utilizzato nel progetto precedente.
  • DHT22 sensore temperatura e umidità al posto del DHT11 precedente.
  • LCD 2×16 display con protocollo I2C come per l’RTC.

Sia l’RTC che LCD sono connessi con il protocollo I2C in modo parallelo ai pin SCL/SDA di Arduino. Connessione resa possibile in quanto i due dispositivi hanno indirizzi diversi. Il MAX7219 viene gestito da tre pin rispettivamente per il CLOCK, LOAD, DATAIN. Quindi solo 5 pin per gestire la parte più complessa del progetto. Il DHT22 si interfaccia con il protocollo WIRE su un solo pin. 4 pin infine per gestire l’accensione dei led decadi. 

LOGICA DI PROGRAMMAZIONE

Lo sketch (quasi 11k) comprende le librerie LCD_I2C per il display e la libreria LEDCONTROLGV per la gestione del MAX7219. Questa libreria scaricata in origine da internet, è stata succesivamente modificata dal sottoscritto. Il DHT22 viene gestito da una sua libreria specifica. L’RTC non è gestito da nessuna libreria ma utilizza il protocollo WIRE per accedere ai registri interni sia in lettura che in scrittura. Questo dispositivo necessita di un settaggio iniziale per impostare i valori della data e dell’orario. Una pila mantiene i valori anche a sistema spento. Inoltre possiede anche un sensore di temperatura non utilizzato in questo progetto.

E’ charo che, anche se rispetto al precedente DS1307, il DS3231 è più preciso rimane comunque la necessità (vedi ora legale/solare) di modificare i valori o di impostarli inizialmente. Due possono essere le soluzioni: caricare uno sketch per l’aggiornamento dei valori e poi ricaricare lo sketch principale oppure rendere rimovibile il dispositivo per connetterlo separatamente e aggiornare il valori con uno sketch apposito.

Invece c’è una terza soluzione che risolve (a mio parere) “capra e cavoli”: inserire nello sketch del progetto una programmazione iniziale per l’aggiornamento dei valori. Nello sketch ciò è possibile via seriale sfruttando la connessione USB di Arduino_NANO. Quando si vuole aggiornare i valori è sufficiente connettere ad un PC via USB con un Hyper_Terminal (o analogo) che “vede” la porta seriale di Arduino. Il messaggio che appare dopo la connessione invita a premere in tasto qualsiasi entro 3 secondi e in caso contrario lo sketch ignora questa connessione. Viceversa si avvia un processo di introduzione dati per l’ora e la data e al termine lo sketch avvia il processo normale. Quindi se non si ha la necessità di modificare i valori non è necessario connettere il tutto al PC. Si può solo notare un certo rallentamento all’avvio prima di vedere led e display funzionanti.

Vediamo adesso come è stata risolta l’accensione dei led giorni/mesi/settimana. Il MAX7219 è un ottimo dispositivo per la gestione sia di led che di display a 7 segmenti o matrici 8×8 o 7×5. Al massimo 8 display 7 segmenti per chip o un solo display a matrice. Alleggerisce parecchio la gestione di questi dispositivi soprattutto per la gestione del multiplexing gestita in modo autonomo. E non sono necessarie resistenze tra le uscite del chip e i led. Ed è possibile variare anche la luminosità.

Lo schema elettrico fornisce l’insieme delle connessioni dei led al chip come segue:

Il chip dispone di un registro relativo alla gestione degli otto segmenti A/G + DP di ogni display a 7 segmenti con la seguente configurazione: DP-A-B-C-D-E-F-G (DP ha peso 128, G ha peso 1). configurando opportunamente i bit si può configurare un numero (da “0” a “9”) sul display o un carattere da “A” a “F” o un simbolo qualsiasi.

Osservando lo schema elettrico si può notare come sono stati assegnati i led ai rispettivi bit di segmento: poichè si visualizzazione 9 led (giorni e mesi) si è scelto si assegnare i bit DP-A-B-C-D-E al display “0” e i bit DP-A-B-C al display “1”. Così facendo si coprono i 9 led relativi. Idem per quanto riguarda i led dei mesi assegnati rispettivamente al display “2” e “3”. Fa eccezione la codifica della settimana in quanto sono sufficienti 7 led per giorni che vanno da Lunedì (codice “1”) a Domenica (codice “7”) assegnati al display “4”. Rimane allora come passare i valori RTC al chip MAX7219 per la corretta visualizzazione. Ho costruito allora una tabella come segue: (l’ immagine si riferisce solo alla tabella dei giorni).

Aiutandomi con un foglio di EXCEL ho preparato la codifica tenendo presente quanto segue: L’ RTC fornisce i valori del tempo e della data in modo BCD: cioè il valore “13” rappresenta le ore “13” o il giorno “13” o minuti “13” o i secondi “13” (a seconda del registro in esame). Anche il valore “0” è significativo. A questo punto scorporando ogni valore di registro in due parti (byte basso = valori da “0” a “9”, byte alto = valori da “1” a “3”) si ottiene quello che io definisco come “decade” (byte alto) che mi consente di accendere i led della decade, e “pointer” (byte basso) che mi consente di accedere ad un elemento delle tabelle dei giorni e dei mesi. Ogni elemento della tabella (tramite “pointer”) è sua volta composto dal valore dei segmenti che devono essere accesi e dal valore del display di assegnazione. Scorporando questi valori (tipo unsigned int) si ottiene il valore dei bit da inviare al registro segmenti e la codifica del numero del display. Nello sketch si inseriscono tre tabelle (2 di 9 elementi e 1 di sette) con la codifica espressa nella colonna “VALUE” delle tabelle.

Spero di essere stato chiaro: è più facile a parole che a scrivere !!!.

PCB DEL PROGETTO

No ho particolari esperienze nella realizzazione di PCB oltretutto a uso dilettantistico: utilizzo PCBEXPRESS e disegno le piste cercando di evitare incroci e il minor numero di ponticelli. Poi stampo la parte “BOTTOM” su fogli P&P blu con la laser e quindi con pazienza “STIRO” la piastrina di rame che successivamente viene sottoposta all’erosione. I risultati qualche volte  non sono soddisfacenti e devo ricominciare tutto di nuovo.

Questo è il PCB_MAIN dove è alloggiato l’ARDUINO_NANO e il MAX7219. Più i vari connettori per l’ RTC, il display LCD e i connettori per il DHT22, i led decadi, e i connettori per i segmenti e i display.

Quest’ ultimo è il PCB che alloggia tutti i led (giorni,mesi, settimana e led decadi). Rispetto al progetto precedente ho potuto inserire tutti i led in un’unica piastrina.

ALCUNE FOTO IN FASE DI PREPARAZIONE:

 

Si può vedere come sono alloggiati il display LCD, il pcb con i led e (non visibile) il modulo RTC.

 

Nella foto sopra si può notare il modulo RTC e a destra il sensore DHT22. Le connessioni via cavetti sono numerose ma con un pò di pazienza e precisione….si arriva allo scopo.

Infine per “abbellire” il tutto sempre tramite PCBEXPRESS ho stampato l ‘etichetta con le numerazioni e le iniziali dei giorni della settimana a copertura dei led. Ogni led poi è stato racchiuso in una guaina termorestringente affinchè la luce di ogni led non “invada” quello precedente e successivo. Ecco la foto della etichetta. Lo sfondo che appare in rosso è stato stampato poi in bianco e nero. Occorre un pò di pazienza per far coincidere i led con le etichette.

 

Concludo: non ho fatto niente di speciale, come hobbista dilettante non ho specifiche esperienze elettroniche ma soltanto una buona esperienza in programmazione e voglia di sperimentare cose nuove. Spero di essere stato sufficientemente chiaro nella esposizione del progetto. Sono a disposizione per chi volesse approfondire o replicare il progetto.

Scrivetemi su gvsoft75@hotmail.com.

Grazie per l’attenzione e ……alla prossima.

Gvsoft febbraio 2018

 

VOTO
2 commenti
  1. Marcello
    Marcello dice:

    Grazie per avermi accontentato.
    Il tempo purtroppo continua sempre a scorrere e gli orologi ci saranno sempre.
    Ora ti lancio una idea per il prossimo, un orologio con le fasi lunari comodo per gli agricoltori e i pescatori.
    Io non sono ne l’uno ne l’altro ma mi è stato riferito che quei professionisti seguono l’andamento.
    Ancora complimenti per il progetto.
    Saluti Marcello

    Approvazioni

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento