GAS TT 10 anni con voi

Ben arrivato! Fai login o registrati per fruire di tutte le funzionalità del forum e del sito.
Se eri già registrato e non ti ricordi la password usa questo link per recuperare l'accesso.
Sito e forum dedicati al fermodellismo, il nostro hobby viene praticato in molte maniere diverse, tutte ugualmente valide: hai un plastico? oppure sei un collezionista? oppure un semplice appassionato? Non esitare a scrivere nel forum, tutti gli interventi sono benvenuti... Postate foto e video del vostro plastico e chiedete aiuto per ogni problema o curiosità inerente al nostro hobby.

Rinnovo/Iscrizione/Donazioni GAS TT - 2024

Raccolta dati a basso costo da sensori in DCC

Il sistema digitale (DCC) applicato al modellismo ferroviario.

Moderatori: cararci, MrMassy86, adobel55, lorelay49

Messaggio
Autore
Avatar utente
ho_master
Messaggi: 655
Iscritto il: martedì 6 novembre 2012, 6:58
Nome: Antonello
Regione: Abruzzo
Città: Pescara
Stato: Non connesso

Raccolta dati a basso costo da sensori in DCC

#1 Messaggio da ho_master »

Sul plastico del Museo del Treno sono arrivato al momento della raccolta dati dai vari sensori sparsi lungo la linea per trasmetterli a Rocrail.

Il budget a disposizione e' limitatissimo quindi navigando navigando mi sono imbattuto in una soluzione molto semplice e che sembra funzionare molto bene.

Ho investito 12 Euro in una scheda Arduino Mega 2560 e in un'oretta per verificare il codice che vi allego: tutto qui! Arduino parla con Rocrail tramite un cavo USB e Rocrail vede la scheda come MCS2 controller sulla porta 'seriale' assegnata dal PC.

Come sensori utilizzo rilevatori ad infrarossi, sensolri Hall e rilevatori di assorbimento basati sul circuito di DCCWorld per l'occupazione del binario.

Immagine:
Immagine
48,6 KB

Se qualcuno volesse ulteriori spiegazioni sono qui per voi

Antonello

Codice: Seleziona tutto

/" This program try to implement a kind of sensor management using Arduino Mega 2560,
 sending the appropriate info directly to Rocrail by USB. Define an MCS2 controller in
 Rocrail. In the controller's properties select "serial" and the Arduino "comport".
 It is working with any micro switch or IR module, connected to Mega 2560 digital pins.
 With a minor modification you can include the 16 analogue pins as well. No any shield
 or other elements are needed. The idea is inspired by Bert Havinga and Joerg Pleumann "/

int a=6; //max 6; number of virtual sensor blocks
int b=8; //max 8; virtual sensor block's port
int sensors[7];	// status "matrix"
byte tx_msg[13]; // CAN message to transmit

