Radio Control con Arduino y Antena nRF24L01
- NuOor
- 14 jul 2018
- 3 Min. de lectura
Actualizado: 16 jul 2018
¿Quieres armar tu Drone y crees que el control es demasiado costoso? Bueno, te ayudaremos a crear tu propio radio control , el cual no sólo te ayudara a reducir costos en tu proyecto, sino que también podrás añadirle las funciones que deseas a tu Drone.
Este radio control consta de un Arduino pro micro y un modulo NRF24L01.

Pero, ¿qué es un nRF24L01?
El nRF24L01 es un transceptor (transmisor y receptor) diseñado para aplicaciones inalámbricas con un bajo consumo de potencia, ideal para ahorrar energía en tus proyectos, y una velocidad de frecuencia de 2.4GHz , por lo que no necesita licencia y es libre en todo el mundo. Con este pequeño pero potente modulo nRF24L01 podemos controlar nuestros proyectos de manera inalámbrica con un radio de hasta 250m en zona abierta y con el modulo nRF24L01+ PA+antena puedes aumentar el rango de control hasta 1km en zona abierta.
Este módulo opera con un voltaje entre 1.9 a 3.6 volts (voltaje entre VCC y GND) pero sus pines de comunicación soportan hasta 5 volts, voltaje que nos puede proporcionar el Arduino.

Entre sus pines de comunicación tenemos: los pines de comunicación SPI (MOSI, MISO y SCK ), el pin IRQ, que sirve para comunicarse con el procesador por medio de interrupciones, y los pines CE y CSN, que sirven para activar el chip en modo transmisor o receptor y para activar o desactivar el chip.
Ahora que ya conocemos un poco más sobre este maravilloso módulo, es hora de realizar algunas pruebas. A continuación, haremos un ejemplo en el cual enviamos los valores obtenidos de un joystick de un Arduino UNO(transimisor) y encendemos unos LED conectados a un Arduino nano(receptor). Para este ejemplo utilizaremos los siguientes productos: un Arduino UNO, un Arduino nano, un Joystick, unos LED con sus respectivas resistencias y un Protoboard.

Es Hora de Programar
Antes de empezar a programar necesitaremos instalar la librería RF24L01 , si no sabes como hacerlo puedes aprender a hacerlo haciendo click Aqui.
Ahora que ya tienes instalada la librería y las conexiones realizadas es hora de empezar con la programación, primero empezaremos con el código del transmisor y luego realizaremos el código del receptor.
/* Codigo para el transimsor
* Arduino UNO
* Pierre C.J.
* correo:nuoor.market@gmail.com
* @nuoortechnology
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// en nuestro caso tenemos el "ce" conectado en la entrada 8 y "csn" en la entrada 9
//del arduino pero si las colocaste en otras entradas solo debes cambiar los valores
RF24 radio(8, 9); // (ce , csn)
const byte direccion[6] = "00001";//esta sera la direccion para que se puedan
//comunicar los arduinos, debe ser la misma en ambos
struct Lectura {
int ejeY;
int ejeX;
};
Lectura a;//damos una instancia de variable "a" y luego llamar a los miembros del struct
void setup() {
radio.begin();
radio.openWritingPipe(direccion);
radio.setDataRate(RF24_250KBPS);
radio.stopListening();
}
void loop(){
a.ejeY = map(analogRead(0),0,1023,0,255);//lectura del joystick en el eje x
a.ejeX = map(analogRead(1),0,1023,0,255);//lectura del joystick en el eje y
radio.write(&a, sizeof(Lectura));
}
/* Codigo para el receptor
* Arduino NANO
* Pierre C.J.
* correo:nuoor.market@gmail.com
* @nuoortechnology
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// en nuestro caso tenemos el "ce" conectado en la entrada 8 y "csn" en la entrada 9
//del arduino pero si las colocaste en otras entradas solo debes cambiar los valores
RF24 radio(10, 9); // (ce , csn)
const byte direccion[6] = "00001";
byte led1=5;
byte led2=6;
byte led3=7;
byte led4=8;
int valor_ejey=0;
int valor_ejex=0;
struct Lectura {
int ejeY;
int ejeX;
};
Lectura a ;
void setup() {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
Serial.begin(9600);
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(0,direccion);
radio.startListening();
}
void loop(){
while ( radio.available() ) {
radio.read(&a, sizeof(Lectura));
valor_ejey=a.ejeY;
valor_ejex=a.ejeX;
Serial.print("Valor en el eje Y : ");
Serial.println(valor_ejey);
Serial.print("Valor en el eje X : ");
Serial.println(valor_ejex);
if (valor_ejey>220 && valor_ejex<130 && valor_ejex>100){
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
if (valor_ejey<35 && valor_ejex<130 && valor_ejex>100){
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
if (valor_ejex>220 && valor_ejey<130 &&valor_ejey>100){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
digitalWrite(led4,LOW);
}
if (valor_ejex<35 && valor_ejey<130 && valor_ejey>100){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
}
}
}
Si deseas saber los valores recibidos por el Arduino Nano sólo te queda abrir el monitor serial y si deseas puedes aumentar o disminuir los valores.
Espero que te haya servido de mucho y recuerda que cualquier consulta que tengas no dudes en escribirnos a nuestro correo : nuoor.market@gmail.com y/o escribenos a travez de nuestras redes sociales @nuoortechnology .
Comments