Wireless Communication between 2 Arduino Boards (500M max distance )


I have been playing around with a 434MHz RF Transmitter and434MHz RF Receiver from Sparkfun so that I can transmit and receive RF signals between two Arduino micro controllers. After a couple of unsuccessful attempts using the tutorials from the product page, I finally managed got the equipment to work using the transmitter.pde and receiver.pde code from the Arduino Library. I modified the receiver code to receive ASCII intend of HEX responses from the receiver.

The equipment I needed:
1 Arduino Uno R3
1 Arduino Duemilanove
1 RWS-371-6 Wireless Hi Sensitivity Receiver Module (434MHz)
1 TWS-BS Wireless Hi Power Transmitter Module (434MHz)
1 Breadboard
11 Wires
2 USB cables to connect to the Arduinos






I experimented with some different configurations but I managed to get results connecting the transmitter to the 3.3V or 5V power supply and connecting the data lead to pin 12 on the Arduino. The receiver could only be connected to the 5V power supply and the data lead to pin 11 on the Arduino.
















 Reciever code

// client.pde
//
// Simple example of how to use VirtualWire to send and receive messages
// with a DR3100 module.
// Send a message to another arduino running the 'server' example, which
// should send a reply, which we will check
//

#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()
{
const char *msg = "hello";
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
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
Serial.println("Sent");
digitalWrite(13, false);
// Wait at most 200ms for a reply
if (vw_wait_rx_max(200))
{
if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;
// 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("");
}
}
else
Serial.println("Timout");
}


Transmitter Code


// transmitter.pde
//
// Simple example of how to use VirtualWire to transmit messages
// Implements a simplex (one-way) transmitter with an TX-C1 module
//

#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);
}

Comments

Popular posts from this blog

LCD/LED TV FLASH BIOS / EPROM programming with Serial Flash Memory - W25Q32FV

Sony Bravia 55" Double image / Image Flickering ( CKV - Clock Vertical Signal ) LED Panel Repairing

Calculate RPM with Hall effect Sensor