13
01 de abril 2009 VirtualWire Copyright (C) 2008-2009 Mike McCauley Documentación para la VirtualWire 1.3 biblioteca de comunicaciones para Arduino.  1.0 Introducción Arduino es un microcontrolador de bajo coste con el hardware de código abierto, ver http://www.ardu-  ino.cc. VirtualWire es una biblioteca de comunicaciones para Arduino que permite múltiples Ardu-  ino para comunicarse mediante transmisores y receptores de RF de bajo costo.  El documento describe la biblioteca VirtualWire y cómo instalarlo y usarlo. 2.0 Información general  VirtualWire es una biblioteca de Arduino qu e proporciona funciones para enviar mensajes cortos, sin  abordar, retransmitir o reconocimiento, un poco como UDP sobre wireless, usando ASK  (Modulación por desplazamiento de amplitud). Es compatible con varios transmisores de radio de bajo costo y receptores. Todo lo que se requiere es transmitir datos, recibir datos y (para los transmisores, la opción-  aliado) un transmisor PTT enable. Se pretende que sea compatible con los Monolithics RF (www.rfm.com) Alambre virtual   protocolo, pero esto no ha sido probado.   No utiliza el Arduino UART. Los mensajes se envían con un mensaje formación preámbulo  longitud y suma de comprobación. Los mensajes se envían con codificación de bits 4-a-6 para un buen equilibrio de CC, y una suma de comprobación CRC para la integridad del mensaje.  ¿Por qué no sólo tiene que utilizar el Arduino UART directamente conectado al transmisor / receptor? Como discutido en la documentación RFM, ASK receptores requieren una ráfaga de impulsos de formación   para sincronizar el transmisor y el receptor, y también requiere un buen equilibrio entre 0s  y 1s en la secuencia de mensaje con el fin de mantener el equilibrio de CC del mensaje.  1 de 13

VirtualWire.en.Es

Embed Size (px)

