Revista Informática

Comunicación unidireccional entre Arduinos con módulos NRF24L01

Publicado el 13 octubre 2016 por Villalba2006

En este POST realizaremos una comunicación unidireccional inalámbrica por radiofrecuencia entre dos Arduinos, utilizando módulos NRF24L01, cuyo funcionamiento está basado en el chip de Nordic semiconductorNRF24, se pueden alimentan con la salida de 3.3V de nuestro Arduino, tienen muy bajo consumo, se comunican muy rápido y los podemos adquirir por muy poco dinero, que es lo que realmente nos interesa. A continuación os muestro algunas de las principales características de estos módulos:
   Banda ISM de 2.4GHz de operación mundial.   Hasta una velocidad de datos de 2Mbps.   Operación a muy baja potencia.   Voltaje de alimentación de 1.9 a 3.6V.
   ShockBurst™ Mejorado.   Manejo de paquetes automático.   Compatible con nRF2401A, 02, E1 y E2.   Distancia de alcance de 70~100mts en espacio abierto.Estos módulos son TRANCEPTORES, es decir mediante programación los podemos configurar como emisores o como receptores o configurarlos para que realicen ambas funciones, lo que les convierte en una de las mejores soluciones para realizar comunicaciones inalámbricas, ya sea para domótica, robótica, o lo que se os pueda ocurrir (juguetes, controles remotos, periféricos inalámbricos....). En el mercado existen varios modelos de módulos NRF24L01, de diferentes fabricantes, aunque siempre compatibles entre sí. Todos ellos operan en la banda de 2.4GHz, que es una banda libre de radiofrecuencia, por lo que no requieren de ningún permiso para usarse en ninguna parte del mundo, pero en contra, no tenemos garantía de que no haya alguien más emitiendo en esta banda en las cercanías, lo que puede producir interferencias en nuestra emisiones. Existe un modelo más completo, que aparte del NRF24L01 posee un circuito amplificador de potencia (PA), un circuito amplificador de bajo ruido (LNA) además de una antena SMA que en conjunto le permiten lograr un rango de hasta 1 Km (no os preocupéis demasiado que ya los analizaremos más a fondo en posteriores POST).
 

Comunicación unidireccional entre Arduinos con módulos NRF24L01

Módulo NRF24L01 básico


La distancia o alcance entre módulos NRF24L01 dependerá del modelo que están usando y del lugar en donde están trabajando, si hay muros, ruido, o si están en lugares abiertos. El módulo NRF24L01 con el que vamos a trabajar es el más básico, con un alcance aproximado del orden de una señal WIFI, es decir, por debajo de los 100 metros en espacios abiertos. Aunque estos módulos consumen muy poco cuando estamos trabajando con ellos (Stand By), pueden llegar a absorber en el arranque más de lo que la fuente de 3.3V de Arduino puede proporcionar, lo que impide que arranquen correctamente o que tengan un mal funcionamiento, especialmente en el caso del emisor. Esto lo podemos solucionar fácilmente alimentando los Arduinos mediante una batería de 12VDC/3000mA (fuente de alimentación externa) que administre a nuestros Arduinos una corriente suficiente en todos sus terminales. Además, para eliminar el ruido eléctrico, que en muchos casos hace que nuestros módulos NRF24L01 no funcionen, debemos de conectar un condensador electrolítico de 10µF entre VCC y GND de cada módulo (personalmente me volví loco hasta que conseguí que me funcionaran por este motivo). A continuación os muestro una tabla donde se puede ver la correspondencia de los pines de conexión del NRF24L01 a nuestro Arduino UNO.
 

Comunicación unidireccional entre Arduinos con módulos NRF24L01

Tabla de conexiones del módulo NRF24L01


Para la realización del programa he utilizado las librerías y que podéis descargar en el este enlace . Una vez descargadas las debéis de importar al IDE de Arduino,para después cerrarlo y volverlo a abrir para que se carguen correctamente. Los pines CE y CSN son programables, es decir, les podemos configurar a nuestro antojo (RF24 radio(9,10)), en cambio el resto de los pines deben ser respetados puesto que son los que nuestro Arduino UNO tiene predeterminados para la comunicación SPI. Además debemos de subir a cada Arduino el programa correspondiente teniendo en cuenta la función que tiene que realizar, es decir, si se comporta como Emisor (tiene que tener un pulsador con conexión PULL-DOWN en su pin digital 7) o como Receptor (tiene que tener conectado un LED, a través de una resistencia limitadora de tensión de 220Ω, en su pin digital 7). 
 

Comunicación unidireccional entre Arduinos con módulos NRF24L01

Montaje del sistema de comunicación unidireccional RF


Con los programas que podemos descargar en este POST, controlamos el encendido y apagado de un LED con un solo pulsador mediante una conexión por radiofrecuencia (RF) entre dos Arduinos, a través de módulos NRF24L01. Cada vez que presionamos el pulsador conectado al Arduino Emisor, se envía mediante RF el valor de la variable estado_pulsador[0], si es la primera vez que lo presionamos se envía un "1" y si es la segunda vez un "0", repitiéndose el proceso continuamente, para que se encienda o apague un LED conectado al Arduino Receptor, que es el que obtiene a través de RF el valor de la variable estado_pulsador[0]. Cuando la variable estado_pulsador[0] vale"1", se enciende el LED conectado al Arduino (receptor), y si vale "0",el LED se apaga. En el supuesto de que nunca presionemos el pulsador del Arduino Emisor, no se enviará ningún valor mediante RF y como consecuencia el LED conectado al Arduino Receptor permanecerá apagado. Para una mayor información os recomiendo echar un vistazo a los comentarios realizados dentro de los programas.
Lista de Materiales:  
·   2 Arduinos UNO Rev.3.·   Cable USB tipo A-B.·   2 módulos NRF24L01.·   2 Condensadores electrolíticos de 10µF y más de 5V.·   1 Pulsador.·   Resistencia de 10KΩ.·   LED 5mm (de cualquier color).·   Resistencia de 220Ω.·   Fuente de alimentación de 12VDC/3000mA (DC12300).·   Protoboard.·   Cables de conexión.  Programa:     Emisor NRF24L01:
Comunicación unidireccional entre Arduinos con módulos NRF24L01
Comunicación unidireccional entre Arduinos con módulos NRF24L01
Descarga del programa para el Emisor
    Receptor NRF24L01 :
Comunicación unidireccional entre Arduinos con módulos NRF24L01
Comunicación unidireccional entre Arduinos con módulos NRF24L01
Descarga del programa para el Receptor  Video:
  
 

Volver a la Portada de Logo Paperblog