Aventuras y Desventuras de un hobbyist

Aventuras y Desventuras de un hobbyist....

Arduino Radiofrecuencia II

En una entrada anterior hice un pequeño experimento con radiofrecuencia con unas luces a control remoto de los chinos, esta vez realizare un montaje de 2 Arduinos  uno receptor y otro emisor.
El emisor tendrá 4 botones que enviaran datos según su estado (high,low) con lo que tendremos 8 valores que serán enviamos en forma de letras a,b,c,d,e,f,g,h,i. Luego la decodificación y posteriores comportamientos serán hechos en el Arduino  con el receptor.
En esta ocasión usare una libreria para Arduino llamada Virtual wire con un emisor y receptor de Aurel:




El código para el emisor seria el siguiente
 
// 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@open.com.au)
// 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 código para el receptor:

// 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@open.com.au)
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include 

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);
    }
}

3 comentarios:

  1. Buenas!!! estoy interesado en tus resultados!

    1º Te ha funcionado sin interferencias?
    2º Como emitir codificado de manera que el receptor SOLO, lea datos de SU emisor? (es por tema de no tener interferencias con otras señales que hay por el aire...)

    Gracias!

    ResponderEliminar
  2. 1.- Me ha funcionado sin interferencias con una antena de 15cm o mas.

    2.- No he intentado aun realizar la codificación, se que hay ejemplos disponibles en la web que funcionan pero yo no los he probado.

    ResponderEliminar
  3. Sabes ocmo se pueden enviar "variables"? es decir, que me mande por ejemplo la temperatura de un termómetro?
    Se enviar mensajes "fijos", pero no variables. Alguna idea?


    Gracias de antemano y un saludo.

    ResponderEliminar