Quando per esigenze di scena o semplicemente di percorso nel nostro tracciato ferroviario si viene a creare un cappio di ritorno, il nostro sistema digitale rileverà necessariamente un corto circuito quano un rotabile lo impegnerà.
Questo succede perchè una fase (in digitale non si ragiona in poitivo-negativo) del segnale DCC vene in contatto con l'altra quando il rotabile raggiunge il deviatoio che crea il loop.
Per poter gestire questo evento straordinario bisogna innanzitutto a livello di cablaggio isolare completamente la tratta del loop dal deviatoio mediante scarpette isolanti. L'azione da svolgere è semplicemente quella di invertire le due fasi tra loro quando il rotabile è completamente nel tratto sezionato.
Esistono numerosi dispositivi che svolgono questa funzione automaticamente il più famoso è il Lenz LK-200.
In questo articolo tuttavia illustrerò un metodo per gestire i loop in maniera totalmente automatizzata mediante Arduino.
Le principali funzionalità del sistema sono:
Comando dello scambio motorizzato mediante servocomando.
Rilevazione dell'occupazione del loop mediante barriera IR
Possibilità di utilizzare pulsanti esterni per movimentare il deviatoio.
Possibilità di utilizzare il DCC per movimentare il deviatoio.
Il principio di funzionamento è semplicissimo. Quando la barriera IR viene interrotta (quindi il treno stà ancora transitando) il sistema attenda che la barriera venga liberata (quindi il treno è completamente nel loop). Dopo un ritardo impostabile il sistema predispone il deviatoio per l'uscita al loop e commuta un relè che inverte le fasi del segnale DCC.
Mediante pulsanti esterni o mediante un comando DCC è quindi possibile scegliere il verso di percorrenza nel loop.
Ecco un piccolo video per illustrare il funzionamento del sistema
Nel precedente post ho tentato di interfacciare Arduino con RocRail per poter utilizzare gli ingressi come ingressi di retroazione.
Si sa, l'appetito vien mangiando, quindi ho deciso di effettuare alcune prove per permettere ad Arduino di dialogare direttamente con una command station dotata di interfaccia Xpressnet. Nel mio caso la scelta è ricaduta sul Multimaus Roco dotato di booster 10764.
Una piccola considerazione sui layer più bassi del protocollo Xpressnet. Innanzitutto il layer fisico è costituito dallo standard EIA RS485, in modalità half duplex e configurazione master-slave, quindi la trasmissione può avvenire in modo bidirezionale da e verso il master ma non contemporanamente.
Il master è costituito dal multimaus Roco collegato alla presa "master" del booster e può esserne presente uno solo in tutta la rete. Gli slave possono essere fino a 31 e collegati in parallelo sulla presa Slave.
Dal sito Lenz è possibile scaricare la piedinatura del cavo di collegamento tra i nodi, tipicamente un RJ11 per gli slave (6P/4C) a 4poli, AeB del segnale RS485 e alimenatzione 12Vcc, oppure un RJ12 per il master (6P/6C) in quanto i due pin in più servono per trasportare il segnale DCC verso il booster.
Fonte: specifiche protocollo scaricabile dal sito LENZ
Passando al layer successivo si nota che Xpressnet adotta una comunicazione a pacchetti con:
1 bit di start - 9bit di dati - 1 bit di stop - nessuna parità
con una velocità di 62,5 Kbps.
Questo è un problema con arduino e poi vedremo il perchè...
HARDWARE
Per quanto riguarda l'hardware ho realizzato il prototipo con un Arduino MEGA, in quanto innanzitutto dotato di 3 UART interne, a differenza degli altri Arduini (UNO, NANO) che ne hanno una sola, quindi è possibile sfruttare la seriale collegata al convertitore di serie come monitor di debug ed utilizzare la prima seriale per collegarci il convertitore RS232-RS485.
L'inrefaccia si realizza mediante un IC MAX485 oppure il più economico SN75176 terminando le linee A e B della RS485 con un resistore da 120Ohm e ricordandosi di collegare il negativo del bus al negativo di Arduino. (ATTENZIONE ALLA POLARITA' sulla spina RJ)
Come dicevo prima la trasmissione con Xpressnet prevede 8 bit di dati, mentre nel core di Arduino è prevista solo una trasmissione ad 8 bit. Per modificare questa limitazione ho utilizzato una modifica al core come descritto nel forum di Arduino e scaricabile da questo link
Una volta estratti i due file hardwareserial.cpp e hardwareserial.h vanno sostituti ai file omonimi in
A questo punto è necessario scaricare il codice sorgente dentro Aarduino e il gioco è fatto.
CLICCA QUI PER SCARICARE IL CODICE SORGENTE
(attualmente in fase beta appena pronto lo renderò disponibile)
Nel video seguente è possibile vedere come si riesca ad intergire con un Multimaus Roco visualizzando ed attiavndo lo stop di emergenza da tutti i dispositivi e ad attivare un deviatoio mediante due pulsanti su Arduino.
Si ringrazia Nicolas Zin per lo scheletro della struttura di comunicazione Xpressnet visionabile e scaricabile dal suo repository presso Github https://github.com/nzin/xpressnet_arduino
Sistemata l'elettronica ho iniziato le prime prove di percorribilità del plastico con convogli completi.
Non ho notato nessun particolare problema all'armamento e al movimento dei deviatoi.
Il test è stato svolto con una E444R Mehano in livrea XMPR titolare di una teoria di vetture X in grigio ardesia di 1 e seconda classe tutte Rivarossi+ vagone letto LIMA.
Il protocollo Xpressnet fu inventato da Lenz per connettere tra loro dispositivi di gestione quali Command Station, palmari, booster moduli feedback ecc. ecc. e si basa sullo standard RS485.
Il protocollo è di pubblico dominio ed è liberamente scaricabile dal seguente link .www.lenzusa.com/1newsite1/Manuals/xpressnet.pdf
Visto che Arduino monta una seriale perchè non sfruttarla per dialogare con un software di gestione plastico per veicolare i segnali di feedback (ad assobimento, a pedale oppure a reed)?
Presto fatto, con poche righe di codice e studiando attentamente il protocollo si riesce a implementare abbastanza facilmente una emulazione del gateway LI 101F Lenz, il quale monitorando costantemente gli ingressi che, nel caso di una board Arduino Uno sono 12 escludendo i due pin 0 e 1 per la seriale, riesce a comunicare a RocRail lo stato dei sensori.
RocRail mappa i sensori a partire dal 512, in quanto da 0 a 511 sono riservati ai feedback posizionali per i deviatoi.
Naturalmente 12 ingressi sono pochini, ma già con una board Mega si hanno a disposizione 54 input di Feedback, oppure utilizzando i modulini di espansione di arriva ad una configurazione performante.
Il modulo ad 8 uscite per articoli elettromagnetici si basa sempre sul chip PCF8574 utilizzato in questo caso per pilotare uno stadio di potenza formato da un transistor TIP in configurazione Darlington.
Di seguito lo schema elettrico. Per chi ne avesse bisogno sono disponibili i file Eagle anche se si tratta di una versione beta, quando avrò terminato il testing i files verranno rilasciati con licenza GPL.
Lo schema è abbastanza semplice e si può notare come integri già una CDU (Capcitor Discharge Unit) con funzione anche di protezione per le bobine dei motori
La scheda ha tre morsettiere, la prima serve naturalmente per collegare i motori, la seconda serve per il collegamento del bus, e la terza per il collegamento dell'alimentazione di attivazione dei motori.
Per dimensionare la resistenza di base Rb ho ipotizzato una corrente di collettore Ic pari a 4A, quindi ricavo il valore di Ib tramite la formula:
Ib=3*Ic/Hfe
Il TIP121 ha un Hfe pari a 1000 quindi:
Ib=3*4/1000=0,012 A
Per calcolare Rb
Rb=(Vdd-Vbe)/Ib
Essendo il transistor in configurazione Darlington la caduta di tensione tra Base ed emettitore Vbe è pari a circa 1,4V quindi:
Rb=(5-1,4)/0,012=360 Ohm
Il PCB è sviluppato a singola faccia per semplificare la realizzazione e presenta gli inevitabili ponticelli.
Lato rame
Lato componenti
La realizzazione non presenta difficoltà particolari, montate i componenti in ordine di altezza per meglio maneggiare la scheda. Questo è il risultato finale