Modulos de RF de muy bajo coste compatible con Arduino


Probablemente  el lector conocerá  modulos de   RF de gran rendimiento  como son los modulos Xbee, pero en esta ocasión  vamos a tratar algo muy diferente  en coste y simplicidad como son los   siguientes modulos de RF:

Muchos de los módulos de RF más baratos se venden con demandas muy poco realistas de  velocidad de datos y distancia máxima de comunicación, y, a veces con muy poco (o incluso incorrecta)documentación. Gracias a la libreria  VirtualWire podremos  usar  estos módulos a desempeñar  su uso   (pero en este caso el viejo dicho se aplica: “usted obtiene lo que paga”).

Por ejemplo, los módulos 315 MHz se muestran arriba se documentaron con sólo esta imagen.


La única “documentación” para $ 4.90 módulo par se muestra arriba

Estos módulos trabajaron muy fiables cuando están cerca uno del otro  de hecho cuando estén separados por unos 20 metros, con muebles de oficina normal, y un cable de 13 cm conectado a cada uno (en la mitad de los 10 a 15 cm sugerido), fueron capaces de comunicarse, pero aproximadamente el 20% de los mensajes fueron corrompidos.

Tal vez el uso de mejores antenas podrían ayudar, pero cada tarjeta tiene una bobina de carga que parece estar diseñado para antenas relativamente cortas, y ningún otro tipo de documentación que parece existir sobre las mejores antenas.

En resumen  estos módulos pueden funcionar bien para bajo rendimiento y  aplicaciones no críticas. Para aplicaciones más exigentes, módulos de RF más sofisticados (y más caros) deben ser considerados (Xbee).

 

Electronica de los modulos

 La señal de salida del receptor indica si llega  escucha la energía de un transmisor. Puede ser conectado a cualquier pin, pero no puede conducir los pins con un LED adjunto.

Transmisores suelen tener sólo un único pin de datos, que activan la salida de RF cuando altos. Algunos módulos de módulos de 2 vías, con un transmisor y receptor también tiene un transmisor permite pin.

VirtualWire utiliza Timer1, lo que significa que algunos pines PWM que requieren Timer1 no funcionará. Otras bibliotecas utilizando Timer1 serán incompatibles con VirtualWire. En Teensy 3.0, un IntervalTimer se utiliza, lo que evita conflictos con los temporizadores utilizados por PWM.

Bordo Recibir
Perno
Transmitir
Perno
Transmitir
Enable Pin
PWM Pasadores
Afectado
Teensy 3.0 Cualquier excepto 13 Cualquier Cualquier
Teensy 2.0 Cualquier excepto 11 Cualquier Cualquier 4, 14, 15
Teensy 1.0 Cualquier excepto 6 Cualquier Cualquier 15, 17, 18
Teensy + + 2.0 Cualquier excepto 6 Cualquier Cualquier 25, 26, 27
Teensy + + 1.0 Cualquier excepto 6 Cualquier Cualquier 25, 26, 27

 

Uso básico

VirtualWire funciona un poco diferente que la mayoría de las bibliotecas de Arduino. Muchas de las funciones individuales se utilizan, y sus nombres son algo diferentes. Afortunadamente, cada uno es simple.

Funciones de configuración

vw_set_tx_pin (transmit_pin)

Configurar el pin de transmisión. Por defecto es el pin 12. Bla

vw_set_rx_pin (receive_pin)

Configurar el pin recibir, Default es el pin 11. En Teensy 2.0, pin 11 no debe ser utilizado porque la mayoría de los módulos receptores no pueden trabajar correctamente con el LED naranja en ese pin.

vw_set_ptt_pin (transmit_en_pin)

Configure la transmisión activan pin, o “pulsar para hablar”. Por defecto es el pin 10.

vw_set_ptt_inverted (true)

Configure la polaridad “pulsar para hablar”.

vw_setup (2000)

Comience a utilizar todos los ajustes e inicializar la biblioteca. Esto es similar a la función de “comenzar” de otras bibliotecas. Todos los pines se deben configurar antes de llamar a esta función.

Funciones de transmisión

vw_send (mensaje, longitud)

Transmitir un mensaje. “Mensaje” es una matriz de los bytes a enviar, y “longitud” es el número de bytes almacenados en la matriz. Esta función devuelve inmediatamente y el mensaje se envía poco a poco por un proceso de fondo a base de interrupción.

vw_tx_active ()

Devuelve true si se envía el mensaje, o false si el transmisor no está activa. Puede utilizar esta después de enviar un mensaje a probar cuando ha terminado de ser transmitida.

vw_wait_tx ()

Espere a que el mensaje a transmitir en su totalidad. A menudo, el enfoque más simple es llamar a esto después de vw_send.

Funciones de recepción

vw_rx_start ()

Activar el proceso receptor. Usted debe llamar a esta función antes de que ocurra cualquier recepción. Un proceso de fondo a base de interrupción se inicia que supervisa la recepción de datos.

vw_have_message ()

Devuelve true si se ha recibido el mensaje. Esto es similar a la función de “disponible” de la mayoría de otras bibliotecas.

vw_wait_rx ()

Espere a que un mensaje sea recibido. Esto sólo se devolverá cuando se ha recibido un mensaje, si no se va a esperar para siempre.

vw_wait_rx_max (TIMEOUT_MS)

Espere a que un mensaje, pero renunciar después de “TIMEOUT_MS”. Devuelve true si se ha recibido un mensaje, o false si el tiempo de espera transcurrido.

vw_get_message (buf, y buflen))

Leer el último mensaje recibido. Esto debería ser llamado sólo cuando se conoce un mensaje a ser recibido con cualquiera de las 3 funciones anteriores. “Buf” es una matriz en donde se copia el mensaje. “Buflen” debe tener un tamaño máximo de la matriz en el momento de entrada, y al regresar se retured el número de bytes realmente copiados. La propia función devuelve true si el mensaje fue verificado correctamente, o false si se ha recibido un mensaje, pero parece haber sido dañado.

vw_rx_stop ()

Deshabilitar el proceso receptor.

La documentación VirtualWire oficial (PDF), explica que estas funciones y otras consideraciones de uso.

Programa de ejemplo – Transmitir

 # Include <VirtualWire. H>

 const int led_pin = 11;
 const int transmit_pin = 12;
 const int receive_pin = 2;
 const int transmit_en_pin = 3;

 void setup ()
 {
 / / Inicia el IO e ISR
 vw_set_tx_pin (transmit_pin);
 vw_set_rx_pin (receive_pin);
 vw_set_ptt_pin (transmit_en_pin);
 vw_set_ptt_inverted (true) / / Necesario para DR3100
 vw_setup (2000); / / Bits por segundo
 }

 cuenta de bytes = 1;

 void loop ()
 {
 msg char [7] = {'h', 'e', 'l', 'l', 'o', '', '#'};

 msg [6] = cuenta;
 digitalWrite (led_pin, HIGH); / / flash una luz para mostrar transmisora
 vw_send ((uint8_t *) msg, 7);
 vw_wait_tx (); / / Espera a que el mensaje se ha ido
 digitalWrite (led_pin, LOW);
 delay (1000);
 cuenta = cuenta + 1;
 }

Programa de ejemplo – Recibir


 # Include <VirtualWire. H>

 const int led_pin = 6;
 const int transmit_pin = 12;
 const int receive_pin = 11;
 const int transmit_en_pin = 3;

 void setup ()
 {
 delay (1000);
 . Serie empezar (9600); / / Depuración sólo
 . Serie println ("setup");

 / / Inicia el IO e ISR
 vw_set_tx_pin (transmit_pin);
 vw_set_rx_pin (receive_pin);
 vw_set_ptt_pin (transmit_en_pin);
 vw_set_ptt_inverted (true) / / Necesario para DR3100
 vw_setup (2000); / / Bits por segundo

 vw_rx_start (); / / Inicia el PLL receptor funcionamiento
 }

 void loop ()
 {
 uint8_t buf [VW_MAX_MESSAGE_LEN];
 uint8_t buflen = VW_MAX_MESSAGE_LEN;

 if (vw_get_message (buf, y buflen)) / / no-bloqueo
 {
	 int i;

 digitalWrite (led_pin, HIGH); / / flash una luz para mostrar un buen mensaje recibido
	 / / Mensaje con una buena suma de comprobación recibida, imprimirlo.
	 . Print serie ("Got:");

	 for (i = 0; i <buflen; i + +)
	 {
	 . Serie de impresión (buf [i], HEX);
	 . Print serie ('');
	 }
	 . Serie println ();
 digitalWrite (led_pin, LOW);
 }
 }

La documentación VirtualWire oficial (PDF) se debe leer para más información.

 

Fuente  aqui

Anuncios

Un comentario el “Modulos de RF de muy bajo coste compatible con Arduino

  1. Gustavo dice:

    BUenas tardes, me complace saludarles y a la vez pedirles por favor, me orienten, arme hace ya un tiempo una placa Pinguino2550, y me gustaría poder usar la librería Virtualwire, pero la verdad no le se entrar, entiendo que es un tema de lo siguiente:

    “…C:/PinguinoX.3/p8/include/pinguino/libraries/VirtualWire.h:212:4: error: #error Platform not defined!”
    y:
    “…C:/PinguinoX.3/p8/include/pinguino/libraries/VirtualWire.h:230:3: error: #error Platform unknown!”

    mucho sabre agradecer si me dan luces como incluir la placa pinguino2550 en la libreria, que me imagino es es lo que esta sucediendo.

    Desde ya un abrazo y muchas gracias.

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s