Il plastico modulare di Stefano

  1.  Storicamente nel modellismo ferroviario il movimento degli aghi degli scambi elettricamente avviene mediante un elettromagnete che attrae verso di se un appendice metallica che permette il passaggio dallo stato di corretto tracciato a deviata.

    Di conseguenza molti decoder digitali DCC hanno seguito questa strada permettendo il pilotaggio di questa tipologia di deviatoio detto a "tre fili" o "elettromagnetico". un filo è il segnale comune (può essere il positivo, il negativo, oppure una "fase" di un sistema a corrente alternata") e altri due fili che rispettivamente permettono di comandare il tracciato corretto o deviato. A seconda della polarità del segnale "comune" questi due assumono la polarità inversa se il sistema è a corrente continua, oppure forniscono l'altra fase se alternato.

    Nell'immagine sottostante si può notare questo tipo di collegamento.



    Tuttavia nel corso degli anni sono apparsi sul mercato una tipologia di motori molto performante chiamati a "movimento lento", ovvero dove il movimento degli aghi è generalmente effettuato mediante un vero e proprio motorino che mediante opportuni rinvii e viti senza fine permette di muovere gli aghi con un movimento realisticamente appunto "lento", come nella realtà. Apprtengono a questa tipologia di motori i famosissimi Tortoise oppure i Cobalt. Anche i Tillig funzionano con questa tipologia di movimento. Alcuni integrano al loro interno oltre a miscroswitch di posizione anche un vero e proprio decoder DCC

    Motore lento Cobalt di DCC Concepts



    Motore Lento Tortoise


    Motore Tillig


    Ma alla luce di quanto abbiamo visto per i normali decoder, come possono essere pilotati motori di questo tipo?

    Questo motori vengono pilotati mediante due soli fili e funzionano solo in corrente continua, e nello specifico per invertire la posizione degli aghi basta invertire la polarità ai capi dei due fili.
    Viene da se che molti decoder standard non riescono fisicamente a pilotare motori di questo tipo. quindi analizziamo cosa offre il mercato.
    Premesso che esistono un'infinità di decoder più o meno artigianali oppure progetti DIY (Do it Yourself - fattelo da solo) oppure anche commerciale già in grado di pilotare questi motori che escluderemo da questo articolo concentrandoci su uno dei decoder più diffusi nel nostro paese ovvero l'ESU SwitchPilot.

    Questo decoder permette di pilotare 4 deviatoi mediante 8 uscite raggruppate a gruppi di due (corretto deviato). Quindi in questa modalità non sarebbe in grado di pilotare scambi lenti. ESU corre in soccorso permettendo di accoppiare la SwitchPilot Extension al decoder la quale fornisce due relè aggiuntivi per ogni uscita scambio e come riportato nel manuale a pag.13 fig. 6.




    Quindi problema risolto! Ma....... in una configurazione di questo tipo viene sempre fornita tensione al motore in un senso o nell'altro.. quersto è assolutamente deleterio per motori che non hanno finecorsa tipo i KATO Unitrack,Inoltre il costo di decoder+extension comincia a farsi importante in un budget per un plastico....

    Ma non tutto è perduto.... E' possibile realizzare mediante una manciata di componenti di facilissima reperibilità una sorta di interfaccia da collegare direttamente sui morsetti di uscita dello SwitchPilot che fornisce un segnale in corrente continua di polarità diretta o inversa a seconda di quale uscita è selezionata dal decoder stesso. Inoltre se si programma tramite CV il funzionamento di tipo impulsivo  quando nessuna delle due uscite è attiva non si avrà tensione ai due morsetti salvaguardando il motore stesso.
    Qui sotto un semplicissimo schema basato su due Transistor Darlington PNP tipo TIP127 e due resistenze da 10 Kohm e niente altro. Viene realizzata una configurazione a "mezzo Ponte ad H"

    In un prossimo articolo vedremo come realizzare questa interfaccia.
    A presto!

  2. Tempo fa acquistai su Ebay una simpatica lastrina in fotoincisione realizzata dal bravissimo Marco Camatarri per ricavare tre bellissimi Piaggio Apecar in scala N. 


    La lastrina è in alpacca da 0,3 mm e fu distribuita a suo tempo a marchio Rail9mm ad oggi non piu' esistente. Tuttavia la lastrina alla data di stesura del presente articolo è ancora acquistabile su Ebay cercandola tra gli articoli in vendita di Marco, qui il link diretto all'oggetto.

    La lastrina permette di realizzare tre versioni differenti di questo simpatico veicolo, il Classic, il Cross e il Country., completi di cassone aperto.

    Il montaggio non presenta particolari difficoltà ed è alla portata di chiunque abbia già qualche esperienza di montaggio di fotoincisioni. Alcuni particolari minuti (specchietti, motore, paraurti,)possono nel caso essere montati anche con cianoacrilato e ritenuti troppo piccoli per procedere con la saldatura. Allego fotografie del risultato del montaggio.

    Il corpo cabina e il telaio sono ricavati da un solo pezzo da ripiegare più volte, la ruota anteriore si ottiene saldando insieme due semiruote come si vede dall'ultima foto.





    Non rimane quindi che costruire il cassone piegando le sponde verso l'interno e saldarlo in sede. quindi fissare specchi paraurti posteriori e imitazione del motore.

    Nella versione Cross sono presenti anche il paraurti anteriore e la mascherina aggiuntiva con i fari.
















    Devo dire che questo kit è molto simpatico, inoltre mi sono divertito molto a montarlo,

    A presto!

  3. Dopo la pubblicazione dell'ottimo articolo sulla costruzione del decoder DCC sonoro procediamo al montaggio con un semplice tutorial.
    I componenti da utilizzare sono di facile reperibilità, in foto tutto il necessario per il montaggio della scheda

    Componenti necessari al montaggio del decoder sonoro.


    Per comodità iniziamo dal montaggio dei componenti passivi, nella fattispecie resistenze e semiconduttori. 
    Iniziamo a montare le due resistenze da 1 KOhm R1 e R5, le due resistenze da 10 KOhm R2 e R3
    il diodo D1 1N4148. Prestare attenzione ad orientare correttamente la banda nera di quest'ultimo come riportato sul PCB.








    A questo punto procediamo con il montaggio del ponte raddrizzatore di tipo B80R facendo attenzione a orientare correttamente le polarità, quindi si procede con il micropulsante e quindi lo zoccolo per IC da 8 pin






    Quindi risulta conveniente le zoccolature per Arduino e il modulo MP3, i morsetti di alimentazione e segnale DCC e l'integrato 7805



    Non rimane quindi che montare i due elettrolitici ed il piccolo condensatore poliestere. Fare attenzione nel caso degli elettrolitici alla polarità , chiaramente indicata anche sul PCB e a scegliere modelli da 35V in su. Dopodichè si procede al montaggio delle pin strip.



    La scheda risulta a questo punto completamente montata. Procediamo con un breve collaudo prima di inserire i componenti attivi al loro posto

    Colleghiamo la sorgente di alimentazione alla morsettiera indicata come Power e il segnale DCC proveniente dai binari alla morsettiera indicata come DCC



    Con un tester a questo munto misuratela tensione sui pin gnd e 5V delle piazzole dedicate al collegamento I2c, se trovate i canonici 5Vcc allora avete montato tutto correttemente epotrete installare tutti gli altri dipositivi!




    Proseguite quindi con il caricamento dello sketch in Arduino e dei suoni nel modulo MP3 come indicato nel precedente articolo e buon divertimento!

  4. Aggiungiamo il sonoro al nostro impianto: Decoder DCC con modulo MP3

     Molti plastici ferroviari, casalinghi e/o di associazioni, sono delle vere e proprie realtà in miniatura, ricchi di particolari e realizzazioni di grande realismo. Nell' ammirarli anche staticamente, o magari durante un lento procedere di un treno regionale o il transito di un intercity, tutti ci immaginiamo di sentire una campanella leopolder, un annuncio in stazione, insomma... manca solo la parola! 😉

    Ebbene, la tecnologia oggi ci permette di aggiungere una caratteristica al già tanto ricercato realismo dei plastici ferroviari: il sonoro. Qualche anno fa notai sul sito di Luca Dentella (www.lucadentella.it), noto divulgatore di tecnologia ma anche appassionato di ferrovie in miniatura, un piccolo ed economico player mp3 che potrebbe assolvere allo scopo, il JQ6500-16P.

    Il modulo alloggia il chip principale (che è il vero e proprio player, il JQ6500 appunto) più un piccolo aplificatore audio. Esso inoltre è dotato di 5 ingressi cui poter collegare altrettanti pulsanti per permettere al riproduzione immediata di 5 file audio. La memoria è 2Mbyte. Qui potete trovare un'altra pagina (in inglese) con un'ampia descrizione del modulo.

    Montanto una breadboard quindi, come quella indicato in figura, alimentando il tutto a 5V,


    si può tranquillamente realizzare un circuito che permete di avere alla pressione di un tasto, la riproduzione della campanella di un passaggio a livello, un annuncio in stazione o semplicemente il fischio di una loco in partenza. Con un po' di manualità con l' elettronica lo si può anche interfacciare con un tipico sensore di presenza, barriera infrarossi o pedale di quelli usati sui plastici ferroviari. Il limite è che si possono gestire soltanto 5 suoni da riprodurre.

    Sul come caricare i file sul modulo, vi rimando ai molteplici video che si trovano in rete, in pratica collegado il JQ6500 ad una porta USB del PC tramite il connettore micro-usb on board, questo lo vede come una lettore CD. Lanciando l' applicativo MusicDownload.exe è possibile caricare files i file audio. Per associare correttamente i files ai tasti, è bene nominare questi in modo che rispettino la corretta associazione con essi, quindi i nomi saranno 001.mp3, 002.mp3 e così via...

    C' è da far notare che alcuni store cinesi vendono i moduli JQ6500 senza il software precaricato: l' ottimo Luca ha redatto un articolo (link) molto chiaro sul come recuperare questi moduli, ma anche per questo si trovano molte guide in rete.

    Interfaccia DCC con Arduino

    Fin qui abbiamo descritto un modulo mp3 che permette di riprodurre suoni alla pressione di alcuni tasti. Il JQ6500 ha una interfaccia seriale che permette la gestione di tutte le funzioni tipiche di un player mp3, ovvero start/stop/pausa, gestione del volume, avanzamento rapido, scelta del brano da ripeodurre etc. E come accade nel mondo dei maker, per tali funzioni sono state sviluppate librerie per la gestione del modulo tramite Arduino che rendono semplice la fruizione di tali funzioni.

    La libreria che ho utilizzato è JQ6500_Serial, qui potete trovare una più che esauriente descrizione della stessa.

    Dopo aver quindi sviluppato i decoder per accessori presentati negli articoli precedenti, è stato piuttosto semplice derivare anche lo sketch adatto per realizzare un decoder capace di gestire questo modulo mp3 per poter replicare i suoni tramite comandi DCC. Lo sketch, come i decoder precedenti, fa uso della libreria NmraDcc.h.

    In pratica, realizzando il circuito indicato nello schema (figura successiva) e con lo sketch adatto, il decoder riproduce i suoni precaricati quando dalla centralina DCC vengono inviati comandi per accessori. Il decoder avrà un indirizzo base come un decoder per scambi o segnali, e in base al comando dritto/deviato, manderà in riproduzione i file corrispondente. Un esempio forse sarà più esplicito, se come indirizzo base abbiamo "1" avremo: 

     

    Indirizzo Scambio Comando File riprodotto
    1 dritto 001.mp3
    deviato 002.mp3
    2 dritto 003.mp3
    deviato 004.mp3
    3 dritto 005.mp3
    deviato 006.mp3
    4 dritto 007.mp3
    deviato 008.mp3
    5 dritto 009.mp3
    deviato 010.mp3
    6 dritto 011.mp3
    deviato 012.mp3
    7 dritto 013.mp3
    deviato 014.mp3
    8 dritto 015.mp3
    deviato 016.mp3

    Il decoder non ha un limite per il numero di file da caricare, esso all' accensione identifica il numero dei file memorizzati nel modulo JQ6500 e da lì associa gli indirizzi ai file, in pratica se abbiamo memorizzato 8 files, da 001 a 008, il decoder risponderà agli indirizzi da 1 a 4 secondo la tabella precedente, se invece abbiamo caricato 12 files (da 001 a 012) esso risponderà con indirizzi da 1 a 6 e così via... Il limite è la memoria del modulo JQ6500 che, ricordo, è di 2Mbye.

    Lo schema del decoder è il seguente:

    Il tasto S1 permette di programmare l' indirizzo base: premendo il pulsante il modulo memorizzerà l' l'ultimo indirizzo ricevuto dalla centrale come indirizzo base da cui iniziare ad associare i suoni. Durante la fase di "ascolto" il led sul pin D13 di Arduino lampeggerà. Premere reset quando si intende memorizzare l' indirizzo in EEPROM.

    Il modulo ha di default il volume regolato al massimo, il decoder può cambiare tale valore tramite una CV. La libreria NmraDcc.h infatti permette la gestione delle CV, lo sketch utilizza questa funzionalità per poter regolare il volume: inserendo un valore da 1 a 30 nella CV numero 10 è possibile regolare il volume del decoder.

    I comandi funzionano in modo "on/off" per la riproduzione dei suoni, ciò significa che inviando un comando il suono corrispondente verrà riprodotto, inviando lo stesso comando durante l' esecuzione del file, questo verrà interrotto. Durante la riproduzione di un file tutti i comandi ricevuti, ad eccezione dello stesso comando per interrompere la riproduzione, verranno ignorati.

    All' avvio il decoder mostra sulla seriale tutti i parametri:

    Viene riportato il nome del file, ora e data caricato su Arduino (per rintracciare la versione SW), se la seriale di servizio è attiva, se è stato programmato un indirizzo, altrimenti di default è "1", il numero di file memorizzati sul modulo, e il range di indirizzi cui essi fanno riferimento per essere riprodotti, infine il valore del volume.

    Funzionamento in analogico

    Per riprodurre i suoni non è necessario disporre di una centralina DCC, dallo schema si vede che sono stati previsti punti di collegamento per i pin D3, D4, D5, D6, D7, D10, D11, D12. Tali pin corrispondono all' esecuzione dei files da 001 a 008 nella stessa modalità descritta in precedenza, ovvero portando a GND uno dei pin elencati con un pulsante o sensore di presenza, verrà riprodotto il suono associato; se durante la riproduzione verrà nuovamente portato a GND lo stesso pin il suono verrà interrotto.

    PIN File riprodotto
    D3 001.mp3
    D4 002.mp3
    D5 003.mp3
    D6 004.mp3
    D7 005.mp3
    D10 006.mp3
    D11 007.mp3
    D12 008.mp3

    Attenzione: occorre agire in modalità "pulsante" ovvero con un impulso della durata minore di 1,5 secondi - tale parametro è regolabile nello sketch.

    Il limite è dettato in questo caso dal numero di pin di Arduino Nano: nello sketch sono usati i soli pin digitali D3-D12 (D2 è utilizzato per ricevere i dati DCC, D8 e D9 sono usati per comunicare con il JQ6500, D13 pilota il led di stato), ma si possono facilmente aggiungere anche i pin analogici per aggiungere altri suoni da riprodurre.

    Anche per questo progetto, come di consueto, ho realizzato un PCB dal mio fornitore cinese. Le piastre sono arrivate in 4 settimane e sono di ottima qualità:



    Infine, voglio segnalare un software gratuito, open-source e multipiattaforma che ho usato per generare i files audio: si tratta di Audacity© (https://www.audacityteam.org/), un programma che in pratica si mette in "ascolto" di ciò che viene riprodotto dagli altoparlanti o cuffia del PC per poi essere modificato, tagliato e quindi salvato in formato mp3.

    A presto! 😉

    - antogar


    DOWNLOAD SKETCH PER ARDUINO


    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.


  5. 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 npins6

    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.

  6. Facendo seguito all' articolo in cui ho descritto come pilorare gli scambi con Arduino Nano in un sistema basato sul protocollo Xpressnet©,ho sviluppato il progetto descritto in questo articolo che permette di realizzare un quadro comandi per scambi motorizzati dotati di decoder DCC per accessori.
    Il progetto è semplice, esso si basa su quanto già descritto nell' articolo precedente:




    il circuito permette di azionare gli scambi con indirizzo da 1 a 30 con una coppia di pulsanti normalmente aperti. La connessione dei pulsanti ai connettori P4 e P5 o P6 permetterà di individuare l' indirizzo dello scambio e la modalità di azionamento, dritto o deviato.
    I connettori P5 e P6 rappresentano i comando per dritto (P5 - Straight) e deviato (P6 - Diverged) e ogni contatto è relativo alla prima, seconda e terza decina. Il connettore P4 invece conta le unità.

    Con un esempio facciamo prima: per comandare lo scambio 7 dritto, collego il pulsante fra il primo contatto del connettore P5 - Straight (dritto) e il settimo contatto del connettore delle decine, per comandare lo scambio 14 deviato, collego il pulsante fra il secondo contatto del connettore P6 - Diverged (deviato) e il quarto contatto del connettore delle decine, infine per comandare lo scambio 20 in dritto collego il pulsante fra il pin 2 di P5 e il pin 10 di P4... credo adesso sia chiaro.

    Il progetto utilizza un Arduino Nano, data la semplicità del codice, esso è facilmente applicabile ad Arduino Uno o meglio ancora (vista la quantità di pin) Arduino Mega, con più pin a disposizione il numero di scambi da comandare può aumentare considerevolmente.
    Come negli altri progetti inerenti all' interfaccia Xpressnet© ho fatto uso delle librerie di Philipp Gahtow (http://pgahtow.de) al quale vanno i miei ringraziamenti e che possono essere scaricate a questo indirizzo 


    Se non già installata installare anche la libreria Keypad disponibile nel gestore librerie standard di Arduino.

    Nel codice l' indirizzo della periferica Xpressnet è codificato in una definizione fissa:

    #define XNetAddress 29 //Adress on XpressNet bus

    che ha valore 29, se si hanno altre periferiche con lo stesso indirizzo sul bus Xnet, questo valore va cambiato.

    Lo scketch ha commentate le righe per la seriale di servizio usate per il debug.
    Decommentare queste righe se necessario per avere una visualizzazione sul terminale seriale.
    Se si desidera utilizzare il debug sulla seriale di servizio è necessario dotarsi di un adattare Seriale USB con chip FTDI o similari da collegare ai pin 11 e 12
    In questo caso i dispositivi comandabili diventano 24 e non piu' 30.

    Il funzionamento dello sketch è molto semplice, in effetti c' è la scansione continua di due tastiere associate ai pin dei connettori P4-P5 e P4-P6, viene rilevata la pressione di un tasto ed inviato un comndo di attivazione/disattivazione dello scambio associato al pulsante premuto.
    Lo schema ha  un pulsante collegato al pin A0 per usi futuri, così come il bus I2C (display ?) e due pin A6 e A7 che possono essere associati (nello sketch) ad itinerari precablati.

    Per scaricare lo sketch in Arduino è necessario rimuoverlo dalla scheda in quanto la seriale di default è collegata al MAX485 il quale non permette di effettuare regolarmente il download.

    Anche per questo progetto ho realizzato un PCB dall'ormai mio consueto fornitore cinese, le piastre sono arrivate in 4 settimane e sono di ottima qualità.
    Di seguito una foto del prototipo che ho montato. La versione del PCB che vedete è antecedente allo schema postato ma funzionalmente non ha alcuna differenza.

    Il circuito montato e cablato con Arduino Nano


    A presto!

    Di seguito i link per la realizzazione del progetto




    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.

  7. L'utilizzo dei motori per servo comandi si è molto diffuso anche fra i fermodellisti per comandare scambi e più in generale piccoli automatismi, la diffusione di Arduino  come controllore a basso costo ha dato maggiore impulso a questa tendenza.
    Di progetti in rete per comandare servomotori ce ne sono diversi, in questo articolo ve ne presento uno che ha qualche caratteristica particolare: ogni servomotore può essere comandato da una centrale DCC e anche da un interruttore esterno direttamente connesso ad un pin di Arduino, in altre parole il decoder può essere usato anche senza una centrale DCC. Altra caratteristica è quella di regolare l' angolo di deviata del motore facendo muovere questi lentamente e scegliere la posizione ottimale, in questo modo è possibile regolare finemente la posizione che permette allo scambio di raggiungere la posizione desiderata con una buona precisione una volta montato il motore.
    Il progetto iniziale è stato pensato per i motori servo e tortoise, nella versione presentata è disponibile solo la funzione servo. Lo sketch è derivato da un'idea presente su un forum inglese da un ottimo modellista d'oltremanica, Dave Renshaw, che ringrazio pubblicamente per aver condiviso il programma che ho poi rivisitato aggiungendo alcune funzioni; nel file .ino ci sono i riferimenti delle fonti.
    Lo sketch utilizza la libreria DCC_Decoder.h disponibile a questo link, alla fine dell' articolo è possibile scaricare il file da caricare su Arduino. Esso contiene molti commenti ed è possibile modificarlo a piacimento.Lo schema elettrico è molto semplice, è composto dall' interfaccia DCC che rende disponibile il segnale digitale sul pin D2 di Arduino e da un semplice alimentatore per fornire la tensione ai motori e ad Arduino stesso.


    Come accennato, Arduino pilota i servomotori anche in analogico:  per poter muovere i servo occorre un semplice interruttore on-off (non un deviatore), cioè basta mettere il pin relativo (PAD 1-5) a massa (PAD 6) per cambiare la posizione.
    Per questo decoder ho disegnato un circuito stampato dalle dimensioni contenute: 52x58mm, alla fine dell' articolo sono disponibili i files gerber per la costruzione del PCB.
    All'avvio, collegando il monitor dell' IDE di Arduino alla porta USB di Arduino (velocità 115200), vengono visualizzati i parametri di configurazione, in particolare per ogni motore:
    - L' indirizzo
    - Il pin cui di Arduino cui è connesso il servo
    - Il pin cui collegare lo switch per il comando in analogico
    - L' angolo di delle posizioni dritto/deviata
    - L'ultima posizione memorizzata

    Il decoder all'accensione posiziona i servo secondo l' ultima configurazione salvata, ciò è possibile perchè lo sketch memorizza ogni movimento in EEPROM. Per ripristinare i valori di default basta digitare 'r' dal monitor dell' IDE e premer ENTER. Al riavvio il decoder caricherà la configurazione di default. Tale configurazione è modificabile tramite i valori inseriti nella stringa configData[] seguendo le istruzioni all' interno dello sketch.
    Un'altra caratteristica di questo decoder è lo "scollegamento" software del servo una volta che è stato comandato: in pratica, quando si invia un comando al servo, dopo che questo si è correttamente posizionato lo sketch "scollega" il servo dal in di Arduino conil comando:

    devices[i].servo.detach();

    ciò al fine di evitare i fastidiosi ronzii che possono verificarsi con alcuni modelli di motore. Il "detach time" è impostato a 1,2 secondi con la variabile:

    int ServoDetachTime = 1200;

    Programmazione indirizzo DCC
    L' indirizzo del decoder è l' indirizzo del servo nr.1 (connesso al pin D3), i successivi servomotori avranno indirizzi di valore successivo a questo, ovvero se il servo nr. 1 ha indirizzo 6, gli altri saranno 7, 8, 9, e 10.
    Per poter programmare l'indirizzo occorre eseguire i seguenti passi in DCC mode ovvero con il decoder connesso ad una centrale digitale:
    1. Accendere il decoder
    2. Collegare il segnale DCC della centrale
    3. Premere il pulsante reset di Arduino, premere il pulsante S1, il led al pin 13 si accende
    4. Inviare dalla Centrale DCC un comando scambi con l' indirizzo desiderato, dritto/deviata non è importante.
    5. Premere il pulsante S1
    6. Premere reset di Arduino

    A questo punto il decoder ha memorizzato l'indirizzo del comando che è stato inviato dalla centrale quale indirizzo del servo nr.1. E' importante notare che il nuovo indirizzo non deve rientrare nel range dell'indirizzo attuale dei 5 motori gestiti dal decoder, in altre parole se i servo hanno indirizzo ad esempio da 11 a 16, il nuovo indirizzo non deve avere come valori da 11 a 16.


    Regolare la posizione dei servo
    E' possibile regolare l'angolo di movimento del servo in entrambi i sensi, tale funzione è molto utile per una regolazione fine della deviata. La procedura è la medesima sia in DCC che in analogico.

    Per regolare la posizione dei servo si agisce in questo modo:
    1. Muovere il servo che si desidera regolare inviando un comando dalla centrale (DCC) o agendo sull' interruttore (analogico)
    2. Premere il pulsante S1, il servo si metterà nella posizione centrale e il led sul pin 13 lampeggia lentamente ad indicare che si è in fase di regolazione
    3. Premere nuovamente il pulsante S1, il led lampeggia più velocemente e il servo inizia a spostarsi lentamente verso un lato. Quando questo avrà raggiunto la posizione desiderata premere il pulsante S1
    4. Il servo si posiziona di nuovo al centro e inizierà a spostarsi lentamente nel verso opposto, il led lampeggia ancora più velocemente. Quando questo avrà raggiunto la posizione desiderata premere nuovamente il pulsante S1

    La procedura è terminata e le nuove posizioni sono memorizzate nella EEPROM, per verificare il corretto funzionamento provare a dare i comandi dritto/deviata, il servo dovrà muoversi secondo le nuove impostazioni.

     In figura la foto del prototipo montato e delle board ricevute dal produttore cinese (il primo ordine - 5 piastre - è veramente economico 😉 e la qualità è veramente alta!). Accanto al pulsante per la programmazione, si vede il connettore per il comando dei servo in analogico.





    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.





















  8. Una volta descritto come impartire i comandi per gli scambi nell' articolo precedente, è ora di capire come attuare il comando vero o proprio, ovvero muovere gli aghi degli scambi.
    Di seguito è descritto un progetto per pilotare 4 motori a solenoide che utilizza Arduino Nano e un circuito a scarica capacitiva. Lo schema è derivato dagli innumerevoli circuiti che si trovano in rete, mentre lo sketch prende spunto dall'ottimo articolo pubblicato sul sito lucadentella.it ed utilizza le librerie NMRA.
    Il decoder ha funzioni minime per pilotare i motori, dal punto di vista della configurazione ha soltanto un parametro: l'indirizzo base del decoder. In pratica il decoder riceve il comando dalla centrale DCC e attiva l' uscita corrispondente all'indirizzo indicato dal comando. Altre funzioni e configurazioni per adesso non sono previste.
    Lo schema elettrico è il seguente:
    Lo schema è molto intuitivo, il segnale DCC in ingresso sul connettore X2 viene inviato ad Arduino sul pin D2 tramite un foto-accoppiatore 6N137. Per il funzionamento del decoder è necessaria una tensione esterna che può essere alternata dal valore di 12-13V AC, o anche continua di almeno 15V (connettore X1). L' alimentazione a 5V per Arduino  viene fornita da un IC stabilizzatore.
    Per ogni motore poi è prevista una coppia di MOSFET IRL540 che hanno la caratteristica di poter essere pilotati da tensioni di gate di valore 0-5V. I motori sono alimentati da un circuito a scarica capacitiva, esso è composto dalla resistenza R7 da 220ohm 5W e dalla coppia di condensatori da 2200uF che provvedono a fornire l' energia necessaria per muovere l' ago. Una volta scaricati, i condensatori impiegano circa 8-10 secondi per tornare alla piena carica e quindi pronti per ricevere un nuovo comando.
    Lo sketch è molto semplice,  come ho accennato è derivato dall'ottimo articolo pubblicato da Luca Dentella, cui vanno i miei ringraziamenti, che spiega come realizzare un semplice decoder accessori per pilotare un LED. Inoltre è illustrato molto chiaramente il metodo di indirizzamento MADA/PADA; un'ottima spiegazione è anche riportata nella wiki del noto software Rocrail© di Robert Versluis (link).
    Al link sottostante è possibile scaricare lo sketch de decoder al cui interno sono inseriti commenti per rendere il codice comprensibile e modificabile a piacimento.

    Il decoder ha un solo parametro di configurazione che è l' indirizzo base, (MADA - Module Accessory Decoder Address) ovvero l' indirizzo comune per le 4 porte del decoder. Tale indirizzo è calcolato con le formule:

    addr = (# - 1) / 4 + 1 
    port = (# - 1) modulo 4 + 1

    dove # è il numero indicante lo switch. Ad esempio lo switch 11: avrà indirizzo 3,5 e porta  3; prendendo le sole parti intere: indirizzo base 3, porta 3

    Di seguito una tabella esplicativa:

    Switch Number Indirizzo Base del decoder (MADA) Porta
    1 1 1
    2 1 2
    3 1 3
    4 1 4
    5 2 1
    6 2 2
    7 2 3
    8 2 4
    9 3 1
    10 3 2
    11 3 3
    12 3 4
    13 4 1
    14 4 2
    15 4 3
    16 4 4

    L' indirizzo di default del decoder è 1, ovvero il decoder pilota nativamente gli scambi con indirizzo da 1 a 4. Per cambiare indirizzo base basta premere il pulsante S1, il led di al pin 13 di Arduino Nano (quello montato sulla board di Arduino) lampeggierà
    ad indicare che il decoder aspetta di conoscere l' indirizzo base, a questo punto basta inviare un comando scambi con indirizzo base pari al valore desiderato per memorizzare il nuovo indirizzo nella EEPROM di Arduino. Se l' operazione è andata a buon fine il led 13 si spegnerà. Al riavvio il decoder avrà il nuovo indirizzo base.
    Collegando il cavo usb ad Arduino Nano e visualizzando il monitor all' interno dell' IDE, il decoder fornisce all' accensione i parametri di configurazione:
    La data e l'ora indicate sono quelle del caricamento del file dall'IDE, per gli switch gestiti dal decoder vengono indicati gli indirizzi e i pin di riferimento su Arduino.
    Per questo decoder ho disegnato anche un PCB dalle dimensioni 100x63mm a 2 layer:



    che ho successivamente ordinato ad un' azienda di Hong Kong. Le schede sono arrivate in 20-25 giorni e la qualità è veramente elevata. In basso a destra ho previsto un connettore (JP1) con le uscite del bus I2C per future connessioni di pulsanti e/o interruttore per la gestione manuale o degli itinerari.


    Di seguito le foto del prototipo montato:









    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.













  9. Dopo la pubblicazione del palmare Multiloco per sistemi Xpressnet©, molti mi hanno chiesto di dotare lo stesso della capacità di poter pilotare gli scambi.
    L' esigenza del palmare multi loco, come ho avuto modo di spiegare nel primo articolo, è nata dal fatto di poter avere a disposizione i comandi "basic" a portata di mano per controllare più di una loco, su plastici medio piccoli, senza alcuna navigazione in menù o combinazioni di tasti.
    Dotare il Palmare Multiloco della funzionalità di comando scambi avrebbe un pò fatto venir meno questo principio per cui ho preferito venire incontro alle esigenze di qualche amico pensando ad un progetto ex-novo, ovvero un Arduino che avesse la possibilità di pilotare gli scambi tramite una serie di pulsanti.
    Il progetto che verrà descritto quindi è un controllore di scambi per sistemi basati sul protocollo Lenz Xpressnet©, qualcosa di simile a quanto già progettato e pubblicato da Paco Canada con il suo "XTCO".
    Il progetto utilizza un Arduino Nano, data la semplicità del codice, esso è facilmente applicabile ad Arduino Uno o meglio ancora (vista la quantità di pin) Arduino Mega.
    Anche in questo caso ho fatto uso delle librerie di Philipp Gahtow (http://pgahtow.de) che ancora una volta è stato molto disponibile nel fornire supporto e al quale vanno i miei ringraziamenti.

    Lo schema è il seguente:

    Schema di connessione


    Lo schema riporta solo 4 degli 8 pulsanti che sono stati configurati nello sketch, esso rappresenta effettivamente il prototipo che ho realizzato per le prove.
    Per connettersi al bus Xpressnet© è stata utilizzata l' interfaccia del palmare Multiloco con qualche lieve modifica per aggiungere un LED che indica la presenza della tensione 5V:






    Lo sketch da caricare su Arduino è molto semplice, in pratica viene letto in loop lo stato dei pulsanti e quando viene rilevata la pressione di uno di questi cambia lo stato dello scambio ad esso associato.




    Ogni pulsante quindi agisce da "toggle" per lo scambio cui è stato associato: premendo il pulsante lo scambio cambia stato, da corretto tracciato va in deviato o viceversa. La scelta di un solo pulsante per scambio (e non due pulsanti associati alle due condizioni, "corretto tracciato" e "deviato") è stata fatta per avere un numero sufficiente di scambi pilotabili da Arduino Nano che mette a disposizione un discreto numero di pin I/O (D3-D13 digitali, A0-A7 Analogici). Lo scketch proposto configura 8 pin come input:
    int turnout_pin[num_turnout] = { 3, 4, 5, 6, 7, 8, 9, 10};

    questa riga di codice elenca i pin associati ai pulsanti. Nulla vieta di aggiugere altri pin, occorre però ricordarsi anche di aggiornare la variabile di configurazione che indica il numero di scambi gestiti da Arduino:

    #define num_turnout 8


    Ad ogni scambio va poi associato un indirizzo che corrisponde all' indirizzo del decoder cui è connesso il motore dello scambio stesso.

    E' necessario fare una premessa: in ambito DCC, ci sono diversi modi di gestire l' indirizzamento dei decoder accessori (PADA, MADA etc), quello utilizzato dipende dalle varie centraline in commercio o autoscostruite che fanno parte del nostro impianto. Un'ottima spiegazione è riportata nella wiki del noto software Rocrail© di Robert Versluis (link).
    In pratica può capitare che uno stesso decoder sia visto con indirizzi diversi a seconda del dispositivo che lo piloti: ad esempio nel mio impianto, che è equipaggiato con la centralina NanoX di Paco Canada, uno stesso scambio ha indirizzi diversi se viene comandato dall' XTCO di Paco Canada o dal software RocRail©tramite interfaccia PC.

    Nello sviluppo dello sketch, utilizzando le librerie di Philipp Gahtow, ho riscontrato ancora una differenza: per muovere lo scambio programmato con indirizzo 2, ho dovuto indicare come indirizzo 5 e così via per tutti gli altri: esiste una differenza di "3" costante. Probabilmente ciò avviene perchè i vari costruttori/programmatori interpretano gli indirizzi di partenza da 0 o da 1 con logiche e principi diversi. L'unica cosa è... provare!

    Fatta questa premessa, l' indirizzo associato ai vari pulsanti/pin è contenuto nella variabile:

    int turnout_pin[num_turnout] =  { 3, 4, 5, 6, 7, 8, 9, 10};
    int turnout_add[num_turnout] = { 1, 2, 3, 4, 5, 6, 7,  8}; 

    l' array che contiene gli indirizzi segue quello che indica i pin, al pin 3 è associato l' indirizzo 1, al pin 4 indirizzo 2 etc.
    Per ovviare alla differenza di indirizzi che si può avere fra l' indirizzo del decoder e l'indirizzo che effettivamente viene inviato dallo sketch alla centralina è stata utilizzata la variabile:

    int address_offset = 3;

    tale valore viene somamto all' indirizzo programmato nella variabile turnout_add[num_turnout] e può essere cambiata a seconda delle esigenze. Come ho anticipato, occorre fare delle prove per definire l' esatto valore della variabile "address_offset".

    Arduino Nano dispone di una sola porta seriale e nel progetto descritto in questo articolo essa è utilizzata per scambiare messaggi sul bus Xpressnet tramite il chip MAX485. Allo stesso tempo però tale interfaccia è quella utilizzata da Arduino per caricare gli sketch da PC, poichè il MAX 485 se connesso ad Arduino non permette a questi di colloquiare con il PC tramite la porta USB, occorre disconnetterlo ogni volta che vogliamo caricare un nuovo sketch sul nostro Arduino Nano.

    Questa una foto del prototipo realizzato:














  10. Definite le funzionalità tecniche del palmare è ora di progettare una degna custodia per tutta l'elettronica.
    Per questo ho deciso di sfruttare le potenzialità della stampa 3D con tecnologia FDM, economica e flessibile. Dato che non ho trovato nulla che mi soddisfacesse nel cloud già pronto ho deciso di progettare l'enclosure ex novo.
    Per la realizzazione del disegno 3d ho utilizzato Autodesk Fusion 360, software molto potente di modellazione 3D che, per usi personali ed altre situazioni è gratuito. Consiglio di leggere i termini di licenza per verificare se ricadete nell'utilizzo gratuito del software.

    Per prima cosa ho disegnato un faceplate per verificare le finestre di alloggiamento della tastiera e del display e per avere un'indicazione di massima degli ingombri. Lanciata la stampa i risultati non si fanno attendere.




    Definito il posizionamento inizio a progettare la custodia, composta da due pezzi e con le apposite torrette di fissaggio per tutta l'elettronica.




    Bottom con le torrette di fissaggio dell'elettronica
    Elettronica in loco

    Bottom con le finestrature per i componenti



    I files .stl da stampare sono diponibili su Thingiverse cliccando sul collegamento qui sotto


Supporta le attività della nostra associazione con una piccola donazione.



Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.