NANO TIMER

Timer da 1 secondo a 199 ore

PREMESSA:

Sono sempre alla ricerca di nuovi dispositivi da provare e sperimentare onde accrescere le mie conoscenze ed esperienze. Così ravanando nel WEB scopro una allettante offerta di 5 board ARDUINO NANO per 15 euro spedizione compresa. Dopo una veloce ricerca per approfondire in cosa consistenva l’offerta, faccio partire l’ordine e dopo 24 ore mi ritrovavo con queste board pronte all’uso.

Cosa sono queste  board ?: semplicemente cloni di ARDUINO UNO con tecnologia SMD racchiusi in una schedina di 15×42 mm. Ritengo un’ottima risorsa per chi, come me, ha realizzato diversi progetti con l’ATMEGA 328 ma costretto ogni volta a preparare il circuito attorno al micro: quarzo e predisposizione per il caricamento dello sketch. Con questa board invece, oltre al vantaggio di avere già tutto predisposto, c’è quello dello spazio. Se poi si vuole essere liberi è sufficiente montarlo su due connettori da 15 pin per poterlo estrarre quando è necessario. E se il progetto non richiede potenza di esercizio una pila da 9V è sufficiente.

Queste le caretteristiche:

  • Processore ATMGA 328 smd con bootloader precaricato
  • Convertitore USB/RS232 CH340G
  • Led power, led TX/RX, led pin 13
  • Tutti i pin digitali e PWM come Arduino UNO
  • 8 pin analogici (A0/A7) due in più di Arduino
  • Alimentazione da USB oppure da VIN 12V DC max
  • Pulsante di reset
  • Pin di uscita 5V e 3,3V

Ecco un panoramica:

La compatibilità è completa e con l’IDE di Arduino 1.8 è sufficiente indicare quale tipo di board viene usata. Alla prima accensione lampeggerà il led 13 grazie al semplice sketch di test precaricato. La connessione USB richiede il drive per il chip CH340G: se la ricerca via WEB è negativa si può sempre scaricare il package e farne il setup.

IL PROGETTO DEL NANO_TIMER:

E’ proprio grazie a questa board che sono riuscito a contenere l’hardware (pila compresa) in una scatola come questa:

In questa seconda foto l’ interno della scatola: per la board nano  ho preferito produrre un pcb per il suo alloggiamento in modo da estrarla in caso di necessità.

Si può notare sulla parte destra della  board un connettore (in fase di assemblaggio) con una specie di serigrafia specifica per connettere l’ altro pcb che con il resto dei componenti del sistema.

CARATTERISTICHE DEL PROGETTO:

Questo progetto ha lo scopo di produrre in timer autonomo utilizzando però componenti di recupero tra i tanti che ancora giacciono nei miei cassetti, ma con queste caratteristiche:

  • Impostazione del tempo tramite un ENCODER digitale
  • Visualizzazione del tempo con display 7 segmenti
  • Led specifici per indicare quale tempo di timer è in atto.
  • Led di stop alla fine del tempo
  • Alimentazione autonoma tramite pila

LA COMPONENTISTICA:

IL DISPLAY:

E’ un modello particolare: trattasi di un residuo proveniente da vecchissimi PC quando questi avevano un display per visualizzare la frequenza: alcuni di questi sono composti da 3 display in unico package con in comune i sette segmenti e 3 pin per il pilotaggio degli anodi (sono ad anodo comune). Altri come quello usato, hanno 2 display più un terzo utile solo per accendere il numero “1”. E in effetti i due segmenti che compongono il numero sono pilotati dal segmento “DP” del secondo display.  E anche questi sono ad anodo comune. Il vantaggio di questi display è quello di avere soltanto sette pin per segmenti e due/tre per gli anodi: quindi dal punto di vista progettuale ottimi rispetto ad avere tre display separati che costringono a connessioni complesse.

La gestione di questi display è devoluta al solito chip MAX7219 (pluriadoperato nei miei progetti). L’unico problema è che questo chip gestisce solo display a CATODO COMUNE mentre quello usato è ad ANODO COMUNE.  Può essere una complicazione ma sono sufficienti due accorgimenti per superare il problema:

  1.  Invertire i segnali di pilotaggio con un hex inverter (74LS04) tra le uscite del chip e gli ingressi dei display e quindi via hardware.
  2. Invertire i valori da inviare ai display via software: a questo ci pensa la libreria usata che gestisce i due tipi di display.

