José Galisteo Ruiz

¯\_(ツ)_/¯

Arduino modulo RF 433Mhz

| Comments

Para el proyecto de monitorización de mi pequeño huerto urbano necesito comunicar dos módulos Arduino de forma inalámbrica, para eso tenemos distintas opciones y dependiendo de las necesidades podremos usar un sistema u otro.

En mi caso, solo necesito enviar unos pocos datos a pocos metros, lo que viene siendo desde mi balcón donde tengo un módulo hasta el router donde tengo el otro conectado a Internet.

Para ello he usado un transmisor y un receptor de RF a 433Mhz. Lo más interesante de estos módulos es su bajo coste y lo podemos encontrar fácilmente en Amazon o DX.com por menos de 5 euros.

Para usar estos módulos podemos usar la librería VirtualWire la cual nos hará el proceso mucho más sencillo.

Modulo emisor:

Conexiones:

1
2
3
4
5
Arduino     | Emisor
----------- | ---------------
5V          | VCC
GND         | GND
Digital 12  | DATA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <VirtualWire.h>

void setup() {

  // Para el led
  pinMode(13,OUTPUT);

  // Pin de escritura
  vw_set_tx_pin(12);

  // Velocidad de transferencia en Kbps
  // debe ser la misma en el receptor
  vw_setup(2000);
}

void loop(){

  // Un mensaje cualquiera, podríamos preparar una cadena
  // concatenando distintos valores de sensores.
  String message =  "hello world!";

  // Convertimos el string a un array char.
  char buf[message.length()];
  message.toCharArray(buf, message.length() + 1);

  // Iluminamos el led para indicar que estamos transmitiendo
  digitalWrite(13, true);

  // Enviamos el mensaje
  vw_send((uint8_t *)buf, strlen(buf));
  // Se mantiene en espera hasta que todo el mensaje se ha enviado
  vw_wait_tx();

  // Apagamos el led
  digitalWrite(13, false);

  // Simplemente esperamos un segundo
  delay(1000);
}

Modulo receptor:

Conexiones:

1
2
3
4
5
Arduino     | Receptor
----------- | -----------------------------------------
5V          | VCC
GND         | GND
Digital 11  | DATA # Uno de los dos disponibles
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <VirtualWire.h>

String data;

void setup()
{
  Serial.begin(9600);

  // Para el led
  pinMode(13, OUTPUT);

  // Pin de lectura
  vw_set_rx_pin(8);

  // Velocidad de transferencia en Kbps
  // debe ser la misma en el transmisor
  vw_setup(2000);

  // Ponemos en escucha
  vw_rx_start();
}

void loop()
{
  // Inizializamos el buffer con las constantes definidas en VirtualWire
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) {

    // Iluminamos el led para indicar que hay una transmisión entrante
    digitalWrite(13, true);

    // Leemos el buffer y lo volcamos en la variable data
    data = "";
    int i;
    for (i = 0; i < buflen; i++) {
      data += String(char(buf[i]));
    }

    // Lo imprimimos por el puerto serie
    Serial.println(data);

   // Y apagamos el led
   digitalWrite(13, false);
  }
}

Con todo enchufado y el código cargado en ambos módulos podremos ver los leds parpadeando y por el puerto serie del receptor los mensajes que manda el emisor.

Comments