Il bus Loconet
Il bus Loconet fu sviluppato inizialmente da Digitrax. Loconet è un'architettura di rete basata su CSMA/CD (Carrier Sense Multiple Access/Collision Detect), similare per funzionamento fisico alla classica Ethernet.
Carrier Sense significa che ogni nodo connesso alla rete riesce a leggere il pacchetto in transito sulla rete stessa, ogni nodo riesce a stabilire se la rete è occupata o meno. Multiple access significa che ogni nodo può generare o ricevere pacchetti, quindi niente polling o master/slave.
Collision Detect significa che quando due nodi tentano di strasmettere allo stesso tempo creando una collisione possono risolvere la situazione in autonomia ritrasmettendo i pacchetti.
Loconet è ottimizzata per avere meno di una collisione ogni 300 messaggi al 100% di sfruttamento della rete, meno di quanto Ethernet permetta.
I collegamenti al bus avvengono mediante spine e cavi RJ12 medante lo schema sottostante
Come si può osservare i segnali trasportati dal cavo sono ridondanti e speculari. I segnali di Rail Sync trasportano il segnale DCC ognuno in opposizione di fase all'altro. per eventuali dispositivi che lo necessitassero, ad esempio i booster.In questo caso si parla di bus Loconet-B Se questo segnale non è necesario su questi pin e' possibile trasportare una tensione di alimentazione per alimentare i dispositivi, tipicamente 12VDC. In questo caso si parla di Loconet-T.
Arduino e Loconet
In nostro soccorso vengono in soccorso di nuovo le librerie MRWWA scaricabili e consultabili all'indirizzo https://github.com/mrrwa, le quali contengono un intero framework per gestire al meglio la rete Loconet. L'idea è quella di realizzare una scheda ad 8 ingressi da utilizzare come feedback o altro da collegare al bus. La scelta è caduta su Arduino Nano, data la compattezza e la relativa economicità. Per maggiori informazioni consultare la scheda a questo indirizzo. https://www.arduino.cc/en/Main/ArduinoBoardNano. Volutamente questa versione non contiene nessun tipo di sensore, che dovrà essere implementato esternamente. In futuro sicuramente prevederò però una scheda con già i sensori integrati.
Innanzitutto occorre realizzare una piccola interfaccia per poter permettere al nostro Arduino di leggere e trasmettere i segnali disponibili su bus Loconet. Di seguito lo schema elettrico della scheda.
Da notare la presenza di un jumper per selezionare l'alimentazione da bus Loconet oppure esterna mediante i morsetti. In questo caso si raccomanda di utilizzare tensioni di alimentazione compatibili con la scheda Arduino Micro quindi da 7 a 12V DC.
AGGIORNAMENTO:
Ho realizzato una nuova board con una sezione di alimentazione stabilizzata per l'alimentazione d Arduino in modo da non stressare in modo anomalo il suo stabilizzatore interno.
AGGIORNAMENTO:
Ho realizzato una nuova board con una sezione di alimentazione stabilizzata per l'alimentazione d Arduino in modo da non stressare in modo anomalo il suo stabilizzatore interno.
Di seguito il PCB, come si può notare abbastanza compatto.
Una volta terminato il montaggio questo dovrebbe essere il risultato finale.
ATTENZIONE
Giustamente mi è stato fatto notare che la il NANO in foto è inserito al contrario di come dovrebbe essere. In effetti la foto è riferita alla primissima versione del PCB quando venivano usati gli ingressi analogici. Appena possibile verrà pubblicata la foto corretta. In ogni caso se avete la board con revisione 2.0 o superiore LA PORTA USB DEL NANO DEVE ESSERE ORIENTATA VERSO IL BORDO DEL PCB.
Si ringrazia per il testing e per la realizzazione del prototipo di interfaccia Pietro Russo e Alessandro B.
Si ringrazia inoltre Atonino (Antogar) per lo sviluppo dello Sketch da caricare su Arduino.
Di seguito i link per scaricare i files:
Schema elettrico formato EAGLE Download VERSIONE 4.0
PCB formato EAGLE Download VERSIONE 4.0
Di seguito i link per scaricare i files:
Schema elettrico formato EAGLE Download VERSIONE 4.0
PCB formato EAGLE Download VERSIONE 4.0
Sketch da caricare in Arduino Download VERSIONE 4.0
Un breve video per dimostrare il funzionamento sia su PC che collegata ad una Intellibox.
A presto!
Un breve video per dimostrare il funzionamento sia su PC che collegata ad una Intellibox.
A presto!
Ciao Stefano ... GRANDE!!! Come sempre! :oP
RispondiEliminaSalve ma dove posso acquistare la scheda completa ? grazie
RispondiEliminaHello,
RispondiEliminaCan you please let me know how did you configure in Rocrail and is this compatible with roco z21 white.
ciao non capisco lo schema che riguarda l'alimentazione....se volessi usare l'alimentazione trasmessa dal bus loconet servono tutti quei condensatori e il componente IC2? o si possono eliminare e alimentare solo arduino con i 5 volt? o arduino deve essere alimentato tramite loconet anche lui?
RispondiEliminaBuongiorno Giacomo, la scheda può essere alimentata sia da bus Loconet, che ha una tensione tipicamente di 12v, oppure da una fonte esterna max 24vcc min 9 vcc.
RispondiEliminaLa circuiteria di alimentazione serve per regolare la tensione ai 5vcc necessari per far funzionare Arduino. Volendo puoi alimentare direttamente arduino tramite il pin Vin e Gnd ma ti consiglio di non superare i 12vcc. Attenzione che in questi pin non vi è nessuna protezione.
ciao Stefano. ho costruito il tutto e sembra che funzioni...ma collegando il tutto a Rocrail i sensori di assorbimento non restano attivi in modo fisso, il sensore lampeggia. è un problema di impostazioni di Rocrail, della scheda loconet, del sensore di assorbimento, o di chissà che cosa? io uso una centrale dcc++ , loconet collegato al pc tramite interfaccia di oscilloscopio.it, la loc a-310. magari rocrail funziona ugualmente se il sensore non è fisso....non ho ancora provato un circuito di prova. grazie giacomo
RispondiEliminada prove fatte sembra che il problema siano i sensori di assorbimento..perchè collegando a massa i vari pin di arduino il sensore su rocrail si accende normalmente.....sensori su internet sono vari e con valori diversi delle resistenze.....ne avete uno già collaudato?
RispondiEliminaGiacomo, in effetti volevo scriverti di fare la prova che hai poi effettivamente fatto in quanto ho avuto già richieste di chiarimenti in tal senso. Io uso con relativa soddisfazione (non sono perfetti ma non mi posso lamentare) i sensori di Paco DC4. Maggiori informazioni le puoi trovare a questo link: https://usuaris.tinet.cat/fmco/PpP_en.html
RispondiEliminaper ora grazie ...al link non trovo però lo schema di montaggio dei sensori
RispondiEliminain caso si volessero usare come sensori dei contatto hall magnetici il tutto funziona solo se il magnete passa lentamente sul sensore...ma con la velocità poco più alta del treno il sensore funziona( controllato con un led in parallelo si accende per un attimo) ma arduino ignora il segnale...come si può eliminare questo problema? dallo sketch o magari mettendo un condensatore insieme al sensore hall.....non ho idea
RispondiEliminaQuesto commento è stato eliminato dall'autore.
RispondiEliminabuongiorno stefano ho un problema con dei sensori a infrarossi....il sensore infrarossi rileva il treno che passa ma la scheda arduino trasmette il segnale solo se il treno passa lentamente sennò l'IR si accende ma arduino ignora la cosa e non trasmette nulla su loconet....è un problema del programma su arduino o no? ho provato un altro codice su altro sito che avevi sempre tu commentato e quello va molto meglio come sensibilità ma ha un altro problema: quando alimento i binari col segnale dcc 3 sensori iniziano a mandare l'occupazione su arduino anche se i sensori IR restano sempre spenti.....sembra ci sia tipo una interferenza magnetica tra fili lei binari e quelli del segnale dei sensori....infatti senza alimentare i binari funzuonatutto bene.....spero di essere stato chiaro....grazie
RispondiEliminaNel codice esiste un timer che invia i segnali solo se rimangono occupati per un certo tempo proprio per evitare i problemi che riscontri di falsi invii. Potresti tentare di abbassare questo tempo per arrivare ad una condizione di compromesso.
RispondiEliminaè questa la parte del codice del timer?
RispondiEliminaunsigned long interval = 1500; // delay between consecutive input checks, 1.5sec
niente non riesco a venirne a capo....
RispondiElimina