Buenas a todos los Arduineros
Siguiendo con la comunicación inalámbrica le toca el turno a los módulos NRF2401. Estos pequeños módulos comunican con Arduino para poder transmitir y recibir datos en la banda de 2.4GHz.
Esto hace posible una comunicación a una distancia de unos 250 metros, más que considerable si lo comparamos con los módulos HC-06 que solo tiene un alcance de entre 5 y 10 metros.
Como casi todos los componentes para Arduino son módulos con un costo bastante reducido, lo que los hace mucho más atractivos a la hora de decantarse sobre una comunicación de tipo inalámbrica, aunque eso dependerá en gran medida del proyecto que vayamos a realizar.
En mi caso lo usaré para temas relacionados con el radio control, ya que estoy a medio camino de terminar un pequeño transmisor partiendo como base de un mando de Xbox.
Especificaciones técnicas del modulo NRF2401:
- Fuente de alimentación: 1.9 ~ 3.6V
- Tasa de transmisión: +7dB.
- Alcance de la transmisión: 20-30m (100m sin obstáculos/li>
- Dimensiones: 15x29mm.
- Funcionamiento en la banda ISM de 2.4GHz, no se necesita licencia y es libre en todo el mundo
- 3 Velocidades de datos: 250Kbps, 1Mbps y 2Mbps.
- Consumo eléctrico muy reducido.
- Precio muy reducido
Tipos de comunicación:
- Comunicación unidireccional Es la comunicación que usaremos en este ejemplo y solo transmitimos de un NRF2401 a otro.
- Comunicación bidireccional o Duplex: Con este tipo de comunicación mandamos datos de uno a orto y en ambos sentidos, aunque no al mismo tiempo. Es decir el modulo A envía un dato al módulo B y el módulo B responde al módulo A.
Para empezar primero tenemos que tener descargada e instalada la librería RF24-master
Para realizar este ejemplo he utilizado:
- 2 Arduino Nano
- 2 Módulos NRF2401
- 1 Pulsador
- 1 Resistencia de 10K
Como nota, he de recordar que este modulo funciona a 3,3V ponerlo a más voltaje implicaría su rotura, así que cuidado al conectarlo. Hago este recordatorio por que la mayoría de los módulos que hay para Arduino suelen funcionar a 5V y es fácil confundirse. Dicho esto...
Esquema de conexiones con Arduino:
Código para el transmisor NRF24L01:
#include <nRF24l01.h> // Libreria para el control del modulo NRF2401.
#include <RF24.h> // Libreria para el control del modulo NRF2401.
#include <SPI.h> // Libreria necesaria para la comunicacion SPI.
// Definimos los pines de control.
#define CE 9
#define CSN 10
// Creamos el objeto RF24 y le asignamos los pines de control.
RF24 nRF(CE,CSN);
// Declaracion del canal (entero sin signo de 64bits)
// LL al final le indica al compilador que es un LongLong
const uint64_t pipe = 0xE8E8F0F0E1LL;
int pulsador = 4; // El pin 4 es un pulsador.
int estado [1]; // Variables para el estado del pulsador.
// SETUP
void setup() {
Serial.begin(115200);
// Inicia la comunicacion RF
nRF.begin();
// Abrimos el canal para mandar los datos.
nRF.openWritingPipe(pipe);
// Declaramos el pulsador como entrada.
pinMode (pulsador, INPUT);
}
// Programa principal
void loop() {
// Lee el estado del pulsador
estado[0] = digitalRead(pulsador);
// Envia el estado del pulsador
nRF.write(estado, 1);
// Muestra en el monitor Serial el estado del pulsador
Serial.println(estado[0]);
}
Código para el receptor NRF24L01:
#include <nRF24L01.h> // Libreria para el control del modulo NRF2401.
#include <RF24.h> // Libreria para el control del modulo NRF2401.
#include <SPI.h> // Libreria necesaria para la comunicacion SPI
// Definimos los pines de control.
#define CE 9
#define CSN 10
// Creamos el objeto RF24 y le asignamos los pines de control
RF24 nRF(CE,CSN);
// Declaracion del canal (entero sin signo de 64bits)
// LL al final le indica al compilador que es un LongLong
const uint64_t pipe = 0xE8E8F0F0E1LL;
int led = 4; // El pin 4 es un led.
int estadoEmisor[1];// Variable para la recepcion de datos
// SETUP
void setup() {
Serial.begin(115200);
// Inicia la comunicacion RF
nRF.begin();
// Abrimos el canal para recibir los datos.
nRF.openReadingPipe (1, pipe);
// Ponemos a la escucha el modulo NRF2401
nRF.startListening();
// Declaramos en pin led como salida.
pinMode (led, OUTPUT);
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
}
// Programa principal
void loop() {
// Si el puerto esta disponible
if (nRF.available())
{
// Recibe los datos y los almacena en la variable.
int done = nRF.read(estadoEmisor,1);
// Imprime en el terminal Serial los datos recibidos.
Serial.println(estadoEmisor[0]);
}
// Si el dato recibido es 1:
if (estadoEmisor[0] == 1)
{
digitalWrite (led, HIGH); // Enciende el LED.
Serial.println("encendido");
} else {
digitalWrite(led, LOW); // Apaga el LED.
Serial.println("apagado");
}
}
Este es el vídeo de como funciona:
Espero que les ayude en sus proyectos!
saludos!!!
Fuentes:
Realmente creo que exageras cuando dices que alcanza 250 metros en campo abierto, ni el propio fabricante es capaz de demostrarlo.
ResponderEliminarHay artículos de excelentes profesionales técnicos que ni se atreven a decir el alcance, solo publican las pruebas y ni uno solo habla más allá de unos 30 metros con buena calidad de recepción de datos.
Buenas Anónimo, he revisado como dices lo de los 250 metros, y si he revisado las paginas donde suelo ver las especificaciones y solo he visto una https://www.electronicaembajadores.com/es/Productos/Detalle/LCNRL01/modulos-electronicos/modulos-nrf24l01-/modulo-transceptor-nrf24l01-transceiver- pero lo normal que pone en todos los sitios es de 20 a 30 metros y 80-100 en campo abierto, Para más distancia ya seria con antena: https://electronilab.co/tienda/modulo-transceptor-rf-nrf24l01-2-4-ghz-antena-sma-lna-y-pa/ Gracias por comentar!!!
Eliminarno me funciona ninguno lo he revisado y no es la conexión, con cuánto de corriente se alimentan los modulos y con cuánto de voltaje es quiero usar Nano arduino.
EliminarBuenas noches. No deseo polemizar el tema, solo contar la experiencia. He utilizado estos módulos poniendo un receptor controlado por un Arduino Uno conectado a un modulo de reles para encender unas lamparas. del otro lado 3 pulsadores en el emisor conectado a un Nano. Ubiqué receptor en un balcón de un cuarto piso y me fui alejando y haciendo pruebas dándome un alcance de alrededor de 300 metros con linea de vista. Hice la misma prueba pero cambiando los modulos nrF24L01 (como los del video) por los que vienen con antena y el resultado fue de mas de 500 metros hasta que se me acabó el espacio para alejarme mas, pero he leído que puede llegar a mil metros con linea de vista.
ResponderEliminarEspero que esta experiencia sea útil para darse una idea de lo que se puede hacer con estos módulos y que le sirva a alguien.
Buenas Cesar Palacios!! Gracias por comentar tu experiencia. Pues a raíz del comentario de Anónimo hice unas pruebas y, no se si es por "modelo" de NRF2401 que utilizo, pero me decepcione bastante. Poniendo en el mando el módulo SIN antena y en el vehículo uno de iguales características me quede :O ... 50 Cm!!! Para la prueba utilice el los mismos Sketch que he utilizado y que están en la web.
EliminarLa cosa cambia cuando en el mando pongo el módulo con antena, de echo en el vídeo del tanque se ve que se aleja y sigue funcionando sin problemas a más de 50 metros (aprox). Me gustaría profundizar más el tema, no se si es por la tasa de transmisión lo que hace que disminuya tanto la distancia, pero seria interesante si has hecho mas pruebas de este tipo que comentaras tu experiencia, yo por mi parte seguiré haciendo pruebas a ver si consigo aumentar la distancia entre módulos Sin antena,
Saludos!!!!
Hola amigo Peyutron. Me parece raro que no te haya funcionado, en mi caso trabajaron muy bien tanto con antena como el de antena incorporada en el cto. impreso.
EliminarTe cuento que tenemos funcionando 10 maquinas para regar plantaciones de flores controladas con arduino mediante estos módulos. En la máquina hay un receptor que consta de un arduino Uno, tarjeta de 4 reles los cuales controlan las entradas digitales de un variador de velocidad, este receptor tiene un modulo CON antena. Por otro lado el transmisor consta de un arduino Nano, 3 botones pulsadores y un modulo nRF SIN antena.
El operario va estirando una manguera con la ayuda de la maquina, la que va desenrollando la manguera que esta montada en una especie de carrete o tambor, esto lo hace con el control que tiene un botón para enrollar, otro para desenrollar y otro para prender y apagar una válvula solenoide para el paso del agua. Todo el conjunto funciona muy bien y el alcance no es problema porque solo se necesita unos 100 metros. El sistema ha sido muy estable y lleva funcionando mas de un año.
Disculpa lo extenso, era para explicar un poco esta experiencia y animar a la gente a que investigue y utilice estos módulos que no son difíciles de manejar y tienen muchas posibilidades. un saludo desde Medellin, Colombia
no me funciona ninguno lo he revisado y no es la conexión, con cuánto de corriente se alimentan los modulos y con cuánto de voltaje es quiero usar Nano arduino. si pudiéran compartir sus conexiones y el tipo de fuente que usa. Muchas gracias
EliminarBuenas Hussenq, las conexiones y los consumos vienen en este mismo artículo. Otros proyectos que tengo con este módulo están hechos con Arduino NANO. Las fuentes que he utilizado sin problemas son el USB, una batería de 9,6V y otra de 7,4v, pero con el USB es mas que suficiente. Otra cosa son los módulos de WIFI esos si que necesitan ( o es recomendable) una fuente de 3,3 algo más potente. Pero para el NRF con el USB debería funcionar
Eliminarestoy usando el modulo con antena y no se puede
EliminarHussenq puedes mandarme una captura del monitor serial y del montaje al correo peyutron@gmail.com a ver si te puedo orientar un poco, saludos!!!
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarUn saludo Peyutron, muy bien explicado el programa. Tengo una duda. Necesito exactamente esta implementación pero con 7 pulsadores y un LED diferente para cada uno. Qué tendría que modificar en el programa? La verdad es que soy nuevo en esto de arduino y no me queda muy claro como puedo hacerlo. Muchas gracias de antemano
ResponderEliminarBuenas Abraham, Ultimamente tengo poco tiempo para el blog y támbien hace bastante tiempo que no toco el nrf, tengo un proyecto (que retomare espero pronto), donde implemento más pulsadores, aunque el nivel es un poco avanzado, espero que pueda ayudarte a resolver tu duda, es este:
ResponderEliminarhttp://www.infotronikblog.com/2017/11/xboxrc24-un-mando-radio-control-con.html
Lamento no poder ser de más ayuda, aunque viendo tu duda, cuando disponga de más tiempo ampliare la entrada del blog añadiendo un ejemplo con varios pulsadores.
Saludos!!!