Arduino Tutorial 24: Enviar datos digitales mediante NRF24L01

En esta entrada vamos a usar el módulo NRF24L01. Con este módulo podemos llevar a cabo comunicaciones inalámbricas entre 100 y 200 metros de longitud máxima. El precio es bajo y se pueden encontrar en Amazon.
Podéis consultar el datasheet del integrado en el siguiente link. Además os dejo el enlace de la librería que usamos en el siguiente link.
 
Para esta entrada necesitamos:
  • 2  módulos NRF24L01
  • 2 arduinos
  • 1 led
  • 1 pulsador

 

Lo primero que tenemos que saber es como conectar el módulo NRF24L01 al arduino:
Módulo NRF24L01
Módulo NRF24L01

esquema pines
Esquema de la conexión de los pines
La columna que indica los colores, es referente a la forma de como se conectara nuestro dispositivo con respecto a la imagen que dejare anexada.
 
Una vez conocidos los pines, tenemos que descargarnos la libreria que he dejado al principio de la entrada y agregarla a las librerias de vuestro arduino.
 
Por otro lado, en el arduino que elijáis como emisor, debereís conectar el pulsador, en este caso al pin 2, y en el receptor el led al pin 2.
 
A continuación os dejo el montaje y el código del emisor y del receptor:

 EMISOR

Esquema del emisor
Esquema del emisor
//exportamos la libreria mirf de nuestras librerias
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <nRF24L01.h>
#include <SPI.h>

int pulsador = 2;

void setup(){
  Serial.begin(9600);
  pinMode(pulsador, INPUT);

  // Iniciamos el modo de trasmision
  Mirf.spi=&MirfHardwareSpi;
  Mirf.init();

  // Nombre que le vas a dar a este modulo NRF24L01
  // sería el equivalente a la IP de un ordenador. 5 bytes maximo.
  Mirf.setRADDR((byte *)"RX_99");

  // payload de un byte (es decir, un número entre 0 y 255). Si quiere mandar dos datos, ponemos un 2 (en vez de un 1), y así hasta cuantos datos queramos enviar
  Mirf.payload = 1;

  // indicamos el canal por el cual vamos a enviar la información. En el receptor tenemos que poner el mismo canal
  Mirf.channel = 32;

  // a configurar y vaciar cola FIFO
  Mirf.config();

  Serial.println("iniciando...");
}

void loop(){
  int estado = digitalRead(pulsador);
  Serial.print("Valor pulsador: ");  
  Serial.println(estado);

  // nombre del NRF24l01 al que vamos a emitir. (nombre del receptor el cual se configura en el programa arduino del receptor)
  Mirf.setTADDR((byte *)"TX_01");

  //ahora emitimos
  Mirf.send((byte*)&estado);

  //esperamos a que termine de emitir
  while( Mirf.isSending() ) ;
  delay(1000);
}

 RECEPTOR

Esquema del receptor
Esquema del receptor
#include <MirfHardwareSpiDriver.h>
#include <Mirf.h> 
#include <nRF24L01.h> 
#include <SPI.h> 

const int led=2; 

void setup() { 
  Serial.begin(9600); 
  pinMode(led,OUTPUT); 
  Mirf.spi=&MirfHardwareSpi; 
  Mirf.init(); 

  // Nombre que le damos a este módulo NRF24L01. 
  // seria el equivalente a la ip de un ordenador. 5 bytes maximo. 
  Mirf.setRADDR((byte *)”TX_01″); 

  // Payload, en bytes, a transmitir (es decir, un número entre 0 y 255). Si quiere mandar dos datos, ponemos un 2 (en vez de un 1), y así hasta cuantos datos queramos enviar 
  Mirf.payload = 1; 

  // el canal por el cual estaremos transmitiendo (el mismo que hemos puesto en el emisor) 
  Mirf.channel = 32; 

  // Esto inicia el mirf y borra la lista FIFO 
  Mirf.config(); 
} 

void loop() { 
  byte c; 
  // comprobamos que no hay datos a recibir. 
  if( Mirf.dataReady() ) { 
    // recibimos la información y lo almacenamos en c 
    Mirf.getData(&c); 
    if(c==1) { 
      digitalWrite(led,HIGH); 
    } 
    else { 
      digitalWrite(led,LOW); 
    } 

    // imprimiremos en el puerto serial el estado que recibimos del PIR 
    Serial.print(“El valor es: “); 
    Serial.println(c); 
    } 
}

 


A continuación os dejo un vídeo con la demostración:
Como hemos comentado en el código, enviamos un byte, es decir, un número entre 0 y 255. Para este ejemplo no hemos tenido problemas ya que enviabamos un 0 ó un 1. Si queremos enviar señales analógicas, lo mejor es realizar una escala de 0 a 100 para poder enviarlo, es decir, convertir el valor analógico en el programa del emisor, enviarlo y si luego se desea, desconvertir el valor en el programa del receptor.
El código para realizar esta conversión es:
 
position = map(humedad, 0, 1023, 0, 100);
 
Los dos primeros valores indican el valor mínimo y máximo que alcanza el instrumento analógico y los dos siguientes valores indican el valor mínimo y máximo que queremos que alcancen. En este caso el 0 analógico equivaldria a 0% y el 1023 analógico a 100%.

Guardar

Guardar

Guardar

Guardar

Guardar

Guardar

Guardar

Guardar

Guardar

Guardar

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *