Modulo RF nRF24L01

Ultimo aggiornamento 27 aprile 2019


 

Indice

 

Descrizione

Il modulo mostrato in questa pagina è il NRF24L01+ prodotto dalla Nordic Semiconductor, si tratta di un ricetrasmettitore a 2,4GHz a bassa potenza particolarmente adatto per la banda ISM (Industrial, Scientific and Medical).

Il chip nRF24L01+ è caratterizzato da picchi di corrente RX/TX inferiori a 14mA, modalità di risparmio energetico con consumi di 1μA ed una tensione operativa compresa nel range tra 1.9V e 3.6V, permettendo così la realizzazione di progetti wireless ULP (Ultra Low Power).
Il modulo ricevitore trasmettitore con NRF24L01+ funziona sia come trasmettitore che come ricevitore, consentendo la comunicazione fra più microcontrollori, come ad esempio le schede Arduino; la comunicazione SPI con il microcontrollore principale è garantita dalla presenza di un acceleratore di protocollo hardware Enhanced ShockBurst™.
Per facilitare la programmazione del modulo, sono state ideate diverse librerie, come ad esempio la libreria l'RF24 per Arduino.

homotix

Caratteristiche

Ricetrasmettitore ISM a uso libero
Trasmissione dati a 250kbps, 1Mbps and 2Mbps
Acceleratore hardware ShockBurst
Bassissimo consumo, in modalità power-down solo 1uA
Portata in linea d'aria circa 100mt
125 canali selezionabili

Tensione operativa: 1.9V~3.6V
Modalità di risparmio energetico: consumo 1μA
Antenna 2.4GHZ integrata
Velocità operativa (max): 2Mbps
Regolatore di tensione: integrato
Altre funzioni: comunicazione Multi-point a 125 canali, salto di frequenza, anti-interferenza, modulazione GFSK
Rilevamento errori CRC
Connettore: 2x4 pin maschio, passo standard 2,54mm - presaldato
Dimensioni: 29 x 15 x 12mm
Peso: 3g

Adattatore per modulo NRF24L01

Per un più semplice gestione del modulo NRF24L01, è possibile utilizzare un modulo adattatore, che tra l'altro dispone a bordo di un regolatore in grado di ridurre la tensione d'ingresso CC da 5V a 3.3V per il moduli wireless NRF.
Il modulo si può trovare con la sigla YL-17 (PCB di colore Rosso) o YL-105 (PCB di colore nero).
Questo modulo consente di utilizzare transceiver tipo NRF24L01 su sistemi a 5 volt come Arduino.
Il dispositivo regola l'ingresso da 5V a 1,9 ~ 3,6V DC tramite un integrato tipo 1117 3.3 e incorpora i condensatori di bypass per un funzionamento affidabile.  E' presente un led che segnala la presenza di tensione, un connettore in linea in cui sono presenti i segnali d'interfaccia: CE, CSN, SCK, MO, MI, IRQ. Per entrambi le caratteristiche sono:

YL-17 (PCB di colore Rosso)

YL-105 (PCB di colore nero)

Pin adattatore Pin NRF24L01
CE CE
CSN CS
SDK SCK
MQ MOSI
M1 MISO
IRQ IRQ

Schema elettrico del modulo

 

AMS1117 1A Low Dropout Voltage Regulator

Piedinatura Datasheet Foto dell'integrato

Controller remoto mobile robot

La scheda SunFounder Mobile Robot Remote Controller for Arduino Arduino Nano and NRF24L01 prodotta dalla Sunfounder integra i connettori per installare un Arduino Nano e un modulo NRF24L01, nonché un joystick da 2,5 cm di diametro. Con questa scheda è possibile creare un controller comodamente in grado di controllare un robot, una macchina intelligente o altri dispositivi intelligenti.
Il joystick collegato ad Arduino Nano trasforma i movimenti in valori analogici nelle due direzioni e se premuto può generare un valore digitale.
Per ulteriori informazioni vedere la pagina Wiki presente sul sito SunFounder

 

Esperimento di prova

Per provare il collegamento tra i due moduli Nrf24l01 realizzeremo il progetto seguente , materiale occorrente

1)Inserire il modulo Arduino Nano e il modulo Nrf24l01 sul Mobile Robot Remote Controlle
2) Collegare una fonte di alimentazione compresa tra i 7 e i 12 V alla relativa morsettiera
3) Collegare il telecomando mobile robot a PC con un cavo Mini-USB.  Accendere tramite il Power Switch, si dovrà accendere il LED Power della scheda Nano.
4) Prima di caricare caricare lo sketch è necessario assicurarsi dei aver aggiunto la libreria l'RF24, per fare questo scaricare il file RF24.zip sotto il sketch-> #include libreria -> Aggiungo libreria da file .ZIP
Caricare quindi lo sketch Transmit.ino sul telecomando del robot mobile. Quindi rimuovere il cavo USB dopo il caricamento e mantenerlo acceso, utilizzando come fonte di alimentazione per esempio una batteria 9V.

 