Citation preview

  • 01 de abril 2009

    VirtualWire

    Copyright (C) 2008-2009 Mike McCauley

    Documentacin para la VirtualWire 1.3 biblioteca de comunicaciones para Arduino.

    1.0 Introduccin

    Arduino es un microcontrolador de bajo coste con el hardware de cdigo abierto, ver http://www.ardu- ino.cc. VirtualWire es una biblioteca de comunicaciones para Arduino que permite mltiples Ardu- ino para comunicarse mediante transmisores y receptores de RF de bajo costo.

    El documento describe la biblioteca VirtualWire y cmo instalarlo y usarlo.

    2.0 Informacin general

    VirtualWire es una biblioteca de Arduino que proporciona funciones para enviar mensajes cortos, sin abordar, retransmitir o reconocimiento, un poco como UDP sobre wireless, usando ASK (Modulacin por desplazamiento de amplitud). Es compatible con varios transmisores de radio de bajo

    costo y receptores. Todo lo que se requiere es transmitir datos, recibir datos y (para los transmisores, la opcin- aliado) un transmisor PTT enable.

    Se pretende que sea compatible con los Monolithics RF (www.rfm.com) Alambre virtual protocolo, pero esto no ha sido probado.

    No utiliza el Arduino UART. Los mensajes se envan con un mensaje formacin prembulo longitud y suma de comprobacin. Los mensajes se envan con codificacin de bits 4-a-6 para un buen

    equilibrio de CC, y una suma de comprobacin CRC para la integridad del mensaje.

    Por qu no slo tiene que utilizar el Arduino UART directamente conectado al transmisor / receptor?

    Como discutido en la documentacin RFM, ASK receptores requieren una rfaga de impulsos de formacin para sincronizar el transmisor y el receptor, y tambin requiere un buen equilibrio entre 0s y 1s en la secuencia de mensaje con el fin de mantener el equilibrio de CC del mensaje.

    1 de 13

  • Visin de conjunto

    UART no proporcionan estos. Trabajan un poco con ASK inalmbrica, pero no tan bien como este cdigo.

    2.1 Hardware soportado.

    Se admite una amplia gama de hardware de comunicaciones. Las que se enumeran golpe estn disponibles

    en puntos de venta comunes en los pases de Australia y otros por menos de $ 10 por unidad. Muchos otros mdulos tambin pueden trabajar con este software.

    Se ejecuta en ATmega8/168 (Arduino Diecimila etc) y ATmega328 y posiblemente otros.

    2.2 Receptores

    RX-B1 (433,92 MHz) (tambin conocido como ST-RX04-ASK)

    FIGURA 1. RX-B1

    Detalles en http://www.summitek.com.tw/ST_SPEC/ST-RX04-ASK.pdf

    2.3 Transmisores:

    TX-C1 (433.92)

    2 de 13 VirtualWire

  • Visin de conjunto

    FIGURA 2. TX-C1

    Detalles en http://www.tato.ind.br/files/TX-C1.pdf

    2.4 Transceptores:

    DR3100 (433.92)

    VirtualWire 3 de 13

  • Descarga e instalacin

    FIGURA 3. DR3100

    Detalles en http://www.rfmonolithics.com/products/data/dr3100.pdf

    3.0 Descarga e instalacin

    La ltima versin de este documento est disponible en

    http://www.open.com.au/mikem/arduino/VirtualWire.pdf

    Descargar la distribucin de VirtualWire

    http://www.open.com.au/mikem/arduino/VirtualWire-1.3.zip

    Para instalar, descomprime la biblioteca a un subdirectorio del hardware / libraries sub- directorio de su directorio de la aplicacin Arduino. A continuacin, inicie el entorno Arduino; debera ver la biblioteca en el men Sketch-> Import Library, y el ejemplo de cdigo en Archivo-> Sketchbook-> Ejemplos-> men Biblioteca-VirtualWire.

    Llamadas de funcin 4.0

    Para utilizar la biblioteca VirtualWire, debe tener

    # Include

    En la parte superior de su dibujo.

    4 de 13 VirtualWire

  • Las llamadas a funciones

    4.1 vw_set_tx_pin

    extern vw_set_tx_pin void (pin uint8_t);

    Ajuste el pin IO digital para utilizar los datos de transmisin. El valor

    predeterminado es 12.

    4.2 vw_set_rx_pin

    extern vw_set_rx_pin void (pin uint8_t);

    Ajuste el pin IO digital para utilizar para recibir datos. El valor

    predeterminado es 11.

    4.3 vw_set_ptt_pin

    extern vw_set_ptt_pin void (pin uint8_t);

    Ajuste el pin IO digital para utilizar para activar el transmisor (pulsar para hablar). El valor

    predeterminado es 10. No todos los transmisores requieren PTT. El DR3100 hace, pero el TX-B1 no.

    4.4 vw_set_ptt_inverted

    vaco extern vw_set_ptt_inverted (uint8_t invertido);

    Por defecto, el pin PTT est en alto cuando el transmisor est activado. Esta bandera fuerzas que bajo cuando el transmisor est activado. Se requiere para el DR3100.

    4.5 vw_setup

    extern vw_setup vaco (velocidad uint16_t);

    Inicia el software VirtualWire, para funcionar a velocidad bits por segundo. Llame a este una vez en su setup () despus de cualquier vw_set_ * Llamadas. Debe llamar vw_rx_start () despus de esto antes de recibir los mensajes.

    4.6 vw_rx_start

    extern void vw_rx_start ();

    Inicie el receptor. Debe hacerlo antes de poder recibir mensajes. Cuando un men- sabio est disponible (buena suma de comprobacin o no), vw_have_message () devolver true.

    4.7 vw_rx_stop

    extern void vw_rx_stop ();

    Detenga el receptor. No se recibirn mensajes hasta vw_rx_start () se llama de nuevo. Guarda los ciclos de procesamiento de interrupcin cuando se sabe que no habr mensajes.

    4.8 vw_wait_tx

    extern void vw_wait_tx ();

    VirtualWire 5 de 13

  • Cdigo de ejemplo

    Bloquear y esperar hasta que el transmisor est inactivo

    4.9 vw_wait_rx

    xtern vaco vw_wait_rx ();

    Bloquee y espere hasta que un mensaje est disponible desde el receptor.

    4.10 vw_wait_rx_max

    vw_wait_rx_max uint8_t extern (milisegundos unsigned long);

    Espere por lo ms milisegundos ms para que un mensaje sea recibido. Devuelve true si un mensaje es disponible.

    4.11 vw_send

    vw_send uint8_t extern (uint8_t * buf, uint8_t len);

    Enviar un mensaje con la longitud dada. Devuelve casi de inmediato, y el mensaje Se enviar en el momento adecuado por las interrupciones. Devuelve true si el mensaje fue aceptado para la transmisin. Devuelve false si el mensaje es demasiado largo (> VW_MAX_PAYLOAD).

    4.12 vw_have_message

    vw_have_message uint8_t extern ();

    Devuelve true si un mensaje no ledo est disponible desde el receptor.

    4.13 vw_get_message

    vw_get_message uint8_t extern (uint8_t * buf, uint8_t * len);

    Si hay un mensaje disponible (buena suma de comprobacin o no), copia hasta * octetos Len para

    buf. Devuelve true si haba un mensaje y la suma de comprobacin era bueno.

    5.0 Cdigo de ejemplo

    Los siguientes ejemplos estn disponibles como ejemplos en la distribucin VirtualWire.

    5.1 transmisor

    Un simple (un solo sentido) del transmisor. Enva un mensaje corto cada 400 ms. Prueba de esto con el el receptor a continuacin.

    # Include void setup () { vw_setup (2000); / / Bits por segundo }

    6 de 13 VirtualWire

  • Cdigo de ejemplo

    void loop () { const char * msg = "hello"; vw_send ((uint8_t *) msg, strlen (msg)); delay (400); }

    5.2 receptor

    Un simple (solo ida) receptor. Espera a un mensaje y lo vuelca contenidos. Prueba de esto con transmisor anteriormente.

    # Include void setup () { Serial.begin (9600); Serial.println ("setup"); 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; / / Mensaje con una buena suma de control recibi, HEX dump Serial.print ("Got:") for (i = 0; i

  • Cdigo de ejemplo

    const char * msg = "hello"; uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; vw_send ((uint8_t *) msg, strlen (msg)); vw_wait_tx (); / / Espera a que el mensaje se ha ido Serial.println ("Enviado"); / / Espera en la mayora de 400ms para una respuesta si (vw_wait_rx_max (400)) { if (vw_get_message (buf, y buflen)) / / no-bloqueo { int i; / / Mensaje con una buena suma de comprobacin recibida, lo

    descarga. Serial.print ("Got respondi:"); for (i = 0; i

  • Detalles de la implementacin

    for (i = 0; i 62.5ns/cycle.

    Para una velocidad de bits de RF de 2.000 bps, necesitar periodo de bit

    500microsec.

    La rampa requiere 8 muestras por periodo de un bit, por lo que necesita 62.5microsec por muestra =>

    inter- tick RUPT es 62.5microsec.

    La longitud mxima del mensaje consiste en

    (6 + 1 + VW_MAX_MESSAGE_LEN) * 6 = 222 bits = 0,11 segundos (a 2000 bps).

    El cdigo consta de un controlador de interrupcin ISR. La mayor parte del trabajo se hace en la

    interrupcin controlador para transmitir y recibir, pero algunos se hace desde el nivel de usuario. Caro funciones como clculos CRC se hacen siempre en el nivel de usuario.

    7.0 Performance

    Las pruebas unitarias muestran que el PLL receptor puede enfrentar a 1 de la muestra en 11 que se

    invierte por ruido sin efectos dainos.

    VirtualWire 9 de 13

  • Conexiones

    Pruebas con TX-C1, RX-B1, mensaje 5 bytes, antena 17cm, sin plano de tierra, 1m por encima del suelo, el espacio libre

    A 10.000 bps el transmisor no funciona correctamente (ISR correr demasiado con frecuencia en 80000/sec?)

    En 9000 bps, las asimetras en el receptor impiden una comunicacin fiable en cualquier dis- cia

    En 7000bps, intervalo de aproximadamente

    90m

    En 5000bps, rango de unos 100 metros

    En 2000bps, Range sobre 150m

    En 1000bps, Range sobre 150m

    Como sugiere la documentacin RFM, cerca de los lmites de la gama, la recepcin est fuertemente influenciado por la presencia de un cuerpo humano en la lnea de seal, y por el mdulo de orientacin cin.

    En toda la gama que hay valores nulos y los puntos fuertes debido a la trayectoria mltiple reflexin. As

    que ... su experiencia puede variar.

    No se encontraron cifras de rendimiento similares para DR3100. 9000bps trabajaban.

    Arduino y TX-C1 transmisor atrae 27 mA a 9V.

    Arduino y el receptor RX-B1 empates 31 mA a 9V.

    Arduino y el receptor DR3100 empates en 28 mA 9V.

    8.0 Conexiones

    Tenga en cuenta que los pines IO se pueden cambiar desde sus valores por defecto (como se muestra) a

    cualquier adecuado Pines IO utilizando el vw_set_ * _pin () llamadas.

    10 de 13 VirtualWire

  • Conexiones

    8,1 receptor RX-B1

    FIGURA 4. Cableado para el receptor RX-B1

    Arduino

    11

    5V

    Gnd

    Datos

    Vcc

    Gnd

    RX-B1

    Hormiga

    8.2 transmisor TX-C1

    FIGURA 5. Cableado para el transmisor TX-C1

    Arduino

    12

    3V3

    Gnd

    Datos

    Vcc

    Gnd

    TX-C1

    Hormiga

    VirtualWire 11 de 13

  • Conexiones

    8.3 DR3100 transceptor

    FIGURA 6. Cableado para DR3100

    Arduino

    11

    12 12k

    10

    3V3

    11

    9

    12

    1

    Gnd 10

    4

    5

    DR3100 Rx de datos

    Tx En

    Ctr1

    Vcc

    Ctr0

    AGC

    Gnd

    RFIO

    RF Gnd

    13

    14

    FIGURA 7. Conexiones DR3100 en breadboard

    12 de 13 VirtualWire

  • Copyright y licencia

    Las conexiones que se muestran para no AGC, 1mW sin electricidad, 2400bps. Tenga en cuenta la

    resistencia de 12k en En serie con Tx para controlar la potencia de salida Si desea utilizar mayores velocidades de datos, necesita

    un resistencia entre el pin 8 del DR3100 a tierra (consulte la documentacin RFM para ms detalles). Si desea utilizar AGC, necesitar un condensador de la patilla 1 del DR3100 a tierra (ver RFM documentacin para ms detalles).

    El mdulo DR3100 se suministra sin ningn tipo de clavijas de conexin, slo montaje en superficie estilo almohadillas. Usted tendr que soldar los pins en el mdulo si desea utilizarlo en un tablero.

    9.0 Copyright y licencia

    Este software es Copyright (C) 2008 Mike McCauley. El uso est sujeto a licencia condi- ciones. Las principales opciones de licencias disponibles son GPL V2 o profesional:

    9.1 Open Source Licensing GPL V2

    Esta es la opcin adecuada si desea compartir el cdigo fuente de su aplicacin con todos los que la distribuya a, y usted tambin quiere darles el derecho a compartir lo que lo utiliza. Si desea utilizar este software bajo licencia de cdigo abierto, debe contri- Ute todo el cdigo fuente a la comunidad de cdigo abierto de acuerdo con la GPL Ver- sin 2 cuando se distribuya la aplicacin. Ver http://www.gnu.org/copyleft/gpl.html

    9.2 Licencias Comerciales

    Esta es la opcin adecuada si va a crear aplicaciones propias y que son no preparado para distribuir y compartir el cdigo fuente de su aplicacin. Contacto [email protected] para ms detalles.

    VirtualWire 13 de 13