Jump to content

Controllo treno PF con Arduino a bordo


Post raccomandati

Buongiorno a tutti

Scrivo oggi quest topic per mostrarvi l'evoluzione del controllo treni già parzialmente mostrato in precedenza nel mio "Locomotore da manovra" di qualche tempo fa (https://itlug.org/forum/topic/7836-locomotore-da-manovra/).

Concordando con l'opinione di molti che automatizzare un plastico di treni LEGO "dall'esterno" implica un sacco di fili da far passare in giro, ho pensato di mettere "l'intelligenza" del controllo dentro il treno, prevedendo di comunicare con l'esterno con tramite bluetooth.

Il sistema è quindi basato su una Arduino NANO che è il cervello, da un modulo di comunicazione bluetooth HC06, da un driver per motori DRV8833 per controllare la velocità dei motori ed eventualmente le luci del treno.

Per interagire con l'esterno ho aggiunto sul treno un sensore di prossimità (tipo IR). L'idea è quella di avere lungo il tracciato degli "ostacoli" che il sensore di prossimità rileva quando il treno ci passa vicino; al rilevamento di un ostacolo il sistema avvia l'esecuzione di una serie di azioni predefinite tipo variare la velocità, attendere, accendere/spegnere le luci, ecc.

Immaginando che gli ostacoli lungo il percorso siano numerati in sequenza, il sistema (sapendo il numero totale di ostacoli presenti e la direzione del treno) li conta, di conseguenza ogni volta che il sensore di prossimità rileva un ostacolo il sistema sa quale ostacolo è. Ovviamente è necessario che il percorso sia sempre lo stesso.

Associando ad ogni ostacolo una sequenza di azioni, diversificata se il treno sta procedendo in una direzione o in quella opposta, è possibile far eseguire al treno in completa autonomia le azioni volute.

Quindi ad esempio ponendo un ostacolo vicino ad una stazione si può avviare una sequenza del tipo: imposta velocità a 1 (rallentamento del treno), aspetta 1 secondo, imposta velocità a 0, aspetta 5 secondi, imposta velocità ad 1, aspetta 2 secondi, imposta velocità a 3, aspetta 2 secondi, imposta velocità a 5. In questo caso il treno rallenta in corrispondenza della stazione, si ferma, e dopo 5 secondi riparte incrementando gradatamente la sua velocità.

Nel filmato allegato vedete qualche dettaglio in più.

Ho scritto una piccola applicazione per smartphone che permette, oltre a regolare la velocità del treno come un normale telecomando (già vista nel post precedente), anche di inviare al treno le istruzioni per il ciclo automatico ed avviarlo o fermarlo.

Ciao

DSC00139.JPG

Link to comment
Condividi su altri siti

Io non ho (purtroppo 😂) dei treni 9 V, ma se non sbaglio vengono alimentati i binari e i motori prendono la tensione da lì. La variazione di velocità si ha variando la tensione ai binari, quindi tutti i treni sui binari fanno la stessa cosa.

Premesso questo, se sulla linea si ha un solo treno, spostando i sensori di prossimità e le schede sul plastico, si può far funzionare anche per i 9V.

In pratica l'Arduino e il regolatore DRV8833 andrebbero a regolare la tensione che alimenta i binari.

Teoricamente si potrebbe fare anche a bordo treno ma sarebbe necessaria una modifica sostanziale ai motori.

Link to comment
Condividi su altri siti

Interessante il metodo dei "segnali fissi" (non li chiamerei "ostacoli") perché possono essere parte del paesaggio (come un muro di un edificio un po' troppo vicino ai binari o il paletto del passaggio a livello...).

Magari i LED del sensore si possono arretrare un po' verso il centro in modo da non essere visibili. A naso direi che potrebbero persino "guardare verso terra", conteggiando le traversine rilevando i "coccodrilli" sulle traversine (così li chiamano nelle FS): una o due plate 2x2 potrebbero essere sufficienti, se i limiti minimo/massimo del sensore lo permettono.

Il 7805 non è una soluzione elegante, visto che "spreca" in calore ciò che è di troppo (certo costa meno di un adattatore di tensione step-down...).

 

Link to comment
Condividi su altri siti

1 ora fa, alf ha scritto:

Il 7805 non è una soluzione elegante, visto che "spreca" in calore ciò che è di troppo (certo costa meno di un adattatore di tensione step-down...).

Una possible alternativa potrebbe essere anche quella di usare una scheda a 3.3 tipo questa che ha anche il connettore per le lipo 

https://wiki.wemos.cc/products:d32:d32

Link to comment
Condividi su altri siti

Grazie @alf per i consigli, avevo anche io pensato al sensore verso il basso, ma poi ho optato per la soluzione più semplice, anche se esteticamente meno bella, oltre che un po' "pericolosa": l'altro giorno ho passato mezz'ora a cercare un baco nel codice ... invece non mi ero accorto che il tavolo del plastico si era spostato un po' avvicinando troppo il binario al termosifone "creando" un ostacolo non previsto...

Studierò gli step down per sostituire il 7805.

Link to comment
Condividi su altri siti

58 minuti fa, ilmanciobo ha scritto:

Veramente bello, mi piacerebbe capire coma fa a rilevare che due treni sono troppo vicini.

credo che usi gli stessi sensori che usa per fermare il treno e faccia un calcolo sui tempi. Probabilmente è abbastanza fine da tenere conto della lunghezza del treno .... con un po' di logica per non confondere due treni con il passaggio di un treno due volte penso. Tipo: se il sensore si spegne e si riaccende dopo meno di tot secondi allora vuol dire che ha un treno in coda

Link to comment
Condividi su altri siti

Ottima soluzione quella di mettere un Arduino nano a bordo del treno, io ho usato la soluzione contraria quella di metterlo esterno. Piloto il treno con un ir posto su un modulare il tutto è sincronizzato con una sbarra del passaggio a livello è relativo semaforo rosso verde. Il semaforo è pedonale quindi quando ho il verde per i pedoni la sbarra si abbassa ed il treno si ferma. Una volta che la sbarra si riabbassa do il rosso ai pedoni e faccio ripartire il treno. Due difetti il primo è che il led ir può interferire con altri ricevitori se sono vicini ed utilizzano lo stesso canale ( da sw si può cambiare in ogni caso) secondo a batterie cariche o scariche le velocità del treno cambiano abbastanza. Suggerimenti per ovviare a questo secondo problema? Un alternativa sarebbe quella di usare due Arduino in mqtt e di utilizzare la “la logica ad ostacoli” per fare un calcolo del tempo sul percorso per correggere la velocità ma si fa un po’ troppo complicata 🙂 

Link to comment
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente registrato per postare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Hai un account? Accedi .

Accedi ora
  • Visualizzato ora da   0 utenti

    • Nessun utente registrato su questa pagina.
×
×
  • Crea nuovo...