comunicazione seriale tra 2 arduino con moduli wireless AUREL

buonasera a tutti, sto realizzando un sistema "semplice" di telemetria per un modello r/c.
sto utilizzando;

PARTE RICEVENTE:
arduino 2009 e come "ricevente" un modulo AUREL RX 4MM5, e collegato a sua volta ad un display di 4x16.
e sul display saranno indicati i valori letti di 4 sensori

PARTE TRASMITTENTE
Arduino mini light 05 alcuni sensori (2 lm35 , e un sensore giri, e voltaggio batterie)

ho dei dubbi sul collegamento e la trasmissione dei dati seriali da inviare e far visualizzare in un determinato posto sul display della ricevente, ho cercato su internet e qui, e si utilizzano molte librerie e alcuni dicono che bisogna utilizzare codifiche per migliorare la stabilità.
ora ho bisogno di un aiuto.. mentre aspetto l'arduino mini ho provato su breadboard a trasmettere dati seriali con arduino, e collegando l'oscilloscopio all'uscita del modulo ricevente ho ritrovato l'onda quadra, quindi il sistema "funziona" manca la parte software che direzione dovrei prendere?

ciao e grazie mille

Ciao, dai un'occhiata alla sezione MegaTopic, Pitusso ha fatto un ottimo lavoro sulla comunicazione wireless, potrebbe esserti di valido aiuto.

ciao michele, avevo già letto tutta la guida, infatti avevo dei dubbi non tanto a livello hardware ma software in primis.
perchè non ho idea di come dovrei iniziare a far trasmettere i dati di continuo su seriale e farli ricevere e metterli nel posto giusto sul display.
fin che si tattava di trasmettere sul netmonitor dallo stesso arduino non c'erano problemi, ma ora mi sono bloccato e sto leggendo a tutta forza google / forum varii ecc ecc, ma più leggo più mi confondo le idee!

vanniboy:
manca la parte software che direzione dovrei prendere?

Ciao,
prova a vedere la libreria virtualwire.h è la più usata per quanto riguarda le trasmissioni RF a 433MHz. Se invece vuoi seguire la strada indicata da Michele devi usare i moduli bluetooth.

*http://www.open.com.au/mikem/arduino/

