Gestione Trenino Elettrico con Arduino

Salve a tutti ...
Per un amico che sta costruendo un plastico ho pensato di gestire i blocchi (cioè alimentare/isolare le varie sezioni di binario) e attuare gli scambi comandati da piccoli servomotori usando arduino, che si interfaccia via porta seriale col PC, su cui ho sviluppato una applicazione visual basic 2019 che visualizza il mimico dei binari.
I blocchi sono alimentati/disalimentati con due moduli relays a 16 canali , con optoisolatore, che si interfacciano con arduino attraverso 4 shift registers 74HC595, alimentati da un alimentatore 5Vdc/ 2A.
Gli scambi, in numero di 18, sono azionati da micro servos SG90, connessi ai pin 2-13 (PWM) del primo arduino Mega ed ai pin 2-7 del secondo Arduino Mega, connesso via seriale al primo.

In un primo tempo ho testato solo la parte relativa ai due moduli relays ... e tutto funzionava.

Poi ho testato solo la parte relativa agli scambi ... e tutto funzionava...

Poi ho attivato entrambe le parti e ..... i servo non funzionavano più, o meglio funzionavano in modo erratico, anche senza dar loro il comando !!! :thinking: :thinking:

Scusa se lo chiedo, ma perche' usare dei servo per gli scambi ?

Voglio dire, dato che in fondo non hanno alcuna necessita' di fermarsi in un punto intermedio (o e' tutto da un lato, o tutto dall'altro), non sarebbe stato piu semplice optare per dei piccoli motoriduttori con un deviatore accoppiato meccanicamente, comandabili semplicemente con un rele' ?

E' sufficente usare un piccolo deviatore a scatto, a levetta o slider, facendo in modo che venga fatto scattare alle due estremita' della corsa, ed un contatto di scambio di un rele', senza avere problemi di pilotaggio dei servo o altre complicazioni software :wink:

Con il mio amico abbiamo optato per i micro servo per una semplice questione di costo , di reperibilità ( costo su amazon 1,5 Euro) e facilità di installazione sottoplancia.
I motoriduttori ... non mi sembra di averli visti su amazon !!!

Se vuoi pilotare più servo contemporaneamente senza diventare matto, ti consiglio una scheda basata sull'integrato PCA9685 che ne può gestire fino a 16 contemporaneamente, ma essendo i2c ovviamente ne puoi mettere più di uno in cascata.

La butto li... Hai collegato tutti i GND tra di loro?

Ti ringrazio per la dritta Contestant, ma non c'è necessità di attuare i servo in contemporanea. Quello che non riesco a capire è perché se la gestione degli scambi (servo) e dei blocchi (relays) è fatta singolarmente (cioè scollego alternativamente i relativi pins) funziona), mentre se tengo collegati sia i pins collegati ai servo che i tre pins connessi ai 4 shift registers, che pilotano i relays, i servo funzionano erraticamente (mentre i relays funzionano correttamente).
Ho il sospetto che ci sia un sovraccarico di Arduino, con conseguente tensione ballerina sui pins PWM ... :thinking: :thinking: :thinking:

Si, tutti i gnd sono collegati ...

Ma l'alimentazione dei servo è dedicata dallo schema che hai messo.

Sì, Contestant ... i servo e gli shift registers sono provvisti ciascuno di alimentatori dedicati, che, a vuoto, danno rispettivamente una tensione di 5,24 V e di 5,1 V ...

Come funziona la comunicazione con il computer? Mandi dei comandi con la USB al primo mega che, nel caso si riferiscano ai servo, li gira sulla serial 3 per il secondo controllore?

Il PC dialoga in seriale con il primo mega a sx, che con i pin 37,39,41 pilota i 4 HC595, e con i pins 2 ... 13 i primi 12 servo; i restanti 6 servo sono pilotati dal secondo arduino, connesso al primo sulla seriale Tx2-Rx2 ...

Infatti roba dedicata non credo se ne trovi, bisogna recuperare quelli venduti da siti tipo aliexpress e simili e poi fare un po di fai-da-te ... in quel senso si, i servo sono piu comodi come reperibilita', anche se piu "macchinosi" come gestione.

Il suggerimento di cotestatnt sarebbe stato pure il mio, in tale caso, usare una schedina dedicata (o due nel tuo caso) con i PCA9685, che ti semplificherebbe la gestione da software ed eliminerebbe (probabilmente) anche il problema dell'instabilita' :wink:

Dallo schema che hai postato utilizzi la serial3, ma credo sia solo un problema di disegno :slight_smile:
I servo che sui comportano in maniera anomala sono quelli collegati su un Mega piuttosto che un altro, o è un comportamento comune?

Si, piu o meno, comunque di entrambi gli Arduino ...