Go Down

Topic: Problemas con VirtualWire y comunicación RF (Read 2798 times) previous topic - next topic

agrgal

Hola a todos/as,

Estoy estancado estudiando la comunicación RF entre dos arduinos. Compré un módulo RF que, por otra parte, funciona perfectamente, ya que puede enviar el parpadeo de un bit y recibirlo en la otra placa. Así que supongo que ambas placas ARDUINO funcionan bien así como el transmisor/receptor.

El problema está en que cuando intento implementar los programas de ejemplo usando la biblioteca VirtualWire, no tengo manera de conseguir nada.

Pude darme cuenta de que, independientemente de que pin ponga en vw_set_tx_pin, los pines que parecen transmitir son el 3 y el 10, cuando se supone que por defecto es el 12. Sin embargo, el 3 y el 10 no transmiten datos (la forma de comprobarlo es poniendo la antena cerca de unos altavoces, y se acoplan con la señal haciendo ruido). El receptor no recibe absolutamente nada.

Respecto a los programas, lo único que cambia es que al importar la librería, aparecen dos includes: VirtualWire.h y Virtualwire_config.h, cuando en los ejemplos sólo aparece VirtualWire.h. No sé si tiene o no algo que ver...

¿Hay alguna otra biblioteca? Querría transmitir datos numéricos para desarrollar un sistema de radio control

Saludos. Gracias.

surbyte

Y porque no posteas los enlaces de la librería y el ejemplo que funciona y el que no?

agrgal

Gracias

Los módulos puedes encontrarlos aquí...

http://www.electronicaembajadores.com/Productos/Detalle/-1/LCRF2KM/modulo-rf-emisor-y-receptor-433-mhz---2km---con-codificador-y-decodificador

Transmisor: programa que funciona. Simplemente, hace parpadear un LED
y la señal de entrada se aplica al transmisor.

Code: [Select]
int entrada1 = 8;
int led1 = 10;

void setup() {
  pinMode(entrada1,OUTPUT);
  pinMode(led1,OUTPUT);
}

void loop() {
  digitalWrite(led1,HIGH);
  digitalWrite(entrada1,HIGH);
  delay(1000);
  digitalWrite(led1,LOW);
  digitalWrite(entrada1,LOW);
  delay(1000);
}


Receptor: programa que funciona

No lo necesito. Simplemente compruebo, con un led de testigo, que recibe la señal. Si hago pasar la señal por ARDUINO leyéndola en un pin como entrada digital lo hace. Funciona




Lo que no funciona son los siguientes ejemplos con la biblioteca VirtualWire

Transmisor:

Code: [Select]
// transmitter.pde
//
// Simple example of how to use VirtualWire to transmit messages
// Implements a simplex (one-way) transmitter with an TX-C1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@airspayce.com)
// Copyright (C) 2008 Mike McCauley
// $Id: transmitter.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600);   // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000); // Bits per sec
}

void loop()
{
    const char *msg = "hello";

    digitalWrite(13, true); // Flash a light to show transmitting
    vw_send((uint8_t *)msg, strlen(msg));
    vw_wait_tx(); // Wait until the whole message is gone
    digitalWrite(13, false);
    delay(200);
}


Y el programa del receptor:
Code: [Select]
// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley (mikem@airspayce.com)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600); // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000); // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

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

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
int i;

        digitalWrite(13, true); // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");

for (i = 0; i < buflen; i++)
{
    Serial.print(buf[i], HEX);
    Serial.print(" ");
}
Serial.println("");
        digitalWrite(13, false);
    }
}



Os dejo también la copia de VirtualWire que tengo. Los ARDUINOs que estoy usando son ARDUINO UNO MODEL R2.

Muchas Gracias. Espero no tener que diseñarme la propia comunicación en serie, xD...  :D

surbyte

Bueno cuando dijiste programa funciona pense que era con el transmisor.
El primer programa no usa el transmisor.
Luego veo que tus ejemplos son viejos.

Ahora si miras el manual encuentras que equivocaste de transmisor receptor tal como lo esperabas.
Esta pensado para aplicaciones de otro tipo, como apertura de puertas, portones, etc.

Mira esto en el manual de conexiones que tal vez no leiste bien
El receptor


El transmisor


Ahi se ve que no tiene una entrada serial o al menos yo no la veo.

agrgal

Entonces me han confundido, ya que me lo vendieron tal cual, y como muy bueno, en Madrid. En electrónica embajadores, además comentándoles qué es lo que quería hacer. Pero si no sirve para transmisiones en serie...

surbyte

#5
Nov 27, 2014, 10:55 am Last Edit: Nov 27, 2014, 06:37 pm by surbyte
No. No sirve para eso. Es como te dije, un control para abrir puertas de garaje por ejemplo.
si miras el manual verás que no tiene ningún RX, TX como pin.
Asi que regresa e intenta cambiarlo aunque dudo que lo hagan. Generalmente no se aceptan devoluciones en electrónica.

agrgal


Go Up