El uso de ondas de radio con Arduino para transmitir o recibir dtos de forma inalámbrica ahora es posible con los módulos FS1000A y el XD-RF-5V. En este post les voy a explicar como enviar datos y recibir datos via ondas de radio con Arduino. Vamos a necesitar un emisor y un receptor.
He adquirido un transmisor FS1000A, el cual muestro en la siguiente imagen:
El receptor es un dispositivo similar, el modelo XD-RF-5V:
El utilizar estos dos dispositivos se hace muy fácil a través del uso de la librería VirtualWire.
La misma la podemos encontrar en la siguiente dirección:
http://www.open.com.au/mikem/arduino/VirtualWire/VirtualWire-1.14.zip
La conexión del transmisor y del receptor es sencilla.
Ahora, cuando hallamos descargado y agregado la librería VirtualWire a las librerías de Arduino, haremos una prueba enviando un mensaje desde el emisor hasta el receptor. El receptor lo tenemos que conectar a la computadora y utilizar el monitor serial para interpretar la información recibida.
El transmisor lo podemos conectar a una batería de 9 voltios. El mensaje que enviaremos será «Panama Hitek».
El código para el emisor es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <VirtualWire.h> void setup(){ vw_set_ptt_inverted(true); vw_setup(2000); //Tiempo de espera vw_set_tx_pin(3); //Pin donde se conecta el transmisor } void loop() { const char *msg = "Panama Hitek"; //Mensaje a enviar vw_send((uint8_t *)msg, strlen(msg)); vw_wait_tx(); //Se hace la transmisión de datos delay(1000); //Se espera un segundo } |
Lo subimos a la placa que será nuestra emisora. Luego tomamos otra placa, la que será nuestro receptor y subimos el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <VirtualWire.h> void setup() { Serial.begin(9600); //Se inicia la comunicación serial vw_set_ptt_inverted(true); vw_setup(2000); //Tiempo de espera vw_set_rx_pin(3); //Pin donde se conecta el Arduino vw_rx_start(); //Se inicia la recepción de datos } void loop() { uint8_t buf[VW_MAX_MESSAGE_LEN]; //Tamaño del mensaje uint8_t buflen = VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) //Se verifica si hay //mensaje disponible para ser leido { int i; for (i = 0; i < buflen; i++) //Se leen todos los caracteres { Serial.write(buf[i]); //Se guarda la información en una //matriz } Serial.println(); //Se imprime el mensaje en el monitor //serial } } |
Estos dispositivos pueden ser utilizados a distancias relativamente grandes, más se requiere amplificar la capacidad de transmisión y recepción de los dispositivos por medio de antenas.
A continuación se muestra un video sobre una prueba de funcionamiento, sin antena:
Las posibilidades que tenemos con estos módulos son infinitas, todo dependerá de la creatividad que tengamos y de las ideas que nos propongamos realizar. El uso de ondas de radio con Arduino es muy útil para proyectos con sensores donde los datos obtenidos se transmiten de forma inalámbrica.
Espero que la información proporcionada sea de su completo agrado.
Saludos.
Buenas TArdes: Se puede accionar un rele directamente con el kit sin usar decodificador, a lo sumo una onda triangular, Neceito un circuito muy sencillo. Gracias
Gracias. Cual es la distancia máxima de recepción entre los arduinos y como podría amplificar el alcance?
Se utilizaron las librerías propias de estos dispositivos
Verifica las librerías
Hola! Disculpa yo tengo una tarjeta con 5 sensores y necesito que esa informacion se vaya transmitiendo constantemente, veo que en tu codigo lo transmites como msj o texto pero como puedo cambiarlo a que trasmita los datos de los sensores?
Puedes pasar los datos de los sensores a cadenas de texto
Hola me podrias ayudar con la conexion de un sensor pir??
Hola disculpa quería saber como enviar audio a través de estos módulos y como cambiaría la programación
La información presentada en el post es suficiente para deducir la respuesta a esa pregunta
Hola, muy interesante el proyecto que mostraron, yo estoy montando un proyecto similar pero que pasaría si no envió un texto (const char *msg = «Panama Hitek»; //Mensaje a enviar) y quiero enviar un dato (podría ser un numero que se presiona en un teclado) como lo recibo del otro lado??
Muchas gracias
Puedes transformar el dato que quieres enviar a const char. En lo personal recomiendo usar otro módulo, el CC1101. Es mucho mejor que estos que usamos aca
Muchas gracias, si logre realizar lo que queria con estos modulos. Desde un arduino conecto un teclado, lo recibe el otro y lo muestra en la pantalla.
Excelente
mucgas gracias primeramente, una consulta yo puedo transmitir un archivo ? si quiero transmitir un sonido a una radio se podria hacer? explico actualmente estoy tratando de armar una «bomba» de airsoft y quiera que cuando se arme dicho aparato transmita a las radios de x canales «la bomba ha sido plantada» o algo asi y cargar ese archivo de audio en el arduino
Hola. Creo que sí se puede, pero no sé como hacerlo. Nunca he tenido la necesidad. Te toca investigar, amigo
Yo se como