Moduli RF (Radio Frequency)

GRAZIE PITUSSO, dopo avermi fatto conoscere lo spacciatore polacco questa è un'altra tua grande PERLA di saggezza !!!

di nulla, considerato che non son neppure perle.. mie :stuck_out_tongue:

tienici agiornati, io sono interessantissittisso, fammi sapere se serve una mano col codice (credo che interrupt e robaccia simile siano stranecessari per una libreria fatta seria)

Ciao scusate l'assenza ma sto scoppiando a lavoro e la sera non voglio vedere pc. Come vanno que moduli che hai preso? Quali esperimenti stai facendo?

Exurgit, per ora ancora nulla, in quanto sto aspettando un altro arduino da un mio amico che dovrebbe prestarmelo , perchè da come ho capito non posso provare questi moduli con una sola scheda arduino!!

Mi confermi?

p.s. Ma tu per imparare a farli comunicare quale guida hai visto?

Ciao

Per semplicità io li ho sempre usati uno per trasmettere e l'altro per ricevere.
Quindi con 2 arduino

Avevo fatto anche una sorta di telecomando per un paio di relay e funzionava anche bene :D. òìunico problema era la durata della batteria.

So che l'amico exurgit stava provando a far funzionare sia TX che Rx (anche se separati) sullo stesso microcontrollore, ma credo che avesse problemi inerenti al codice.

Come libreria ti consiglio di usare la virtualwire, l'unica che sembra funzionare egregiamente. Con la Newsofserial avevo dei problemi.
Nel link della discussione che avevo aperto io, e che pitusso ti ha ripostato, ci sono tutti i link ai documenti inerenti quei modulini radio.

puoi tranquillamente usare lo stesso micro per inviare e ricevere, tanto il loro baud rate non è altissimo e gli interrupt non dovrebbero sovrapporsi.
La comunicazione via PC avviene con la seriale hardware, quindi non dovrebbe influire sulle librerie come NewSofSerial o virtualwire.
probabilmente i problemi non si sono avuti con la NewSoftSerial ma con la SoftSerial, che non usa gli interrupt e quindi è facile perdere messaggi.

Sarebbe bello poter dare un'occhiata a del codice già scritto per questi moduli, per avere una base di partenza per farci una buona libreria

Salve dragone ha praticamente risposto in quanto l'ho abbiamo preparato insieme ma la libreria usata e' stata virtualwire dovrei provare questa newsoftserial spero di finire presto questo periodo pieno a lavoro per potermi dedicare al mio hobby. Se riesco vi posto il codice di entrambi i modulo su singolo arduino ma che pero non mi funzionava così vediamo insieme di trovare la soluzione

Per il codice non c'è problema...

Intanto procuratevi Virtualwire, Qui un bel documento che spiega come usare la libreria e poi qui la libreria

Per le connessioni dei moduli qui : http://www.sparkfun.com/datasheets/RF/KLP_Walkthrough.pdf

Il codice è in allegato al post.

Consiste in una parte TX e una RX

Il TX va collegato al pin 6 di arduino, un led per segnalare quando si trasmette sul pin 13 di arduino (nella foto non c'è, l'ho aggiunto in un secondo momomento), e poi servono due pulsanti sui Pin digitali 2 e 3 (prendete anche un filo di circa 15 cm e usatelo come antenna esterna per il trasmettitore). Posto una foto

L' RX va collegato al pin 7 di un altro arduino, poi sul pin digitale 2 io avevo collegato la luce del garage e sul 3 la porta del garage. (ovviamente per prova, non l'ho mica lasciato li ]:smiley: ]:smiley: ), poi come su prendete un filo di circa 15 cm e usatelo come antenna esterna per il ricevitore).

Se non avete o non volete usare i pulsanti... c'è sempre la tastiera :smiley:

Sono sicuro che questa possa essere una buona base di partenza perchè qualche esperto ne tiri fuori qualcosa di buono.
Aspettiamo che Exurgit poi posti quello per la comunicazione bidirezionale. :grin:

P.S. Per chi volesse approfondire l'argomento ricordo che c'è anche questo post : http://arduino.cc/forum/index.php/topic,55324.0.html

tx.pde (1.25 KB)

rx.pde (955 Bytes)

pensavo fossero più complicati, invece li usi proprio come se fossero una seriale..

Ragazzi scusate l'assenza, in questi giorni sono occupatissimo ma a breve tornerò operativo... Promesso!!! :slight_smile: comunque sto leggendo le risposte...

flameman:
ho letto che avete dei problemi nel rx+tx, posso chiedere di che tipo sono ?

se hanno usato la SoftSerial (senza New) NON usa gli interrupt per ricevere i comandi, ma esiste una funzione bloccante. Quindi se arrivando dati mentre NON sei in ascolto, vengono persi.

poi valgono alcuni accorgimenti particolari:

CPU Usage and Interrupt Latency Requirements
NewSoftSerial requires nearly 100% CPU time while transmitting or receiving data. Low interrupt latency is also required for reliable reception, which limits all other libraries and code using interrupts. For these reasons, UART Serial should always be used if only a single serial port is needed.

NewSoftSerial should not be used at slow baud rates. Because interrupts are disabled for approximately 9.5 bit times, slow baud rates can impose too much interrupt latency on other code. Baud rates below 4800 can interfere with basic time keeping functions which make millis(), micros(), and delay() function.

Fast baud rates can become unreliable for reception if other interrupt-based libraries impose too much latency, either by using too much CPU time inside their interrupts, or by keeping interrupts disabled. For example, the OneWire library must disable interrupts for 80 us for some operations. The bit time must be more than double the worst case interrupt latency for reliable reception.

