arduinoTXrx

 

En esta entrada explicaremos como utilizar la libreria virtual_wire con una sencilla aplicación que consiste en prender o apagar un led de manera inalámbrica.


Lo primero que deben hacer es descargar la libreria virtualwire desde este enlace :
 
 

Posteriormente deben extraer la carpeta y ubicarla dentro del directorio de instalacion de Arduino dentro de la carpeta libraries, En nuestro caso sería C:\Program Files (x86)\Arduino\libraries.

Componentes

2 Arduino UNO

1 LED

1 Resistencia ( Puede ser de 1K )

1 Transmisor RF 434Mhz WRL-10534 Lo pueden conseguir en Sparkfun

1 Receptor RF 4800bps  434Mhz WRL-10532 Lo pueden conseguir en Sparkfun

1 Pulsador 

En Colombia conseguimos estos módulos por medio del  Sitio EMB-IDEAS.

Diagrama de Pines de los Módulos
pintx
pinrx

Conexión Con Arduino

Se puede poner una antena en cada módulo, esta es opcional , depende de que tanto rango de distancia manejen, el fabricante recomienda antenas de 13cm para un rango de 150 m.

 

TRANSMISOR

pinestx

PULSADOR HACIA ARDUINO TX

pulsador tx bb

En esta figura podemos ver como es la configuración del pulsador y la resistencia hacia el pin 11 de Arduino

RECEPTOR

pinesrx

Finalmente nuestras conexiones quedaron de la siguiente manera:

foto1

Como pueden ver el transmisor va a ser alimentado por medio de una fuente de 9Vdc mientra que el Receptor lo alimentaremos con nuestro cable USB.

Ahora debemos subir los programas para cada uno de los dispositivos.

Programa para Transmisor:

#include <VirtualWire.h>
char*flag;
void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  pinMode(11,INPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(2000);
}
int entrada=0;
void loop(){
entrada=digitalRead(11);
if(entrada==HIGH){
flag="1";
vw_send((uint8_t *)flag, strlen(flag));
vw_wait_tx(); 
digitalWrite(13,HIGH);
Serial.print(flag);
}else{
  
 digitalWrite(13,LOW); 
}
}

Programa para Receptor:

#include <VirtualWire.h>
void setup()
{
  
  Serial.begin(9600);
    
    vw_set_ptt_inverted(true); 
    vw_set_rx_pin(12);
    vw_setup(2000);  
    
pinMode(11, OUTPUT);
    vw_rx_start();       
}
 void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if(vw_get_message(buf, &buflen)) 
    {
   Serial.print("Mensaje: ");
      if(buf[0]=='1'){
        digitalWrite(11,HIGH);
        delay(1000);
Serial.print(buf[0],HEX);
     Serial.print(" ");
  
  
   
      }
      
    }else{
      
      digitalWrite(11,LOW);
        
      
    }
  
}

Por medio del Serial Monitor puede observar el mensaje que esta llegando en formato Hexadecimal. 

Hemos terminado la aplicación, a continuación dejamos un video demostrativo: