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:
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
//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
// seria 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
#include <Mirf.h>
#include <MirfHardwareSpiDriver.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%.