Upload
manuel-chica-uribe
View
153
Download
1
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