RF trasmitter and receiver

Tutto sull'Arduino e la sua grande famiglia... Atmel AVR, Microchip PIC, ecc...

Moderatori: ragno, tapino, alez, zulu, davidea

Avatar utente
alez
Messaggi: 3074
Iscritto il: 09 mag 2007, 17:11

Re: RF trasmitter and receiver

Messaggio da alez »

Digli di stare attento a non farli cadere nel sugo :lol:
Ciao alez
Avatar utente
alez
Messaggi: 3074
Iscritto il: 09 mag 2007, 17:11

Re: RF trasmitter and receiver

Messaggio da alez »

Finalmente sono riuscito a mettere le mani sugli insettini, ho iniziato da quelli economici (quelli che fanno solo TX -> RX ad 1 canale).

Per prima cosa vi dico che questo sito va bene come esempio e per cultura generale sui moduli ma contiene una libreria VirtualWire obsoleta, ci ho sbattuto un po la testa ma non sono riuscito a compilare con successo ne con IDE Arduino 1.0 ne con 0.23:

http://www.pjrc.com/teensy/td_libs_VirtualWire.html

Dopo un po di ricerche finalmente sono riuscito a trovare questo sito, stesso autore ma librerie aggiornate:

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

Un po di foto:

shield barbona millefori TX 433mhz, DATA collegato al PIN 12 di Arduino, +5V, GND

Immagine

shield barbona millefori RX 433mhz, +5V, DATA collegato al PIN 2 di Arduino, GND

Immagine

test TX-RX via_filo (praticamente la libreria VirtualWire ma con un REAL wire :lol: :lol: :lol: ), pin GND in comune e DATA in comune

Immagine

se col filo funziona, test TX-RX via_radio

Immagine

vi riporto anche la lunghezza delle antenne che ho messo io:

8,5 cm sul TX
15 cm sul RX

Immagine


Ho provato ad allonanarmi di una ventina di passi e continua a funzionare correttamente sulla console seriale di Arduino:

Immagine

non fate caso al 46 iniziale invece del 68, ho cambiato lo sketch per prova da "Hello" a "Fello"

Ecco anche gli sketch che ho usato per i test, leggermente modificati rispetto a quelli trovati negli Examples

Transmitter:

Codice: Seleziona tutto

// transmitter.pde
//
// Simple example of how to use VirtualWire to transmit messages
// Implements a simplex (one-way) transmitter with an TX-C1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: transmitter.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>
const int transmit_pin = 12; // DATA del trasmettitore sul PIN 12 di Arduino

void setup()
{
    Serial.begin(9600);	  // Debugging only
    Serial.println("setup");

    vw_set_tx_pin(transmit_pin);  
    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec
}

void loop()
{
    const char *msg = "hello";

    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);
}
Rispetto allo sketch originale, ho aggiunto le righe

Codice: Seleziona tutto


...
const int transmit_pin = 12; // DATA del trasmettitore sul PIN 12 di Arduino
...
vw_set_tx_pin(transmit_pin); 





Receiver:

Codice: Seleziona tutto

// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>
const int receive_pin = 2; // DATA del ricevitore sul PIN 2 di Arduino

void setup()
{
    Serial.begin(9600);	// Debugging only
    Serial.println("setup");

    vw_set_rx_pin(receive_pin);
    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
	int i;

        digitalWrite(13, true); // Flash a light to show received good message
	// Message with a good checksum received, dump it.
	Serial.print("Got: ");
	
	for (i = 0; i < buflen; i++)
	{
	    Serial.print(buf[i], HEX);
	    Serial.print(" ");
	}
	Serial.println("");
        digitalWrite(13, false);
    }
}
Rispetto allo sketch originale, ho aggiunto le righe

Codice: Seleziona tutto

...
const int receive_pin = 2; // DATA del ricevitore sul PIN 2 di Arduino
...
    vw_set_rx_pin(receive_pin);