4) Collegare alla scheda Arduino UNO il modulo Nrf24l01 utilizzando un adattatore, per esempio il tipo YL-105 (PCB di colore nero) tramite cavi colorati
5) Collegare la scheda Arduino UNO al PC con un cavo USB.
5) Caricare lo sketch Receive.ino sul ricevitore. Non rimuovere il cavo USB dopo il caricamento. Aprire il monitor seriale, impostato ad una velocità di 9600 baud.

Ora, dovreste vedere le informazioni ricevute dal modulo Nrf24l01 visualizzate nella finestra del Monitor seriale. Azionando il joystick, il valore visualizzato nella finestra Monitor seriale cambierà, il che indica che la comunicazione wireless sta funzionando.

NOTA: i due programmi e la libreria sono contenuti all'interno di questo file ZIP

Transmit.ino

/* -----------------------------------------------------------------------------
 - File:      nRF24l01 Transmit Test
 - Copyright: Copyright (C) 2015 SunFounder. For details, check License folder.
 - Date:      2015/7/21
 * -----------------------------------------------------------------------------
 - Overview
  - This project was written to test nRF24l01 module. If it runs, arduino will 
    reads Analog values on A0, A1 and transmits them over a nRF24L01 Radio Link 
    to another transceiver.
 - Request
   - FR24 library
 - Connections
   - nRF24L01 to Arduino
     1 GND   	 GND
     2 VCC	 3V3
     3 CE	 D9
     4 CSN	 D10
     5 SCK	 D13
     6 MOSI	 D11
     7 MISO	 D12
     8 UNUSED	
   - Joystick to Arduino
     GND         GND
     VCC         5V
     X           A0
     Y           A1
 * ---------------------------------------------------------------------------*/

/* Includes ------------------------------------------------------------------*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/* Ports ---------------------------------------------------------------------*/
#define CE_PIN   9
#define CSN_PIN 10
#define JOYSTICK_X A0
#define JOYSTICK_Y A1
/* nRF24l01 ------------------------------------------------------------------*/
// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/* Joystick ------------------------------------------------------------------*/
int joystick[2]; // 2 element array holding Joystick readings
/* ---------------------------------------------------------------------------*/

/*
 - setup function
 * ---------------------------------------------------------------------------*/
void setup()
{
  radio.begin();
  radio.setRetries(0, 15);
  radio.setPALevel(RF24_PA_HIGH);
  radio.openWritingPipe(pipe);
}

/*
 - loop function
 * ---------------------------------------------------------------------------*/
void loop()
{
  joystick[0] = analogRead(JOYSTICK_X);
  joystick[1] = analogRead(JOYSTICK_Y);
  
  radio.write( joystick, sizeof(joystick) );
}

Receive.ino

/* -----------------------------------------------------------------------------
 - File:      nRF24l01 Receive Test
 - Copyright: Copyright (C) 2015 SunFounder. For details, check License folder.
 - Date:      2015/7/21
 * -----------------------------------------------------------------------------
 - Overview
  - This project was written to test nRF24l01 module. If it runs, arduino will 
    receives data from another transceiver with 2 Analog values from a Joystick
    or 2 Potentiometers Displays received values on Serial Monitor.
 - Request
   - FR24 library
 - Connections
   - nRF24L01 to Arduino
     1 GND   	  -> GND
     2 VCC	    -> 3V3
     3 CE	      -> D9
     4 CSN/CE	  -> D10
     5 SCK/SDK	-> D13
     6 MOSI/MQ	-> D11
     7 MISO/M1	-> D12
     8 IRQ UNUSED	
 * ---------------------------------------------------------------------------*/

/* Includes ------------------------------------------------------------------*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
/* Ports ---------------------------------------------------------------------*/
#define CE_PIN   9
#define CSN_PIN 10
/* nRF24l01 ------------------------------------------------------------------*/
// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/* Joystick ------------------------------------------------------------------*/
int joystick[2]; // 2 element array holding Joystick readings
/* ---------------------------------------------------------------------------*/

/*
 - setup function
 * ---------------------------------------------------------------------------*/
void setup()
{
  Serial.begin(9600);
  delay(1000);
  Serial.println("nRF24l01 Receiver Starting");
  radio.begin();
  radio.setRetries(0, 15);
  radio.setPALevel(RF24_PA_HIGH);
  radio.openReadingPipe(1,pipe);                        
  radio.startListening();;
}

/*
 - loop function
 * ---------------------------------------------------------------------------*/
void loop()
{
  if ( radio.available() )
  {
    // Read the data payload until we've received everything
    bool done = false;
    while (!done)
    {
      // Fetch the data payload
      done = radio.read( joystick, sizeof(joystick));
      Serial.print("X = ");
      Serial.print(joystick[0]);
      Serial.print(" Y = ");      
      Serial.println(joystick[1]);
    }
  }
  else
  {    
    Serial.println("No radio available");
  }
}

 

Elenco revisioni

01/04/2010

Emissione preliminare
Private Policy Cookie Policy