Tutorial - Transmisor / Receptor de radiofrecuencia XD - FST / XD - RF - 5V

XD - FST
Este transmisor de bajo costo nos permite realizar una comunicación inalámbrica para transmitir datos en un volumen moderado.



Algunas características son descritas a continuación:

# Frecuencia de transmisión : 433 MHz
# Consumo de corriente : < 40 mA
# Alcance : 100 m con una antena de 17 cm / 7 m sin antena
# Alimentación : 3 V a 12 V.
# Velocidad de transmisión : < 10 Kbps.
# Método de trabajo : ASK
# Poder de transmisión : 25 mW
# Modo de resonancia : SAW

XD - RF - 5V
Este receptor de bajo costo nos permite realizar una comunicación inalámbrica para recibir datos en un volumen moderado.



Algunas características son descritas a continuación:

# Frecuencia de transmisión : 433 MHz
# Consumo de corriente : < 5.5 mA
# Alcance : 100 m con una antena de 17 cm / 7 m sin antena
# Alimentación : 5 V
# Velocidad de transmisión : < 9.6 Kbps.
# Método de trabajo : ASK / OOK
# Sensibilidad : -100 dBm (50 ohms)

USO DE LA LIBRERÍA "VIRTUALWIRE"
Para este tipo de comunicaciones en la plataforma Arduino, se usa la librería "VirtualWire" que permite tanto administrar la red como configurarla. Para más información puedes ir al siguiente link: "http://www.airspayce.com/mikem/arduino/VirtualWire/".  Algunas de las funciones se explican a continuación:

# vw_set_tx_pin(pin_de_transmisión) : Configura el pin de transmisión. El pin por defecto es el 12.
# vw_set_rx_pin(pin_de_recepción) : Configura el pin de recepción. El pin por defecto es el 11.
# vw_set_ptt_pin(pin_de_permiso_para_transmisión) : Configura el pin de permiso para transmitir, o "push to talk". El pin por defecto es el 10.
# vw_set_ptt_inverted(true) : Configura la polaridad del pin de permiso o "push to talk".
# vw_setup(numero) : Inicia todas las configuraciones de la librería. Todos los pines deben estar configurados antes de usar esta función. La velocidad de transmisión por defecto debe ser 2000, pero puede usarse otra.

# vw_send(mensaje, longitud) : Transmite un mensaje como un arreglo de bytes, con una longitud correspondiente al número de bytes que son guardados en el arreglo a mandar.
# vw_tx_active() : Retorna verdadero si el mensaje ha sido mandado, o falso si el transmisor no está activo. Se puede usar después de haber mandado el mensaje para comprobar cuando la transmisión ha sido concluida.
# vw_wait_tx() : Espera a que el mensaje sea totalmente transmitido. Esta función generalmente puede ser usada después de la función "vw_send()".

# vw_rx_start() : Activa el proceso de recepción de datos. Esta función debe ser llamada antes de comenzar cualquier comunicación. Al momento de iniciar el proceso se genera una interrupción que monitorea la recepción de los datos.
# vw_have_message() : Retorna verdadero si el mensaje ha sido recibido. Esto es similar a la función "available" de la mayoría de librerías.
# vw_wait_rx() : Espera a que el mensaje sea recibido. Sólo retornará cando el mensaje sea recibido, en otro caso, puede seguir para siempre.
# vw_wait_rx_max(timeout_ms) : Espera a un mensaje, pero se rinde después de un tiempo determinado "timeout_ms". Retorna verdadero si el mensaje ha sido recibido, o falso si el mensaje no llega dentro del periodo de espera.
# vw_get_message(buf, &buflen) : Lee el último mensaje recibido. Esta función sólo debe ser llamada cuando el mensaje se sabe que ha sido recibido usando alguna de las funciones mencionadas anteriormente. "buf" es un arreglo donde el mensaje es copiado. "buflen" debe tener el porte máximo de ingreso de datos, y retorna además la cantidad de bytes que han sido copiados. La función devuelve verdadero si el mensaje verificado es correcto, o falso si el mensaje recibido parece que ha sido corrompido.
# vw_rx_stop() : Deshabilita el proceso de recepción.

A partir de lo descrito antes, desarrollamos una aplicación simple de lectura entre un transmisor y un receptor de la palabra "hola" por medio del puerto serial.

La conexión del transmisor es la siguiente:

# PIN 12 : Arduino UNO => ATAD : XD - FST
# GND : Los dos GND deben estar conectados.
# 5V : Los dos 5V deben estar conectados


