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).
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).
Figura 1. Antena helicoidal. Recuperado de https://www.amazon.com.mx/icstation-helicoidal-transmisi%C3%B3n-inal%C3%A1mbrica-transceptor/dp/B01M8JWT0B
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
Publicar un comentario