Attenzione : vengono venduti componenti, molto simili nell'aspetto, che lavorano a 315 MHz. Il codice e' identico per le due versioni di frequenza, l'importante e' non mischiare un trasmettitore a 433 MHz ed un ricevitore a 315 MHz
La libreria di riferimento per questo tipo di componenti e' VirtualWire
Le connessioni sono molto semplice perche' sono sufficienti tre fili
Vcc (da 5 a 12 V)
GND
Dati
(il ricevitore ha 4 pin ma i due pin centrali normalmente portano entrambi il segnale dati)
Al momento dell'acquisto conviene comprare componenti provvisti di antenna (nella foto si vede che l'antenna del trasmettitore e' stata aggiunta in un secondo momento mentre il ricevitore ha una antenna spiralata)
Di default il pin di trasmissione e' settato sul D12 mentre il pin di ricezione di default e' sul pin D11 (questi possono essere modificato tramite vw_set_tx_pin(nr_pin) e vw_set_rx_pin(nr_pin);
Nella foto un esempio di trasmissione tra due Arduino Nano
In rosso trasmettitore, in verde ricevitore |
Attenzione: i componenti vengono venduti senza antenna. E' necessario aggiungere una antenna di 17 cm per i sensori a 433 MHz e 21 cm per i sensori a 315 MHz
Prove effettuate in campo hanno mostrato che il segnale si segue in spazio aperto fino a oltre 150 m con alimentazione a 5 V e baud rate di 200 bit/s
Trasmettitore
--------------------------------------------------------------
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");
// 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);
}
--------------------------------------------------------------
Ricevitore
--------------------------------------------------------------
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");
// 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);
}
}
--------------------------------------------------------------
--------------------------------------------------------------
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600); // Debugging only
Serial.println("setup");
// 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);
}
}
--------------------------------------------------------------
Salve ottimo articolo complimenti. Per quanto riguarda di fare attenzione alla frequenza dei trasmettitori non riesco come fare per capire di quale si tratta. Io ho comprato 10 trasmettitori e 10 ricevitori ed erano già mischiati tra loro.
RispondiEliminaTi faccio questa domanda perchè è da molto tempo che sto cercando di provare la comunicazione con diversi articoli trovati sulla rete ma ancora non vedo nessun risultato. Potresti gentilmente aiutarmi?
Bella domanda, io per svariati motivi (il primo fra tutti e' il prezzo) compro spesso componenttistica Arduino su E-Commerce cinese. Costano poco ma la documentazione e' praticamente inesistente e l'intergrato e' siglato con un identificativo non facilmente riconoscibile. Una volta ho fatto anche io confusione ma avendo solo due coppie di tx/rx con un semplice try and test ne sono venuto a capo. Spiacente di non essere di maggiore aiuto
RispondiEliminaRiguardando le foto mi sono accorto di una cosa, sul quarzo del trasmettitore (almeno sui miei) e' incisa la frequenza di trasmissione
RispondiEliminaCome esempio vedere la differenza tra questo (il primo a 315 ed il secondo a 433)
http://www.dx.com/p/tdl-9906a-315mhz-wireless-transmitter-module-green-126105#.VJAgmNKG8tE
e questo
http://www.dx.com/p/433mhz-wireless-transmitter-module-superregeneration-for-arduino-green-149254#.VJAfltKG8tE
Buongiorno,
RispondiEliminaho provato a ripetere questo progetto. La trasmissione avviene senza problemi ma non ricevo nulla. In realtà ho provato altri progetti utilizzando questi moduli wireless ma da 1 settimana non mi va più la parte della ricezione. Ho comprato altre coppie Tx e Rx per vedere se il problema fosse il loro malfunzionamento, ma con tutti ho questo problema delle ricezione. I codici e gli schemi circuitali sono corretti perchè come detto prima fino a 10 giorni fa andavano. Saprebbe darmi qualche consiglio per risolvere questo problema?
Grazie e buona giornata.
Buongiorno,
RispondiEliminaho provato a ripetere il suo progetto con i moduli wireless ma ho problemi con la parte del ricevitore. In realtà ho provato altri progetti semplici per testare questi moduli ma ho sempre problemi con il Rx. Un paio di settimane fa le cose invece andavano senza problemi, e all'improvviso ho iniziato ad avere problemi. Pensando fosse causato dal malfunzionamento dei moduli ne ho comprati altri ma ho sempre problemi con la parte di ricezione. Saprebbe darmi gentilmente qualche consiglio per poter risolvere questo problema? La ringrazio e le auguro una buona giornata.
difficile da capire il problema...peraltro non ho capito come ha fatto a determinare che il problema e' nella ricezione e non nella trasmissione (molto banalmente se l'emettitore non manda segnali non ci sara' mai ricezione). Come indicato nel precedente commento ci possono essere problemi ad accoppiare le giuste frequenze e comunque se comprati su mercato cinese ci puo' anche essere il problema di un difetto di origine del modulo (mi capita con una certa frequenza di comprare prodotti cinesi a bassissimo costo ma di altrettanto bassa qualita'/durata)
Elimina