void setup() {	
	Serial.begin(500000);	
	tx_msg[0] = 0;// prio			
	tx_msg[1] = 35;// command
	tx_msg[2] = 59;// highByte(hash)
	tx_msg[3] = 121;// lowByte(hash)
	tx_msg[4] = 8;// the number of data bytes in the payload			
	tx_msg[5] = 0;
	tx_msg[6] = 1;// bus number
	tx_msg[7] = 0;
	tx_msg[9] = 0;			
	tx_msg[11]= 0;
	tx_msg[12]= 0;
	for (int ap = 1; ap <= a; ap++) {	// read pin status and write to sensors variable
		for (int bp = 1; bp <= b; bp++) {
			pinMode(ap"b+bp-5, INPUT_PULLUP);
			bitWrite(sensors[ap],bp-1,digitalRead(ap"b+bp-5));
			tx_msg[8]=ap"b+bp-8;			     // sensor number
			tx_msg[10]=digitalRead(ap"b+bp-5);// pin status
			Serial.write(tx_msg,13);	         // send the pin status to Rocrail		    	
		}	
	}
}

void loop() {
	for (int ap = 1; ap <= a; ap++) {	// scan pins by virtual blocks and check twice (avoiding mistakes)
		for (int bp = 1; bp <= b; bp++) {	// there was change on pin state compare to previous scan ?		
			if (digitalRead(ap"b+bp-5)!=bitRead(sensors[ap],bp-1))  {
				delay(10);
				if (digitalRead(ap"b+bp-5)!=bitRead(sensors[ap],bp-1))  {	// if yes, change the bit
					bitWrite(sensors[ap],bp-1,digitalRead(ap"b+bp-5));		// in 'sensors' variable
					tx_msg[8]=ap"b+bp-8;			  // sensor number
					tx_msg[10]=digitalRead(ap"b+bp-5);// pin status
					Serial.write(tx_msg,13);		  // send the changed pin status to Rocrail		
				}
			}
		}
	}
}




Avatar utente
Digtrain
Messaggi: 1619
Iscritto il: giovedì 20 dicembre 2012, 23:47
Nome: Walter
Regione: Lombardia
Città: Casarile
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#2 Messaggio da Digtrain »

Ciao Antonello, :grin:

grazie per la condivisione.
Devo trovare il tempo per occuparmi anche di Arduino!!! :wink:

Ciao Walter :geek:
Walter - Club Modellismo Pavese - Steamtown National Historic Site - Het Spoorwegmuseum Utrech - Loxx Berlino - "Il mio fisico è stato scolpito e modellato nelle migliori trattorie della Lomellina"

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#3 Messaggio da anam »

Grazie per l'interessante segnalazione.

Se non ho inteso male il listato, sono 48 le entrate monitorate, esatto?
Daniele - Plastico delle terme

Avatar utente
ho_master
Messaggi: 655
Iscritto il: martedì 6 novembre 2012, 6:58
Nome: Antonello
Regione: Abruzzo
Città: Pescara
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#4 Messaggio da ho_master »

Esatto. Si potrebbero aggiungere anche gli ingressi analogici lavorando sul codice.

Antonello

Riallego il codice, visto che nel precedente ci sono delle righe spurie ( ma da dove vengono quelle faccine ?)

/" This program try to implement a kind of sensor management using Arduino Mega 2560, sending the appropriate info directly to Rocrail by USB. Define an MCS2 controller in Rocrail. In the controller's properties select "serial" and the Arduino "comport".
It is working with any micro switch or IR module, connected to Mega 2560 digital pins.
With a minor modification you can include the 16 analogue pins as well. No any shield
or other elements are needed. The idea is inspired by Bert Havinga and Joerg Pleumann "/

int a=6; //max 6; number of virtual sensor blocks
int b=8; //max 8; virtual sensor block's port
int sensors[7]; // status "matrix"
byte tx_msg[13]; // CAN message to transmit

void setup() {
Serial.begin(500000);
tx_msg[0] = 0;// prio
tx_msg[1] = 35;// command
tx_msg[2] = 59;// highByte(hash)
tx_msg[3] = 121;// lowByte(hash)
tx_msg[4] = 8;// the number of data bytes in the payload
tx_msg[5] = 0;
tx_msg[6] = 1;// bus number
tx_msg[7] = 0;
tx_msg[9] = 0;
tx_msg[11]= 0;
tx_msg[12]= 0;
for (int ap = 1; ap <= a; ap++) { // read pin status and write to sensors variable
for (int bp = 1; bp <= b; bp++) {
pinMode(ap"b+bp-5, INPUT_PULLUP);
bitWrite(sensors[ap],bp-1,digitalRead(ap"b+bp-5));
tx_msg[ 8 ]=ap"b+bp-8; // sensor number
tx_msg[10]=digitalRead(ap"b+bp-5);// pin status
Serial.write(tx_msg,13); // send the pin status to Rocrail
}
}
}

void loop() {
for (int ap = 1; ap <= a; ap++) { // scan pins by virtual blocks and check twice (avoiding mistakes)
for (int bp = 1; bp <= b; bp++) { // there was change on pin state compare to previous scan ?
if (digitalRead(ap"b+bp-5)!=bitRead(sensors[ap],bp-1)) {
delay(10);
if (digitalRead(ap"b+bp-5)!=bitRead(sensors[ap],bp-1)) { // if yes, change the bit
bitWrite(sensors[ap],bp-1,digitalRead(ap"b+bp-5)); // in 'sensors' variable
tx_msg[ 8 ]=ap"b+bp-8; // sensor number
tx_msg[10]=digitalRead(ap"b+bp-5);// pin status
Serial.write(tx_msg,13); // send the changed pin status to Rocrail
}
}
}
}
}

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#5 Messaggio da antogar »

Provato con Arduino UNO e funziona.
Veramente una soluzione a basso costo se si pensa che un Arduino Nano costa meno di tre euro e ha fino a 13 ingressi fra digitali e analogici. L'ho provato con una Raspberry Pi3 sulla quale gira il server di RocRail, il tutto costerebbe meno di 40€...

saluti
Antonino

Avatar utente
buddacedcc
Messaggi: 479
Iscritto il: martedì 4 dicembre 2012, 21:37
Nome: Epifanio
Regione: Piemonte
Città: Torino
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#6 Messaggio da buddacedcc »

Scusate l'OT, Antonello ti ho spedito un messaggio privato...per caso l'hai letto ? grazie
Nuccio - Visita DCCWorld, il primo ed unico sito italiano dedicato al digitale.

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#7 Messaggio da antogar »

Versione del programma semplificato per Arduino Uno/Nano

Feedback_CS2_Nano.zip (1,6 KB)
Antonino

Avatar utente
Docdelburg
Socio GAS TT
Messaggi: 6215
Iscritto il: martedì 4 settembre 2012, 18:16
Nome: Mauro
Regione: Estero
Città: Madrid (España)
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#8 Messaggio da Docdelburg »

Chiedo gentilmente lumi: avendo dei moduli con 4 o 8 sensori tipo quelli di DCCWolrd come li collego ad Arduino?
Intendo dire come avete collegato fisicamente i moduli S4 o S8 se questi inviano dati via bus Loconet?
E in che modo date potenza al segnale? Usando l'alimentazione da pc della scheda Arduino?

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#9 Messaggio da antogar »

Ciao doc,
In realtà questa soluzione prevede che la stessa scheda arduino sia un modulo e si connette in usb al pc in emulazione della centrale MCS2 Maerklin. Quindi niente loconet.
Ad essa poi vanno connessi eventuali sensori di assorbimento o infrarossi o semplici contatti (ad esempio per rilevare la posizione di uno scambio)
Spero di essere stato chiaro e perdona il ritardo nella risposta...
Ciao
Antonino

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#10 Messaggio da antogar »

Gli esperimenti proseguono e direi che la soluzione funziona bene. In foto vedi ArduinoNano che si interfaccia a semplici circuiti ad assorbimento e a sensori di posizione ad infrarosso. Ad oggi la scheda è capace di leggere 14 ingressi e il prossimo passo è aggiungere schedine slave tramite I2C.



Immagine:
Immagine
130,34 KB
Antonino

Avatar utente
antonino91
Messaggi: 169
Iscritto il: sabato 7 giugno 2014, 23:11
Nome: Antonino
Regione: Sicilia
Città: Palermo
Età: 33
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#11 Messaggio da antonino91 »

Ottima segnalazione. Molto interessante :wink:
Nino - Treni colorati come lenzuola al vento.

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#12 Messaggio da antogar »

Aggiornamento.

Ho dotato la scheda Feedback della possibilità di aggiungere schedine satellite ad Arduino che già di suo legge 15 ingressi. Ho trovato su ebay queste schedine a meno si 1,5€ (ce ne sono anche a meno di 1€) che in pratica forniscono ulteriri 8 pin I/O.

Immagine:
Immagine
75,73 KB

In pratica adesso all' avviamento Arduino verifica se ci sono schedine di questo tipo connesse sul bus I2C e aggiunge ulteriori linee per la lettura dei sensori di posizione.

In foto vedete un Arduino Nano connesso a due di queste schedine a loro volta connesse ai classici sensori ad assorbimento.

Immagine:
Immagine
101,04 KB

Il tutto viene correttamente riconosciuto da RocRail e funziona senza problemi. Prossimi passi saranno la gestione degli errori sul bus I2C. Tutto ciò che vedete in foto (Arduino, schedine I2C, componenti per i sensori di assorbimento) non arriva a 10-15euro sui siti cinesi.

Il bus I2C ha una capacità elettrica di un paio di metri (400pf) di cavo cosa che per me è ampiamente sufficiente. Esiste un chip che ho già ordinato (1,5€ per 2 pezzi) capace di portare la capacità a 3000pf, probabilmente si raggiungono distanze notevoli.

A disposizione per chiarimenti :smile:
Saluti
antogar
Antonino

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#13 Messaggio da anam »

Antonino,

scusa ma temo di non aver ben capito a cosa serva questa piccola scheda della quale hai messo l'immagine. Serve ad ampliare le entrate del nano?

Ho fatto alcune prove con arduino mega. Tutto bene con i test fuori plastico. Quando collego i sensori di assorbimento (quelli di Paco) non vengono sentite le variazioni di stato. I sensori funzionano correttamente con la scheda S88 (sempre di Paco) ma sembrano muti nei confronti del Mega. Non riesco a venirne a capo.

Ciao

daniele
Daniele - Plastico delle terme

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#14 Messaggio da antogar »

La scheda serve ad ampliare il numero di pin, come hai osservato.

Non so come fai a collegare i sensori S88, la connessione di un tipico sensore ad assorbimento va fatta come in figura:


Immagine:
Immagine
42,91 KB
Antonino

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#15 Messaggio da anam »

Si, il collegamento é esattamente quello.
Non potrebbe dipendere dalla parte ricevente del fotoaccoppiatore? Io uso i tlp521. Dalle foto che hai postato non sono riuscito a leggere il codice dei tuoi. Potresti dirmi quali usi?
Grazie
Daniele - Plastico delle terme

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#16 Messaggio da antogar »

Anche io TLP521, nella versione 4x, la resistenza è 22ohm e il ponte diodi uno di quelli a bassa corrente.
Hai configurato i pin con pull-up ?
Antonino

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#17 Messaggio da anam »

Si, 22ohm la resistenza. Ho anche due condensatori sul ramo del diodo. Che tu non hai. Provo a scollegarli.
I pin sono configurati da programma con pull-up.
Questi sensori comandano regolarmente il 4044 dell'S88. Quindi funzionano.
Farò altre prove.
Grazie mille.
Daniele - Plastico delle terme

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#18 Messaggio da antogar »

Mah, non so che dirti. Se provi a collegare a massa i pin, vedi il messaggio su RocView ?
Antonino

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#19 Messaggio da anam »

Assolutamente sì. Il problema nasce quando collego il rilevatore di presenza.
Come detto, farò ulteriori prove.
Grazie.
Daniele - Plastico delle terme

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#20 Messaggio da antogar »

se il circuito che usi dovrebbe è questo: http://usuaris.tinet.cat/fmco/download/ ... DETEC4.pdf (pag 7), i condensatori dovrebbero solo migliorare la situazione.

Fai qualche foto, magari riusciamo a capire dov' è l'inghippo
Antonino

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#21 Messaggio da antogar »

anam ha scritto:

Assolutamente sì. Il problema nasce quando collego il rilevatore di presenza.
Come detto, farò ulteriori prove.
Grazie.


anam, fatte altre prove ?
Antonino

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#22 Messaggio da anam »

Ciao Antonino,
Ho provato questo.
Misurata la resistenza sui piedini collettore emettitore.
Resistenza infinita con sezione libera (come previsto)
Con la sezione occupata la resistenza si attesta attorno ad un megaohm. Che mi pare tanto. Soprattutto se di considera che i piedini di entrata di Arduino vengono praticamente cortocircuitati a massa.

Si, confermo che i rilevatori sono quelli che hai postato.

Questa settimana non riesco a fare altri test per impegni di lavoro. La prossima dovrei riuscire a dedicare un pò di tempo.

Tu riusciresti a replicare il mio test sui tuoi rilevatori di presenza, per vedere che valori hai con tratta occupata?

Grazie per la tua disponibilità.
Daniele - Plastico delle terme

Avatar utente
antogar
Messaggi: 148
Iscritto il: mercoledì 31 dicembre 2014, 13:52
Nome: Antonino
Regione: Campania
Città: Castellammare di Stabia
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#23 Messaggio da antogar »

Più che resistenza devi verificare col tester che il pin di Arduino è a 5v con tratta libera e va a 0 con tratta occupata. Se ciò non succede misura la tensione ai capi dei diodi, devi avere un valore di 1.4 v quando la loco occupa la tratta.
Altra prova che puoi fare è collegare l'uscita del fotoaccoppiatore ad una resistenza da 1-10k e l'altro capo della resistenza a +5V e fare la stessa misura

Ciao
Antonino

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#24 Messaggio da anam »

Ok, grazie.
La prossima settimana farò le prove che mi hai suggerito e ti aggiornerò sugli esiti.
Ciao
Daniele - Plastico delle terme

Avatar utente
anam
Messaggi: 57
Iscritto il: martedì 25 marzo 2014, 19:32
Nome: Daniele
Regione: Piemonte
Città: Santhià
Stato: Non connesso

Re: Raccolta dati a basso costo da sensori in DCC

#25 Messaggio da anam »

Trovato il problema!
Ho eliminato il condensatore elettrolitico e tutto si è risolto.
Il condensatore impediva il corretto funzionamento (in digitale) del diodo dell'optoisolatore. Infatti, la tensione tra massa e l'entrata di Arduino dai 5v a binario libero, scendeva a 2,60 a binario occupato. Tolto il condensatore, la tensione tra i due capi scende a 0,45 a binario occupato e Arduino interpreta correttamente il segnale.
Grazie per i suggerimenti.
Daniele - Plastico delle terme

Torna a “DIGITALE”