Lo sketch TX funzionava anche senza la definizione del tx pin, mentre l'rx non funzionava correttamente.

Buon smanettamento!

P.s.: quello di sinistra (TX) è un Arduino Duemilanove mentre quello di destra (RX) è un Uno, il tutto compilato con IDE Arduino 1.0.
Ciao alez
Avatar utente
ragno
Messaggi: 3017
Iscritto il: 20 gen 2007, 09:43
Località: Marte e dintorni
Contatta:

Re: RF trasmitter and receiver

Messaggio da ragno »

Ah, che figata le librerie, con 4 righe di codice sei in etere. :lol: :lol: :lol:
Stiamo parlando dei moduli piu' "cicciosi" non di quelli NRF?


ciao
vdr: 1.4.7+extpatch54 (pensionata), 1.7.27 (yavdr 0.4)
Percorri la via che porta al sole,
e non camminare sui sentieri oscuri.

E quando penso che sia finita,
è proprio allora che comincia la salita.
Avatar utente
alez
Messaggi: 3074
Iscritto il: 09 mag 2007, 17:11

Re: RF trasmitter and receiver

Messaggio da alez »

Moduli più bavosi, quelli solo TX e solo RX separati, guarda la foto delle antenne
Ciao alez
Avatar utente
alez
Messaggi: 3074
Iscritto il: 09 mag 2007, 17:11

Re: RF trasmitter and receiver

Messaggio da alez »

Altra scoperta che potrebbe eviatare di farvi impazzire con la libreria VirtualWire:

i PIN 11 e 10 NON VANNO usati, servono per le funzioni interne di TIMER 1 dell'atMega, avevo dei led collegati a quei pin e sembrava un'albero di natale, meno male che sapevo che lo sketch funzionava, ho fatto tutto il resto e poi ho incluso la libreria VirtualWire nel mio sketch.


Forse crea problemi anche il PIN 9 ma non ho testato, altre info qui:

http://arduino.cc/forum/index.php?topic=49177.0
Ciao alez
Avatar utente
alez
Messaggi: 3074
Iscritto il: 09 mag 2007, 17:11

Re: RF trasmitter and receiver

Messaggio da alez »

Altro hint: la libreria VirtualWire a quanto pare parla stringese, quindi se si vuole trasmettere int come serve a me, è necessario convertire gli int in stringa all'atto della trasmissione e le stringhe in int all'atto della ricezione, è spiegato abbastanza bene in questo esempio che usa le funzioni

itoa()

e

atoi()

http://genericnerd.blogspot.it/2012/07/ ... -with.html

Presto pubblico il codice che le usa, ho quasi terminato il trasmettitore...
Ciao alez
Avatar utente
alez
Messaggi: 3074
Iscritto il: 09 mag 2007, 17:11

Re: RF trasmitter and receiver

Messaggio da alez »

Altro test positivo: ho provato a piazzare il trasmettitore nel garage dei miei genitori ed il ricevitore collegato ad un portatile per monitorare il segnale.

Nel vano scale, mentre salivo, non funzionava ma posizionando il ricevitore in camera da letto (dove poi andrà sistemato definitivamente) il segnale arriva :D

Praticamente gli insettini riescono ad attraversare 2 piani, non male per essere oggetti così a basso costo e bassa potenza! (prima o poi devo decidermi a misurarne l'assorbimento)

Ho terminato i prototipi hardware su millefori, ora penso che userò due XINO per realizzare il trasmettitore e ricevitore definitivi, sfruttando la parte millefori dovrei riuscirci senza aggiungere uno shield sopra, cosa molto comoda!
Ciao alez
Avatar utente
alez
Messaggi: 3074
Iscritto il: 09 mag 2007, 17:11

Re: RF trasmitter and receiver

Messaggio da alez »

Siori e siore sono arrivate le antenne barbone, cercate sulla baya

"10pcs 433MHz Helical antenna"

e sarete serviti :lol:
Ciao alez
Rispondi