Even the timer0 interrupt for time keeping can take as long as 10 us in its worst case (on Teensy, Arduino's code is slower), which means even 57600 could suffer incorrect reception. Other interrupt-based code can further interfere.

Of course, other latency sensitive libraries, like Servo, will not perform reliably if NewSoftSerial is blocking interrupts while other code requires low latency response.

Using UART Serial is always best, but if NewSoftSerial must be used, baud rates between 9600 to 38400 may be the most compatible.

insomma, se si usa un atmega stand alone meglio lasciare la seriale HW al modulo e usare una simulata per cominicare col pc (magari a 9600 bps).
Queste raccomandazioni sono per la NewSoftSerial, ma visto che dipendopno dall'harware, valgono anche per la VirtualWire

inizialmente avevo usato la NewSoftSerial.. la softserial mai usata. Ma avevo dei problemi...

Ecco quali.. DOMOTICA: Comunicazione tra arduini tramite RF lowcost - #86 by dr4gone - Generale - Arduino Forum

Credo che non fosse stabilito nessun protocollo come lo è in in virtualwire per stoppare la comunicazione o farla partire..

Ciao a tutti, innanzitutto vorrei capire gli schemi di collegamento di questi moduli:

Moduli RF 433 MHz

Secondo voi posso rifarmi direttamente a qualcosa del genere:

Il problema è che vicino ai pin di comunicazione non ci sono sigle tipo GND Vcc etc...

Quindi aspetto notizie da voi, prima di bruciare i miei modulini. :slight_smile:

sicuro che non ci sia scritto niente dietro?

Cmq sembrano uguali a questi.,, http://www.seeedstudio.com/depot/433mhz-rf-link-kit-p-127.html quindi prova... male che vada fanno una fumata :grin: :grin:

P.s. http://garden.seeedstudio.com/index.php?title=433Mhz_RF_link_kit#Schematic
Convinto sempre di più che puoi collegarli in quel modo...

Grazie dragone!

Per quanto riguarda l'antenna? è indispensabile se voglio fare prove con un modulo TX e uno RX sullo stesso arduino, quindi non a grande distanza?

Ciao

se sono a vista non è necessaria specialmente se sono sullo stesso arduino.. Ma far comunicarli con lo stesso arduino, mi sa che non ha molto senso... e quasi sicuramente non è possibile trasmettere e ricevere contemporaneamente sullo stesso microcontrollore per via della natura della libreria virtualwire...

Secondo me un altro senso ce l'avrebbe mettere un TX e RX su un arduino e un TX e RX su un altro.. in modo tale che se ARDUINO1 trasmette, ARDUINO2 riceve ed esegue, Quando ARDUINO2 ha eseguito , trasmette l'esito ad ARDUINO1 che riceve....

P.S. l'antenna comunque non è niente di complicato...
Basta che trovi un cavo telefonico.. lo smembri, e tagli 15 cm di filo :smiley: e ti ritrovi due antenne pronte e funzionanti :smiley:

sìsì , è normale che non ha molto senso collegare entrambi i moduli allo stesso Arduino, il problema è che ancora non ho un 2° arduino a disposizione :frowning: .. E volevo testare lo stesso il funzionamento di questi due moduli!!!

Si l'avevo capito dai post precedenti, ma non credo che funzioni...
Cmq Prova :smiley: ..

Ragazzi ho provato a seguire il walkthrough su sparkfun ma naturalmente i miei modulini non funzionano..

La situazione è questa:

ho 2 arduino 2009, ognuno collegato a un diverso pc!!

sull'arduino 1 ho installato il Receiver, e ho caricato questo codice:

/*
* Simple Receiver Code
* (TX out of Arduino is Digital Pin 1)
* (RX into Arduino is Digital Pin 0)
*/
int incomingByte = 0;
void setup(){
//2400 baud for the 434 model
Serial.begin(2400);
}
void loop(){
// read in values, debug to computer
if (Serial.available() > 0) {
incomingByte = Serial.read();
Serial.println(incomingByte, DEC);
}
incomingByte = 0;
}

Sull'arduino 2 ho messo il transmitter e ho caricato questo codice:

/*
* Simple Transmitter Code
* This code simply counts up to 255
* over and over
* (TX out of Arduino is Digital Pin 1)
*/
byte counter;
void setup(){
//2400 baud for the 434 model
Serial.begin(2400);
counter = 0;
}
void loop(){
//send out to transmitter
Serial.print(counter);
counter++;
delay(10);

Ho collegato il pin del transmitter al TX (pin digitale 1 dell'arduino 2) e il pin del reveiver al RX(pin digitale 0 del arduino 1)

Sul transmitter leggo semplicemente dei valori sballatissimi, tipo questi:

Valori Receiver:

240
224
254
248
248
254
248
252
7
248
252
252
124
240
63
252
248
252
0
240
248
63
31
255
252
252
0
0
0

Il fatto che mi fa capire che sicuramente sto sbagliando è che se stacco l'alimentazione dal transmitter, il receiver continua a ricevere!

Ho provato anche a cambiare il baudrate a 9600 ma le cose cambiano di poco, sono sempre valori a caso!! :frowning:

Ragazzi mettendo il baudrate a 9600 in entrambi gli sketch (naturalmente anche nel serial monitor) ed eliminando il delay(10); che c'era nello sketch del transmitter, i valori che prende il receiver sono buoni, anche se non riesce a leggere tutti i valori da 0 a 255, qualcuno lo dimentica...!! :smiley:

Però significa che almeno i moduli dovrebbero funzionare.

Una cosa che non continuo a capire è il perchè se non alimento il transmitter, il receiver vede sempre qualcosa in arrivo sulla seriale e quindi stampa questo valore misterioso :slight_smile: ...Grazie per l'aiuto!!!