domenica 22 novembre 2020

Un sinottico a LED per sistemi Xpressnet© con Arduino Nano

Nell' articolo precedente è stato descritto un progetto con Arduino Nano per realizzare in pannello di controllo per scambi a pulsanti, basato sul protocollo Xpressnet© tipico dei sistemi Roco, Lenz etc. Molto spesso la domanda successiva alla realizzazione di un pannello del genere è: come posso visualizzare la posizione dello scambio ?
Le soluzioni sono molteplici: se lo scambio è azionato da un interruttore/deviatore, molti utilizzano la seconda via dello stesso per pilotare una coppia di led, altri invece (ed è il metodo più sicuro e affidabile, analogo a ciò che succede nella realtà) utilizzano la posizione fisica degli aghi dello scambio derivando il segnale da interruttori posizionati in prossimità del motore o direttamente utilizzando l' alimentazione del cuore (per sistemi DCC prendendo l' informazione direttamente dallo scambio utilizzando la polarizzazione del cuore come indicato qui --> https://model-railroad-hobbyist.com/node/25604?page=1)
In questo modo infatti l' informazione della posizione dello scambio è effettivamente derivata dal campo. Il grande svantaggio di questa tecnica è l' elevato numero di fili da far circolare, cosa ancor più complicata se l' impianto è stato già realizzato.
In questo articolo descrivo un metodo un po' alternativo, ovvero si tratta di un dispositivo che si collega come un qualsiasi device Xpressnet© che pilota una matrice di led associati a coppie ai vari scambi dell'impianto, vedremo nel corso dell' articolo che anche con Arduino Nano si possono pilotare un gran numero di led con il metodo "charlieplexing". Ciò si presta molto bene per impianti che sono stati già realizzati e dotati decoder DCC per l'azionamento dei deviatoi.

Il progetto utilizza il circuito con Arduino presentato nel precedente articolo, ad esso va affiancata la matrice a led che come vedremo è stata realizzata con un PCB a parte. A differenza del precedente, in questo progetto Arduino invece che inviarli, "ascolta" i comandi che passano sul bus Xpressnet©: quando Arduino "vede" passare un comando scambi, piloterà in modo adeguato (dritto/deviato) il led corrispondente all'indirizzo dello scambio stesso.
I vantaggi di un sistema del genere stanno nel fatto che il circuito mostra la posizione dello scambio in maniera indipendente dalla sorgente che ha generato il comando; in pratica se lo scambio è stato posizionato da un multimouse, da un pannello XTCO o da un software come RocRail©, il circuito indicherà sempre correttamente la posizione dettata dall' ultimo comando ricevuto.
Ovviamente tutto ciò funziona in un impianto che prevede il solo azionamento DCC dei deviatoi ed è altrettando ovvio che presuppone il corretto funzionamento del motore-aghi, visto che la posizione dello scambio è indicata basandosi sui comandi inviati e non rilevando la posizione fisica (metodo, come ho avuto modo di dire all'inizio, più sicuro, affidabile e aderente alla realtà).
Il grande vantaggio della soluzione presentata è come sempre il fatto che basta collegare il dispositivo come un normale device Xpressnet© senza alcun bisogno di cablare nuovi fili, il progetto è quindi indicato per impianti già costruiti di cui si vuole dotare di un'indicazione ottica dei deviatoi.
Come anticipato, viene utilizzata la tecnica "Charlieplexing" per pilotare i led, essa si basa sul fatto che un microcontrollore può dinamicamente cambiare lo stato dei pin in input/output/3-state; ciò rende possibile alimentare più led cambiando ciclicamente lo stato di pochi pin. Tale metodo fu ideato nel '95 da Charlie Allen, un progettista della Maxim, e da qui il nome del metodo. Esistono molti articoli in rete che ben descrivono questo metodo, vi rimando a questi per capire più approfonditamente come funziona questa tecnica.

Brevemente, il metodo usa un certo numero di pin (nel mio caso 6) per pilotare una matrice di led. La formula che lega il pin ai led è:

Nled = Npin * (Npin - 1)

dove Npin è numero di pin utilizzati; con 6 pin è quindi possibile gestire 30 led! Lo schema della matrice di led è il seguente:


Anche per questo progetto ho disegnato un circuito stampato per la matrice a led:




Il connettore J1 dello schema va collegato pin-to-pin al connettore P4 del circuito presentato nell' articolo precedente.

Lo sketch è stato pensato per poter pilotare una matrice di 30 led, quindi 15 coppie e di conseguenza può visualizzare lo stato di 15 scambi con led dritto/deviato. Con semplici modifiche e studiando un po' la tecnica del charlieplexing è possibile aumentare il numero di led da pilotare.
La variabile:
#define npins 6

definisce il numero di pin gestiti da Arduino, a seconda delle esigenze è possibile quindi assegnare il valore desiderato.
Come i tutti i miei progetti basati su Xpressnet©, anche questo utilizza le librerie di Philipp Gahtow (http://pgahtow.de), utilizzabili gratuitamente ma soltanto esclusivamente per usi privati e non commerciali.
Nel codice l' indirizzo della periferica Xpressnet è cablato nella variabile:

#define XNetAddress 28 //Adress on XpressNet bus

che ha valore 28, se si hanno altre periferiche con lo stesso indirizzo sul bus Xnet, questo valore va cambiato.
Arduino memorizza in EEPROM lo stato della matrice, sicchè ad ogni accensione viene caricata posizione corrente dei deviatoi, per questo è molto importante che il dispositivo sia sempre collegato alla centrale DCC in modo da avere sempre la configurazione dei deviatoi aggiornata all' effettivo stato degli aghi; tuttavia è possibile azzerare la memoria: tenendo premuto il pulsante e alimentando il dispositivo, la memoria viene cancellata. 
I pin 11 e 12 sono utilizzati per una seriale sofware di servizio (tramite la libreria SoftwareSerial.h e un adattatore HW RS232-USB) utile a leggere la configurazione dei pin. Le righe corrispondenti possono essere commentate una volta terminata la fase di debug/configurazione.
Qui di seguito una foto del prototipo:







Per chi fosse interessato ai files gerber per la realizzazione del PCB ne faccia richiesta tramite il modulo di contatto del blog in Home Page, riceverete un link ai files necessari.