ciao, grazie per la drita, mi sto studiando per bene tutto,in settimana mi arriva l'arduino mini light 05 e inizio a fare delle prove.
ho un dubbio però, il modulo wireless ricevente ha come livello logico alto circa 3V al posto di 5..... è un problema?
(anche se nel datasheet dicono che l'out dovrebbe essere uguale alla tensione di alimentazione)

Nel datasheet vedo solo che come livello logico alto di uscita c' è un minimo di 0.8V, comunque anche se sono 3V max riesci a leggere lo stesso il dato. L' importante è che se anche il modulo trasmittente funziona a 3V tu non trasmetta segnali al di sopra di questo valore, altrimenti potresti danneggiarlo.

in realtà sul datasheet parlano di tensione di ingresso nominale di 5V e uscita logica alta è uguale alla tensione in ngresso -0,4V ovvero 4,6V.
ma queste prove sono state effettuate su breadboard con alimentazione stabilizzata e uscita con una resistenza e un led e oscilloscopio.
a vuoto senza carico, solo sonda oscilloscopio, funziona regolare! ad ogni modo se funziona anche con 3V mi va bene, basta che si riescano a scambiare i dati.
oggi è arrivato l'arduino mini e l'adattatore usb-rs232 e in settimana mi ci applico un po su e vedo che cosa riesco a combinare !
ciao e grazie

p.s ma qualcuno sa aprossimativamente che distanze si coprono in linea d'aria con questi moduli con la trasmittente da 10mw ?

Io con 60mW a 2.4GHz senza antenna direttiva supero il km

Io con i moduli Aurel a 433MHz senza antenna direttiva non supero il m
(Trasmettitore in bagagliaio auto, ricevitore sul cruscotto) :0

acik:
Io con i moduli Aurel a 433MHz senza antenna direttiva non supero il m
(Trasmettitore in bagagliaio auto, ricevitore sul cruscotto) :0

Che modello sono ? che antenna usi? a quanto li alimenti ?

ratto93:
Che modello sono ? che antenna usi? a quanto li alimenti ?

Dovrei cercarli, ho traslocato da poco e ancora non ho ritrovato tutto.
In ogni caso sono quelli consigliati per trasmissione dati con la seriale.
Quando li ho presi erano gli unici disponibili in negozio fatti apposta per la trasmissione dati.
Un modulo solo ricevitore, l' altro modulo solo trasmettitore.

ciao a tutti,facendo delle prove con gli skech di virtualwire trasmetto e ricevo, ma per ricevere al posto di ricevere "hello" ricevo dei numeri con degli spazi, e ogni numer4o corrisponde a una lettera.... perchè? file originali wirtalwire..

Di che tipo è la variabile che contiene i dati in arrivo?
Come usi la Serial.print()?

Se abbiamo la stessa libreria vedo che nell'esempio receiver c'è questa situazione:

Serial.print(buf[i], HEX);

In pratica stai dicendo di stampare quello che arriva codificato in esadecimale.
Prova con

Serial.print(buf[i]);

vanniboy:
in realtà sul datasheet parlano di tensione di ingresso nominale di 5V e uscita logica alta è uguale alla tensione in ngresso -0,4V ovvero 4,6V.
ma queste prove sono state effettuate su breadboard con alimentazione stabilizzata e uscita con una resistenza e un led e oscilloscopio.
a vuoto senza carico, solo sonda oscilloscopio, funziona regolare! ad ogni modo se funziona anche con 3V mi va bene, basta che si riescano a scambiare i dati.
oggi è arrivato l'arduino mini e l'adattatore usb-rs232 e in settimana mi ci applico un po su e vedo che cosa riesco a combinare !
ciao e grazie

p.s ma qualcuno sa aprossimativamente che distanze si coprono in linea d'aria con questi moduli con la trasmittente da 10mw ?

Mi permetto di commentare, per trasmettere dei dati telemetrici potresti pensare di usare come modulazione che usiamo noi radio amatori, la rtty si trova la libreria che ho scaricato ma che ho ancora seri problemi a far funzionare, ma appena torno a casa mi ci rimetto su per fare qualche test, in questo modo ti basterebbe un radio scanner per ricevere i dati anche senza modulo aurel, per la questione delle distanze, distanze ci sono molti fattori per calcolare la distanza, ma te la faccio un po facile, in 433 mhz siamo in piena banda UHF significa che la forma d'onda che noi stiamo usando e lunga 70cm perchè ti faccio questa appunto, perchè devi sapere che per trasmettere bene su una tale banda devi accordare l'antenna come in una chitarra con il diapason, nel nostro caso l'antenna per essere ottimale alla trasmissione in quella frequenza deve essere lunga almeno 1/4 dell'onda di frequenza quindi come ti ho detto in precedenza se l'onda e lunga 70cm dato che siamo su la banda dei 433mhz per trasmettere più lontano possibile dovresti creare un antenna lunga 17,5cm sicuramente si dovrà mettere un carico induttivo per portare l'antenna a un impedenza di 50 ohm per non sovraccaricare i finali di esso se no scalda come un fornetto per la pizza. Spero di esser stato utile. Per queste operazioni in radio frequenza sarebbe utile procurarsi uno strumento poco costoso ma molto utile denominato Rosmetro che serve a misurare il rapporto delle onde stazionarie sul dipolo (antenna) che deve essere pari a 1:1 cioè significa che la potenza erogata deve andare tutta su l'antenna e non disperdersi in calore, leggendo qua e la tra i miei contatti con pochi mW si possono percorrere anche diversi km anche centinai, un piccolo appunto lavorare in wifi cioè in 2,5ghz si incorre in una scocciatura, la quale si risolve con antenne preformanti, parabole comprese per amplificare il vostro segnale. Vado in modalità OT tempo fà incuriosito da una propagazione strana su la gamma dei cellulari, dove potevo collegare ripetitori della Orange CH da casa mia, ho preso una parabola sat sono andato su una altura lo direzionata verso la francia e come per miracolo riuscivo a usare i loro ripetitori, questo esempio vuole farvi capire che anche l'antenna ha un suo perchè. buon divertimento :slight_smile:

comunque, la mia necessità non sta nel trasmettere parole ma numeri, e di fatto devo integrare la conversione di temperatura della sonda lm35 con questo:

int temp = 0;
int lm35 = 0;
temp = analogRead(lm35);
int tempc = (5.0 * temp * 100.0)/1024.0;
delay(100);

e fin qui ok, ma al momento di integrarlo nel codice così :

void loop()
{

int temp = 0;
int lm35 = 0;
temp = analogRead(lm35);
int tempc = (5.0 * temp * 100.0)/1024.0;
delay(100);
const char *msg = tempc;

digitalWrite(13, true); // Flash a light to show transmitting
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, false);
delay(200);
}

mi ritorna questo errore:

invalid conversion from 'int' to 'const char*'

scusate magari sarà facile, ma io sono un po nuovo con questo linguaggio :slight_smile: