Módulos RF 315 y 433MHz con Arduino

 

En este tutorial se van a presentar las conexiones y programación en arduino.
Los módulos RF vienen en parejas (receptor y emisor), estos son de bajo costo y fáciles de utilizar, además de utilizar  comunicación  simplex, es decir en un solo canal y unidireccional, son de baja velocidad de transmisión pero muy útiles en aplicaciones básicas.
Para mejorar la distancia de recepción y no llegar a tener problemas futuros con la frecuencia utilizada es recomendable utilizar una antena helicoidal por módulo (ver figura 1).

Materiales y requisitos:

  • 2 Arduinos
  • 1 res 200 ohm
  • 1 pulsador NO
  • 1 par de módulos RF
  • 2 led's
  • La libreria instalada de RadioHead (sustituye la Virtual Wire)
Para descargarla visite el siguiente link Link Radio Head y de click en la siguiente sección, como se muestra en la figura 2.
Figura 2. Sección de descarga de librería


Diagrama del circuito:

Figura 3. Diagrama del circuito

Código del Arduino:

Transmisor

#include <RH_ASK.h>
#ifdef RH_HAVE_HARDWARE_SPI
#include <SPI.h> // Not actually used but needed to compile
#endif

RH_ASK driver;//indica que el objeto va a usar un tipo de modulación existente en la librería

void setup()
{

#ifdef RH_HAVE_SERIAL
  Serial.begin(9600);   // Debugging only
#endif
  if (!driver.init())
#ifdef RH_HAVE_SERIAL
    Serial.println("init failed");
#else
    ;
#endif

  pinMode(8, INPUT_PULLUP);

}

void loop()
{
  int boton = digitalRead(8);
  if (boton == LOW) {
    const char *msg = "c"; //caracter a enviar
    driver.send((uint8_t *)msg, strlen(msg)); //Función enviado
    driver.waitPacketSent(); //Función para comprobar el enviado
    delay(200);// tiempo de espera
  }
  else {
    const char *msg = "n"; //caracter a enviar
    driver.send((uint8_t *)msg, strlen(msg)); //Función enviado
    driver.waitPacketSent(); //Función para comprobar el enviado
    delay(200);// tiempo de espera
  }
}

Receptor

#include <RH_ASK.h>
#ifdef RH_HAVE_HARDWARE_SPI
#include <SPI.h> // Not actually used but needed to compile
#endif

RH_ASK driver;

void setup()
{

#ifdef RH_HAVE_SERIAL
  Serial.begin(9600);   // Debugging only
#endif
  if (!driver.init())
#ifdef RH_HAVE_SERIAL
    Serial.println("init failed");
#else
    ;
#endif

  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
}

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

  if (driver.recv(buf, &buflen)) // Non-blocking
  {
    int i;
    if ((char)buf[0] == 'c') {
      digitalWrite(8, HIGH);
      delay(500);
      digitalWrite(8, LOW);
    }
    else if ((char)buf[0] == 'n') {
      digitalWrite(9, HIGH);
      delay(500);
      digitalWrite(9, LOW);
    }
  }
}

Video del funcionamiento:



Comentarios

Entradas populares