Robotics | Arcade | Electronics

    Cart

    Your Cart is Empty

    Back To Shop

    Tutorial Arduino: Módulo NRF24L01

    Módulo NRF24L01
    Hola tecnólogos, en nuestro post de hoy, pondremos en marcha el módulo de radiofrecuencia NRF01L24. Este módulo es un recurso muy útil para la transmisión de datos entre dos Arduinos de forma inhalámbrica. Sin embargo aun hay poca información sobre el en internet.
    Para dar nuestros primeros pasos con el NRF24L01, haremos un proyecto en el que activaremos un led a distancia pulsando un boton instalado en el Arduino emisor.

    Materiales necesarios:

    2 x Arduino UNO
    2 x Modulo RF NRF24L01
    2 x Protoboard
    1 x Pulsador
    1 x Led
    1 x Resistencias
    1 x Cables de conexión

    Conozcamos mejor el NRF24L01.

    Este módulo puede funcionar como emisor y como receptor. Fácil de usar con cualquier tipo de microcontrolador AVR, ARM, Arduino, Raspberry Pi…

    Características.

    -Frecuencia: 2.4 GHz ~ 2.5 GHz
    -Tensión de funcionamiento: 3 ~ 3.6V Max 
    -Corriente: 115 mA 
    -Multi-frecuencia: 125 Frecuencias
    -Alcance: 700-1000 metros para la versión con amplificador y 20-30 metros para la versión sin amplificador.

    -Soporta hasta seis canales de recepción de datos

    Posición de pines

    Vista inferior del módulo NRF24L01. Vista superior del módulo NRF24L01.
    pines nrf24l01 arduino nrf24l01

    Esquema de conexión con Arduino

    Este esquema de conexión es común para todos los proyectos en los que se necesite el módulo de radiofrecuencia NRF24L01. En nuestro caso, lo usaremos tanto para el emisor como para el receptor.

    conexion nrf24l01

    Practicando con el NRF24L01

    Esta es la parte que más nos gusta a todos, la parte en la que ponemos en marcha nuestros cacharros. 
    En esta práctica encenderemos un led a distancia instalado en el Arduino receptor, accionando un pulsador conectado a nuestro arduino emisor y transmietiendo esta acción por radiofrecuencia con la ayuda del modulo NRF24L01.
    El primer paso para realizar el proyector es montar nuestro emisor y nuestro receptor como nos indica los siguientes esquemas.

    NOTA: En nuestro caso, para hacer las prácticas, usamos el NRF24L01 con amplificador y antena, aun así este tutorial tambien nos ayudará a usar el NRF24L01 sin amplificador ya que la forma de manejarlo es exatamente la misma.

    Conexiones.

    NOTA: El módulo NRF24L01 se conecta a Arduino del mismo modo que vimos en el esquema de más arriba.

    Conexión del pulsador del sistema emisor. Conexión del led del sistema receptor.
    pulsador arduino led arduino

    Código.

    Una vez montado los dos sistemas procedemos a cargar el código correspondiente en cada uno de ellos.

    Código emisor.

    /**
    Tutorial Arduino: Módulo NRF24L01
    Más información en:
    http://www.leantec.es/blog/44_Tutorial-Arduino--Modulo-NRF24L01.html
    
     * Pins del SPI:
     * Hardware SPI:
     * MISO -> 12
     * MOSI -> 11
     * SCK -> 13
     */
     
    //Incluimos las librerías necesarias
    #include <SPI.h>
    #include <Mirf.h>
    #include <nRF24L01.h>
    #include <MirfHardwareSpiDriver.h>
    
    void setup(){
      Serial.begin(9600);
      Mirf.cePin = 8;                  // Cambiamos el pin CE al 8
      Mirf.csnPin = 7;                // Cambiamos el pin CSN al 7
      Mirf.spi = &MirfHardwareSpi;     // Configuramos el SPI de Arduino por Hardware
      Mirf.init();                     // Inciamos el módulo de RF
      Mirf.setRADDR((byte *)"clie1");  // Indicamos la dirección para recibir datos
      Mirf.payload = 1;                // Indicamos el número de datos que se espera recibir
      Mirf.config();     // Configuramos el módulo de RF 
      pinMode(3, INPUT); //Configuramos el pin 3 como entrada para leer el estado del pulsador
    }
    
    void loop(){
      uint8_t estadoPulsador[1];        // Variables modificadas según valor del pulsador
      estadoPulsador[0]=digitalRead(7); // Leemos el pulsador
    
      Mirf.setTADDR((byte *)"serv1");  // Configuramos la dirección a donde vamos a enviar los datos
      Mirf.send(estadoPulsador);       // Enviamos los datos 
      while(Mirf.isSending()){}        // Esperamos que termine la emisión
    }
      
    

    Código recpetor.

    /**
      Tutorial Arduino: Módulo NRF24L01
      Más información en:
    http://www.leantec.es/blog/44_Tutorial-Arduino--Modulo-NRF24L01.html
    
     * Pins:
     * Hardware SPI:
     * MISO -> 12
     * MOSI -> 11
     * SCK -> 13
     *
     * Configurable:
     * CE -> 8
     * CSN -> 7
     *
     */
    
    #include <SPI.h>
    #include <Mirf.h>
    #include <nRF24L01.h>
    #include <MirfHardwareSpiDriver.h>
    
    int led=4; //Declaramos el led en el pin 4
    unsigned long time=0;// Variable para controlar el tiempo entre dato y dato
    int estadoled=0;   //Variable para almacenar el estado del rele
    
    //----------------------------- Configuramos Ardunio ---------------------------------------
    //------------------------------------------------------------------------------------------
    void setup(void){
      Serial.begin(9600);
      Mirf.cePin = 8;                // Cambiamos el pin CE al pin 8 de arduino
      Mirf.csnPin = 7;              //Cambiamos el pin CSN al pin 7 de arduino
      Mirf.spi = &MirfHardwareSpi;    // Configuramos el SPI de Arduino por Hardware
      Mirf.init();                    // Inciamos el módulo de RF
      Mirf.setRADDR((byte *)"serv1"); // Indicamos la dirección para recibir datos
      Mirf.payload = 1;// Indicamos datos que se espera recibir(1, estado del pusador)
      Mirf.config();                  // Configuramos el módulo de RF
      time=0;                         // Ponemos a 0 el tiempo
      pinMode(led, OUTPUT);             // Configuramos el pin 6 como salida del led
    
    }
    //--------------------------- Arrancamos el programa ---------------------------------------
    //------------------------------------------------------------------------------------------
    void loop()
    {
      byte datos[1];      // Buffer para almacenar los datos
      if(!Mirf.isSending() && Mirf.dataReady()){ // Esperamos recibir un dato
        Mirf.getData(datos);       // Copiamos al buffer los datos recibidos
        time = millis();           // Almacenamos el tiempo en la variable
    
        if(datos[0]==1){ //El estado del led cambia cada vez que el pulsador esta activado(una sola vez)
          estadoled=!estadoled;
          digitalWrite(led, estadoled);
          while(datos[0] == 1){
            Mirf.getData(datos);       // Copiamos al buffer los datos recibidos
          }
        }  
      }
    
      if ( ( millis() - time ) > 1000 ) {//Comprobamos si desde la última vez que recibimos un dato hasta ahora ha pasado mas de 1 seg
    
        Serial.println("Error de recepcion de datos"); //Línea para ver en el terminal que recibe  
        delay(500);                         //Paramos 0,5 seg 
      }
      else{                                 //Si todo está correcto y estamos recibiendo datos, seguimos
    
      }
    
    }
    
    
    Al igual que podemos encender un led, este sistema nos puede ayudar, por ejemplo a activar un rele a distancia, o enviar datos de sensores al Arduino receptor, controlar un vihículo con control remoto…etc.

    4 thoughts on “Tutorial Arduino: Módulo NRF24L01

    1. no funciona amigo ya conecte tal cual no hace nada ni siquiera enciende el tx del arduino para ver si hay comunicación cualquier cosa quedo atento

    2. Buenas tardes,
      Decís arriba que «Soporta hasta seis canales de recepción de datos»…

      ¿Donde podemos ver los canales que estamos usando?

      Muchas gracias, un saludo.

    Deja una respuesta

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

      Cart

      Your Cart is Empty

      Back To Shop
      COMPARE PRODUCTS