L’ENCODER DIGITALE:

La scelta di questo tipo di dispositivo nasce dall’avere un sistema semplice per impostare il tempo nel display: si poteva, certo, ricorrere ad un sistema di pulsanti ( i pin usati sono nello stesso numero) ma, come ho detto all’inizio, mi piace sperimantare cose nuove.

Non mi dilungo sulle caratteristiche di questo dispositivo: nel web si trova tutto quello che c’è da sapere (meglio di quanto possa fare io stesso) insieme al relativo software. Il dispositivo è composto da un perno rotante che fa anche da pulsante e da due pin che possiamo chiamare “A” e “B” oltre ad un pin “P” che identifica il pulsante e un pin centrale connesso a massa. La direzione di rotazione viene rilevata da software in base al treno di impulsi emessi durante la rotazione. Alcuni software agiscono tramite interrupt mentre altri con routine apposite rilasciano il tipo di rotazione “+” se positiva (senso orario)  “-” se negativa (senso antiorario) oltre al segnale dell’avvenuta pressione sul perno.  Nello sketch il perno (pulsante) è connesso in PULL_UP e se premuto rilascia un segnale a “0” logico.

Questo è il modello dell’encoder usato:

SCHEMA ELETTRICO:

Ho diviso lo schema in due parti per una migliore visione: la prima parte fa comunque riferimento ad uno schema classico con ATMEGA328: non ci sono differenze con ARDUINO NANO in quanto i pin sono gli stessi.

Pulsante di reset, quarzo e connessioni USB per RTX/TX (ed eventale alimentazione) sono già presenti su ARDUINO NANO. Le altre connessioni sono relative ai 4 led rispettivamente per i “secondi”, per i “minuti” e per le “ore”: il quarto led si accende quando è stato raggiunto il tempo prefissato.  Durante il funzionamento il led selezionato lampeggia alla cadenza di un secondo. Le ultime tre connessioni (in alto verso destra) sono relative al chip MAX7219 come nello schema seguente:

In questo secondi schema si possono vedere le connessioni del chip MAX7219 dove i segnali DG0/DG1 vengono invertiti per essere connessi agli anodi dei display, mentre i segnali  A/G+DP vanno i rispettivi A/G+DP del display. Il display raffigurato è di tipo standard.

PCB E RISULTATO FINALE:

Nelle seguenti figure si può vedere: la board completa e il suo retro:

Di seguito il pcb singola faccia e prodotto interamente a mano con PCBEXPRESS.

SPECIFICHE DI FUNZIONAMENTO:

Lo sketch è relativamente semplice e, ritengo, sufficientemente commentato. Il funzionamento del dispositivo si può riassumere come segue:

All’ atto dell’ accensione il display è spento e si accende (dopo qualche secondo) il led (verde) dei secondi: premendo il perno dell’encoder si passa ai minuti o alle ore accendendo il rispettivo led. Il movimento è ciclico per cui dalle ore si passa ai minuti ai secondi ecc. Scelto il tipo di timer girando semplicemente il perno (nella foto è provvisto di manopolina) in una direzione o nell’altra si imposta il tempo in più o in meno, fino a 199 (secondi, minuti, ore). Per avviare si preme semplicemente il perno. Il conteggio inizia facendo lameggiare il led impostato. Al termine del tempo impostato si accenderà il led rosso ed il sistema rimane in attesa di un’ altra impostazione premendo il perno.

Per quanto riguarda lo sketch: la gestione dei display e conseguente gestione del max7219 viene effettuata da una specie di “libreria” sviluppata dal sottoscritto in grado di trattare sia i display (7 seg) a catodo comune che quelli ad anodo comune  e le matrici 8×8 e 7×5. Il timer è invece gestito da una apposita libreria: swRTC (solo file .h) autore Leonardo Miliani e scaricata dal suo sito.

CONCLUSIONI:

Ho sempre detto in tutti i miei articoli che ogni progetto è fine a se stesso e a chi lo ha progettato e costruito: pertanto è suscettibile di modifiche e miglioramenti sempre in base alle proprie esigenze e punti di vista. Comunque chi fosse interessato al progetto (amche solo a scopo didattico) può sempre richiedermi il tutto al mio indirizzo: gvsoft75@hotmail.com.

Grazie per l’ attenzione.

gvsoft75 Settembre 2017