El programa usado para este nodo es el siguiente:
/*
   PROGRAMA EMISOR DE PRUEBA
   CONEXION:
             DATA(XD - FST): Arduino Pin 12 
             GND: Conectar los GND del Arduino y XD - FST
             VCC: Conectar los 5V del Arduino y VCC del XD - FST
   
   El siguiente programa nos ayuda a realizar una tranmision de la palabra "hola" a un receptor por
   medio de un modulo XD-RF-5V (receptor) y un XD-FST (emisor), para luego ser visualizado el mensaje
   en la pantalla del puerto serial.
             
   Autor: Renato H.
   http://beetlecraft.blogspot.pe/
  
   El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera 
   ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor
*/

#include <VirtualWire.h> // Libreria de manejo de comunicacion inalambrica 

const int tx = 12;     // Pin asignado para la transmision
const int led_tr = 13; // Variable de declaracion del pin correspondiente al led

void setup() {
  pinMode(led_tr, OUTPUT); // Configuracion del pin 13 como salida digital
  vw_set_tx_pin(tx);       // Pin de transmision
  vw_setup(4000);          // Inicio de comunicacion a 2000 bps
}

void loop() {
  const char *mensaje = "hola";                 // Puntero del char 'mensaje'
  digitalWrite(led_tr, true);                   // Enciende el led mientras transmite
  vw_send((uint8_t *)mensaje, strlen(mensaje)); // Hace salto a el espacio que ocupa el char con * 
                                                // y le dice que encontrará algo de 8 bits con uint8_t
  vw_wait_tx();                                 // Espera al enviar todo el mensaje
  digitalWrite(led_tr, false);                  // Apaga el led cuando termina de transmitir
  delay(500);                                   // Espera de 500 ms
}
La conexión del receptor es la siguiente:

# PIN 12 : Arduino UNO => DATA : XD - RF - 5V
# GND : Los dos GND deben estar conectados.
# 5V : Los dos 5V deben estar conectados


El programa usado para este nodo es el siguiente:
/*
   PROGRAMA RECEPTOR DE PRUEBA
   CONEXION:
             DATA(XD - RF - 5V): Arduino Pin 12 
             GND: Conectar los GND del Arduino y XD - RF - 5V
             VCC: Conectar los 5V del Arduino y VCC del XD - RF - 5V
   
   El siguiente programa nos ayuda a realizar una tranmision de la palabra "hola" a un receptor por
   medio de un modulo XD-RF-5V (receptor) y un XD-FST (emisor), para luego ser visualizado el mensaje
   en la pantalla del puerto serial.
             
   Autor: Renato H.
   http://beetlecraft.blogspot.pe/
  
   El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera 
   ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor
*/

#include <VirtualWire.h> // Libreria de manejo de comunicacion inalambrica 

const int rx = 12;     // Pin asignado para la recepcion
const int led_tr = 13; // Variable de declaracion del pin correspondiente al led

void setup() {
  pinMode(led_tr, OUTPUT); // Configuracion del pin 13 como salida digital
  Serial.begin(9600);      // Inicio de comunicacion serial a 9600 bps
  vw_set_rx_pin(rx);       // Pin de recepcion
  vw_setup(4000);          // Configuracion de la recepcion a 2000 bps
  vw_rx_start();           // Comienzo de la comunicacion
}

void loop() {
  uint8_t mensaje[VW_MAX_MESSAGE_LEN];     // Variable de almacenamiento de datos
  uint8_t mensajelen = VW_MAX_MESSAGE_LEN; // Maximo numero de bytes en el mensaje
  
  if (vw_get_message(mensaje, &mensajelen)){ // Si se ha recibido datos con el formato deseado
    digitalWrite(led_tr, true);              // Enciende el led mientras recibe
    String mensaje_salida = "";              // Variable de almacenamiento para conversion de datos
    for (int i = 0; i < mensajelen; i++){    // Lectura de datos recibidos
      mensaje_salida += (char)mensaje[i];    // Llena el string generado con los datos recibidos 
    }
    Serial.print("Mensaje: ");               // Envio del dato convertido al puerto serial
    Serial.println(mensaje_salida);
    delay(200);                              // Espera de 200 ms
    digitalWrite(led_tr, false);             // Apaga el led cuando termina de recibir
  }
}
El resultado en el puerto serial se muestra a continuación:


Autor: 

No hay comentarios:

Publicar un comentario