Codifica e decodifica inviato via radio usando virtualwire - Come Fare?

Rieccomi, sto realizzando tre strumenti di misura che mi inviano le letture fatte via radio utilizzando dei moduli aurel e la libreria VirtualWire. La mia intenzione sarebbe d'avere tre arduino + TX a trasmettere ed un unico Arduino + RX + LCD a ricevere.

Con un Arduino che invia ed uno che riceve non ho problemi, il tutto va alla grande. Ora vorrei ampliare il sistema in modo da avere tre diversi Arduino in tre posti diversi ad inviare ed un unico Arduino a ricevere sul quale monterei un selettore rotativo per selezionare quale dei 3 tx visualizzare. (se porto da D1 a 1 leggo in TX 1, se 1 su D2 il tx2, e così via...)

Bene... qualcuno ha idea di come potrei creare delle codifiche in modo tale da creare "unico" il segnale in TX/RX?

Si può fare? Esiste qualche tutoria? non riesco a trovare nulla.

Di seguito la perte del codice relativa al TX.

 // Read and store Sensor 1 data
  Sensor1Data = IrmsL1;
  // Convert integer data to Char array directly 
  itoa(Sensor1Data,Sensor1CharMsg,10);

 digitalWrite(13, true); // Turn on a light to show transmitting

 char buff[8];    
  sprintf(buff,"%d ",Sensor1Data);
  const char *msg1 = buff;
  vw_send((uint8_t *)msg1, strlen(msg1));
  vw_wait_tx(); // Wait until the whole message is gone
 const char *msg2 = "  ";                 
 vw_send((uint8_t *)msg2, strlen(msg2));  
 vw_wait_tx(); // Wait until the whole message is gone

  lcd.setCursor(0,1);
  lcd.print(IrmsL1);
 digitalWrite(13, false); // Turn off a light after transmission

Grazie

Vedo un problema di base. Senza un modulo TX anche sull'Arduino master, da usare per spedire la richiesta all'Arduino slave selezionato col selettore, dovresti leggere continuamente i dati spediti e memorizzarli da qualche parte, scartando quelli che non appartengono allo slave selezionato. Però che succede se i 3 slave spediscono i dati nello stesso istante? Il modulo RX della Aurel è in grado di discriminare da chi rivece i dati e di ricevere correttamente solo una trasmissione per volta?

Mi piacerebbe che i moduli tx trasmettessero in ogni 3sec, ed io, in base alla posizione del selettore rotativo andrei a decodificare solo i dati del tx che mi interessa.

La coppia di TX/RX che vende futurashop (vedi link) http://www.futurashop.it/Allegato_PDF_IT/7100-FT842K.pdf http://www.futurashop.it/Allegato_PDF_IT/7100-FT843K.pdf fanno una codifica con sedici combinazioni impostabili da dip switch e vedo che utilizzano un PIC per fare il tutto. A parte che io non conosco per niente i PIC, avrei comunque bisogno di farlo con Arduino. Grazie

non è che potresti avere un problema di intasamento della rete? Nel senso se tutti gli arduino trasmettessero nello stesso momento

elvis: ... La coppia di TX/RX che vende futurashop (vedi link) http://www.futurashop.it/Allegato_PDF_IT/7100-FT842K.pdf http://www.futurashop.it/Allegato_PDF_IT/7100-FT843K.pdf fanno una codifica con sedici combinazioni impostabili da dip switch ...

Aspetta un'attimo, secondo me' stai confondendo un paio di cose ... tu parli, se non ho capito male, di trasmettere dei dati ... ma i moduli che hai linkato non ti permettono di selezionare 16 canali di trasmissione, ti permettono solo di trasmettere (e ricevere) fino a 16 codici sullo stesso canale per attivare fino a 16 diversi rele ... il canale rimane lo stesso ... almeno, il trasmettitore ha una coppia di dip per selezionare qualcosa, ma il ricevitore no, o almeno io non ne vedo negli schemi ...

Era più o meno un esempio per cercare di spiegarmi...

Il mio problema è che la frequenza TX/RX è una (869Mhz), più che altro perché fisicamente il modulo ricevente dev'essere tascabile ed il tutti mi deve star dentro al contenitore http://www.ebay.it/itm/Enclosure-Kit-Arduino-compatible-R3-Uno-1602-Serial-LCD-Module-and-Case-/130933982148?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item1e7c4603c4&_uhb=1 é comunque la 896 è l'unica frequenza ceh mi permette di arrivare a 500mW...

Comunque, ritornando a noi, è possibile creare dei pacchetti dove, che ne so... sparo una delle mie..., è codificato in modo tale che l'RX capisce chi è il TX?

Potresti farlo con selezione manuale come dicevi all'inizio, ma sarebbe necessario il ricevitore a 4 canali, oltre che i trasmettitori ... sul sito della aurel c'e' il modulo TX che e' usato in quei kit, ma sembra non esserci alcun ricevitore corrispondente al trasmettitore, il che e' piuttosto strano ...

In alternativa, credo che sia possibile lo stesso, ma dofresti aggiungere un'indicativo o "indirizzo" diverso per ogni TX, e gestirli via software tramite RX ...

Un'altra cosa, che puo sembrare stupida ma non lo e' ... non impostare esattamente lo stesso tempo di intervallo nei 3 TX, senno quando si sovrappongono ci rimangono per parecchio tempo ... con tempi leggermente diversi, puo sempre capitare che si sovrappongano, ma al masimo ci restano per un ciclo o due ;)

leouz: non è che potresti avere un problema di intasamento della rete? Nel senso se tutti gli arduino trasmettessero nello stesso momento

E' quello che cercavo di spiegargli anch'io.

Etemenanki: non impostare esattamente lo stesso tempo di intervallo nei 3 TX, senno quando si sovrappongono ci rimangono per parecchio tempo ... con tempi leggermente diversi, puo sempre capitare che si sovrappongano, ma al masimo ci restano per un ciclo o due ;)

Se si usa l'Arduino, bisogna considerare l'imprecisione del risonatore integrato sulla scheda per cui scegliendo tempi brevi, nell'ordine dei secondi, l'accavallamento avverà molto velocemente, più di quanto si immagini, e si ripeterà sempre con tempi differenti. Quindi diventa un problema distinguere l'una o l'altra trasmissione.

Come modulo TX ho trovato questo http://www.futurashop.it/Allegato_PDF_IT/8110-TX869BOOST.pdf e per l'RX Aurel abbina il http://www.futurashop.it/Allegato_PDF_IT/8110-RX-FM8SF869.pdf.

Il TX ha 4 canali (869.45; 869.50; 869.55; 869.60Mhz) mentre l'RX non ha la possibilità di cambiare frequenza in quanto credo sia a "larga banda". A dir il vero, ma non sono un'esperto, gli 0,05Mhz di scostamento di frequenze del TX non credo siano sufficienti per non crear interferenze alle frequenze vicina.

In somma, mi sembra di capire che la strada dei TX/RX Aurel sia percorribile solo per una coppia "fissa".

Se usassi degli Xbee? Potrei fare quello che ho in mente? Chiaramente dovrei rifare tutto... :-( ed, in primis, dovrei iniziare a conoscere gli Xbee...

Suggerimenti? Ma come si fa con gli antifurti wireless?

Grazie

leo72: Se si usa l'Arduino, bisogna considerare l'imprecisione del risonatore integrato sulla scheda per cui scegliendo tempi brevi, nell'ordine dei secondi, l'accavallamento avverà molto velocemente, più di quanto si immagini, e si ripeterà sempre con tempi differenti. Quindi diventa un problema distinguere l'una o l'altra trasmissione.

Per quello suggerivo tempi non identici ... faccio un'esempio, se spedisco dati da 2 TX ogni 5 minuti, ed i 2 TX non sono precisi, anche facendoli iniziare 2,5 minuti distaccati, si avra' un possibile slittamento ... se a forza di slittare, i due dati, mettiamo dopo una settimana si sovrappongono, data la lentezza dello slittamento potrebbero rimanere sovrapposti anche mezza giornata o piu, ed in quel tempo non potresti leggere nulla ... se invece ne mando uno ogni 5 minuti ed uno ogni 5 minuti e 10 secondi, si sovrapporranno entro poco tempo, magari solo un'ora o due, ma resteranno sovrapposti solo per un ciclo, per cui perderei una lettura ogni paio d'ore anziche' mezza giornata di letture consecutive ... lo stesso con 3, anche se con maggiori perdite, sarebbero comunque, salvo casi molto sporadici, perdite di una o massimo due letture ogni tanto ...

elvis: quei TX hanno in genere bande di soli 25KHz, se non ricordo male ...

Mannaggia! Ho capito che sulla stessa frequenza non posso utilizzare vari tx. Devo per forza utilizzare frequenze leggermente diverse. Cos che purtroppo non è facilmente realizzabile...

Ma con i moduli xbee riuscirei ad avere 3 tx diversi e leggere tutti i dati su unico rx?

Oppure, sparo un'altra soluzione, ma avrei bisogno di un vostro consiglio, potrei avere in 2 tx "satellite" che inviano i segnali ad un tx "master" che mi convoglia i dati di tutti i tre tx ad un unico Rx?

Salve a tutti.

Chiedo una cortesia.

Sapreste indicarmi un link dove trovare, elencati e commentati, tutti i comandi della libreria virtualwire ?

Grazie infinite.

Erlanzell: ... Sapreste indicarmi un link dove trovare, elencati e commentati, tutti i comandi della libreria virtualwire ? ...

Li trovi QUI

Guglielmo

@Etem: è un cane che si morde la coda. Inviando i dati con poco sfalsamento avrai sì una sovrapposizione che dura poco ma nell'arco della giornata avrai diversi accavallamenti. Inviando dati molto distanziati fra loro, avrai accavallamenti lunghi ma più distanziati fra loro. Non c'è una soluzione unica :sweat_smile:

Grazie molte.

L'ho già stampato e lo sto divorando.

Esistono per caso anche siti in italiano che hanno voluto cimentarsi a esplicare la libreria virtualwire, dettagliando i comandi ?

Elvis, io ti suggerirei un approccio un po' diverso: chiamiamolo Master-Slave.

L'Arduino Master funge da raccogliotore di dati: è lui che, a cadenza fissa, interroga gli Aduino Slave e ne aspetta la risposta. Gli Aduino Slave, invece, sono sempre in attesa (ricezione) e rispondono solo se nel messaggio inviato dal Master è contenuto il loro identificativo.

Non ci sono possibilità di equivocazione (che, comunque, possono essere gestite con una ripetizione dell'interrogazione da parte del Master) ed il canale è sempre libero poiché usato in modo half duplex.

Rieccomi, per il momento mi accontento di un solo tx ed un solo rx. Il mio interesse era avere 4 tx ricevuti da un solo rx tascabile (tipo questo http://www.ebay.it/itm/Enclosure-Kit-Arduino-compatible-R3-Uno-1602-Serial-LCD-Module-and-Case-/130933982148?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item1e7c4603c4&_uhb=1 ).

Ho quindi parlato telefonicamente con l'ufficio tecnico della Aurel che costruisce moduli tx rx e mi hanno detto che per fine anno avranno a catalogo una coppia di ricetrasmettitori sulla frequenza 869 con quattro frequenze selezionabili. Spero siano abbastanza piccoli da poter essere inseriti nel case di cui sopra.

Non mi resta che aspettare un po'...