Salve a tutti io è il mio primo post e spero di avere fatto tutto giusto altrimenti chiedo venia
arrivo al dunque ed un mio collega volevamo automatizzare al piu possibile un plastico ferroviario monorotaia ancora da assemblare. La mia idea era :
1 modulo ir prima delle sbarre che al passaggio del treno mi attivi il servo che abbassi le sbarre, dopo un delay da definire, le sbarre devono tornare alla posizione alzata.
2 un altro sensore ir vicino alla linea di arresto del treno in stazione che apra il contatto di un relè dove passa l'alimentazione dei binari. arrivato a questo punto io devo dare un tempo che mi faccia lasciare aperto il contatto del relè dei binari, passato questo tempo il relè chiude il contatto ed il treno deve ripartire...qui mi assale il dubbio ma come faccio a far chiudere il contatto del rele gestito dal sensore ir che è ancora occupato dal treno?, come faccio a far ripartire il treno???
metterei un sensore ir prima del passaggio a livello e uno dopo, così è il treno stesso che una volta passato completamente a dare l'input per rialzarli.
da codice quando l'ir rileva il treno lo ferma, poi passato il tempo che vuoi riattivi il relé e quando l'ir non rileva più il treno (quindi è partito) ripeti il ciclo in modo da fermare di nuovo il treno quando l'ir rileva di nuovo il treno.
per fare un plastico realistico ti consiglio di far arrivare il treno in stazione almeno con mezz'ora di ritardo scherzo
grazie! si po ho gia pensato di mettere un piccolo display amoled e similare con citta ed orari..ovviamente come nelle fs in ritardo perenne ;D ;D ;D ;D ;D ;D ;D
Comincia col mettere un sensore prima del passaggio a livello
Poi colleghi un led al sensore è vedi la presenza treno
Poi colleghi arduino e gli fai accendere un led quando sente
Poi fai un timer che spegne dopo un po'
E via così....
La differenza tra l'uso di millis e delay è che con delay se fai una pausa per 10 secondi tutto il programma rimane bloccato finché non sono trascorsi 10 secondi, inaccettabile se devi gestire più cose contemporaneamente con tempi diversi. Con millis gestisci il tempo in modo diverso, hai un variabile che conteggia i millisecondi da quando è alimentato arduino, confrontando questi millisecondi in tempi diversi puoi sapere quanto tempo è passato e quindi gestire diverse temporizzazioni in modo indipendente, questo tanto per semplificare il concetto ma sul forum se ne è parlato tantissime volte e trovi parecchio materiale su cui farti un idea più precisa.
io direi che è presto per cominciare (a meno che non si voglia restare su due piani, uno di teoria e uno di attività)
a cominciare, dicevo, con millis e if e delay e compagnia bella
il plastico è ancora da "assemblare"
cominciamo a vedere se il treno gira (sicuro questo), la topologia del plastico e se il sensore sente o no il treno
anche che tipologia di sensore, se NC od NO, serve di conoscerla, prima di cominciare a "badilare" righe di codice
torno a suggerire: mettere sensore vedere led accendere quando treno passare
quando è passato il primo treno al passaggio a livello possiamo dire di aver passato il livello (del giuoco di parole)
a questo punto ne passa ancora di acqua sotto il ponte, prima di poter attaccare arduino:
tensioni? disturbi? problemi di cablaggio?
io eviterei (anzi, di mio evito accuratamente) di cominciare a giocare al "piccolo Dennis" (Ritchie) prima di sapere se i led si accendono quando devono
indi ragion per cui, una volta fatto tutto il plastico vedere e determinare cosa si vuol far fare ad Ardu, poi di conseguenza creare un sketch a doc per questa e quella funzione , io sto optando ad avere piu arduini, nano, micro, uno etc cosi da caricare poco di lavoro ogni arduino, e da no avere codi lunghi all'infinito, visto poi che i lavori che dovranno gestire sono:
1 per il passaggio/i a livello
1 per far fermare il treno nell'unica stazione che c'e (salvo poi farne altre ect)
1 per gestire un piccolo schermo amoled o che sia dove verranno messi nomi di citttà e tempi di percorrenza
magari sbaglio a pensarla cosi ma questo secondo me è il modo piu "leggero".
Poi vedremo come upgradare il plastico, tempo e finanze permettendo, intanto cominciamo dal piccolo, io mi occupo del diciamo reparto elettrico/elettronico, mentre il mio collega si occupera della realizzazione .
Per ora vi ringrazio e spero di non essere invadente con le mie richieste ma sono all'inizio di un lavoro che mi appassiona molto e stò cercando di metterci tutta l'anima per questa realizzazione e soddisfazione.
per quello che devi fare non serve utilizzare più di un arduino, partirei direttamente con una mega tanto si sa come vanno a finire queste cose, si inizia con qualche idea e il bisogno di qualche pin per finire che non bastano più nemmeno le 54 porte di I/O di una mega
Negli impianti "veri" ci sono degli appositi "interruttori" che vengono attivati al passaggio delle ruote del convoglio. Potresti ispirarti a quella soluzione.
massi77massi:
ho ripreso lo sketch da uno per crepuscolare cosi per prova
E hai giustamente aggiunto un delay(4000) per permettere al convoglio di di allontanarsi dal sensore prima di controllarlo di nuovo.
In questo modo però come hanno già detto serve si un Arduino per ogni operazione.
Pensando invece con una logica a "passaggi successivi" suddivisa in fasi, dove solo una fase alla volta è quella corrente/attiva, e dove si fa qualcosa solo negli istanti in cui delle condizioni diventano vere, è possibile gestire N oggetti (treni, scambi, luci, temporizzazioni) contemporaneamente con un solo Arduino.
Ad esempio la logica del tuo codice (che salvo problemi hardware funziona) potrebbe essere ridescritta con:
se fase in movimento
se rilevamento sensore
ferma
annota tempo attuale
passa a fase fermo
altrimenti se fase fermo
se trascorsi N secondi
avvia
annota tempo attuale
passa a fase avviato
altrimenti se fase avviato
se trascorsi N secondi
passa a fase in movimento
La fase avviato serve come prima per permettere al convoglio di allontanarsi completamente dal sensore. Quindi non ci sono delay che fermano l'elaborazione, ma solo permanenze in una certa fase per un certo tempo (calcolato con millis come indicato nei post precedenti).