lunes, 17 de octubre de 2016

Comunicación bidireccional entre Arduinos con módulos NRF24L01


En este POST realizaremos una comunicación bidireccional inalámbrica o “Duplex” por radiofrecuencia entre dos Arduinos, utilizando módulos NRF24L01, que como ya sabemos del POST anterior 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, que es el caso que nos ocupa en este momento. La conexión de los módulos NRF24L01 a los Arduino se hace mediante SPI como siempre, aunque para diferenciar la programación de cada Arduino, los vamos a distinguir llamándolos Arduino “A” y Arduino “B”. La conexión del Hardware va a ser idéntica para los dos Arduinos, es decir, debemos de conectar un pulsador PULL DOWN al pin digital 7 y al mismo tiempo un LED al pin digital 6 de cada Arduino.


Montaje del sistema de comunicación bidireccional RF

A la hora de programar los dos Arduino, al ser una comunicación bidireccional,  tenemos que declarar esta vez dos canales (const uint64_t canal[2] = {0xF0F0F0F0E1LL,0xF0F0F0F0D2LL};). Por el canal “0” que es por el que escribe el Arduino “A” tiene que leer el Arduino “B”, y en contraposición, por el canal “1” que es por donde escribe el Arduino “B” tiene que leer el Arduino “A” como se muestra a continuación.

Canales para el sistema bidireccional RF

Una cosa muy importante es darle tiempo a los módulos para que reciban y emitan con un pequeño delay(20), aunque no os preocupéis demasiado porque ya está todo incluido dentro de los programas a descargar. El programa de cada Arduino lo primero que hace es escuchar a través del canal correspondiente para ver si le está llegando información mediante RF, es decir, el valor del estado del pulsador del otro Arduino para que en función de ese valor se encienda o apague el LED que tiene conectado, una vez verificado esto se deja de escuchar por el canal para proceder a enviar el valor del pulsador al otro Arduino, repitiéndose todo esto cíclicamente dentro de la función void loop(). Para más información acerca del funcionamiento de los programas os recomiendo leer los comentarios realizados dentro de la programación.



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.

·         2 Pulsadores.

·         2 Resistencias de 10KΩ.

·         2 LED 5mm (de cualquier color).

·         2 Resistencias de 220Ω.

·         Fuente de alimentación de 12VDC/3000mA (DC12300).

·         Protoboard.

·         Cables de conexión.



Código del programa:

           NRF24L01_Bidireccional_A:





          NRF24L01_Bidireccional_B:




Video:

6 comentarios:

  1. Hola Mariano, gracias por su blog.
    Estoy realizando el montaje y logro subir los codigos a la placa correspondiente, también estoy alimentando los modulos RF24L01 a 3.5V externos a las placas de Arduino, pero al probar no obtengo ninguna respuesta. ¿Tendrá alguna sugerencia que me pueda brindar?
    Quedo atenta a su respuesta, saludos

    ResponderEliminar
    Respuestas
    1. Recuerda conectar los condensadores como se recomienda en el POST para eliminar el ruido. Por lo demás decirte que revises las conexiones. Saludos

      Eliminar
  2. Buenas noches yo arme, compile, puse los condensadores pero simplemente transmiten datos pero no reciben datos, no tiene algun otro programa similar de comunicación bidireccional ya que no me funciona aquella.

    ResponderEliminar
    Respuestas
    1. espero su respuesta, gracias y saludos

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  3. Revisa estas dos paginas :D
    http://www.prometec.net/duplex-nrf2401/
    https://github.com/maniacbug/RF24

    ResponderEliminar