Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
nRF24L01
Control de 2 servos + 1 servo o motor
xsetaseta@gmail.com
____________________________________________________________
En este montaje he utilizado dos placas arduino y dos módulos nRF24L01 para el control de 2 servos
y un motor de DC o 1 servo.
El control se realiza desde el circuito emisor donde existen 3 potenciómetros a modo de joystick,
donde 2 hacen de modo coordenadas X-Y , y el tercer potenciómetro a modo de control de potencia.
Mi objetivo era realizar el control de un avión RC de ala fija, donde el control se realiza con el timón
de dirección y con el timón de profundidad, y la potencia del motor con el tercer potenciómetro de
potencia.
En este montaje solo he utilizado el modo de transmisión de un módulo emisor a el otro módulo
receptor.
El nRF24L01+ integra un completo transceptor RF de 2,4 GHz, un sintetizador de RF y toda la lógica
de banda base incluyendo un acelerador de protocolo por hardware Enhanced ShockBurstTM con
una interfaz SPI de alta velocidad para el controlador de la aplicación. El módulo Transceptor es de
baja potencia y corto alcance, 200 metros más o menos.
Estos transceivers utilizan la banda de 2,4 GHz como muchos routers WiFi, algunos teléfonos
inalámbricos, etc y no necesitan licencia. Estos transceptores pueden tanto enviar, como recibir datos
en “paquetes” de varios bytes a la vez.
La alimentación del nFR24L01 debe estar entre 1.9 to 3.6V, por lo cual debemos utilizar la salida de
3.3V del arduino. En algunas páginas recomiendan colocar un condensador en la salida de 3.3V para
minimizar posibles caídas de tensión debido a un consumo puntual alto.
Para el control de potencia del motor DC se utiliza el modo PWM (control mediante ancho de pulso)
que maneja un MOSFET IRF630, es el que tenía a mano, puede servir cualquier otro.
Los servos se controlan mediante el ancho de pulso.
Emisor
#include <RF24_config.h>
#include <RF24.h>
#define debug 0
RF24 radio(8,7);
unsigned int z;
// Topology
// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
void setup(void)
{
Serial.begin(9600);
radio.begin();
radio.setRetries(15,15);
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
Serial.println("Transmitiendo datos");
}
void loop(void)
{
radio.stopListening();
cadena[0]='A';
cadena[1] = analogRead(sensorPin1)>>2;
cadena[2] = analogRead(sensorPin2)>>2;
cadena[3] = analogRead(sensorPin3)>>2;
cadena[4] = 'A';
cadena[5] = 'A';
#if debug
Serial.print(cadena[1],DEC);Serial.print(" ");
Serial.print(cadena[2],DEC);Serial.print(" ");
Serial.print(cadena[3],DEC);
#endif
enviarS();
radio.startListening();
delay(21); //20
void enviarS()
{
if (radio.write( cadena, 6 ))
{ Serial.println(" ok send.");}
else
{ Serial.println(" failed send.");}
}
Receptor
#include <RF24_config.h>
#include <RF24.h>
#include <Servo.h>
#define debug 0
Servo myservo1;
Servo myservo2;
Servo myservo3;
int posicion;
bool done;
// Topology
// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
void setup()
{
Serial.begin(9600);
myservo1.attach(2);
myservo2.attach(3);
myservo3.attach(4);
radio.begin();
radio.setRetries(15,15);
radio.startListening();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
Serial.println("Esperando datos");
}
void loop()
{
delay(10);
if ( radio.available() )
{
done = false;
while (!done)
{
done = radio.read( cadena, 6);
#if debug
Serial.print(cadena[0]);Serial.print(" ");
Serial.print(cadena[1],DEC);Serial.print(" ");
Serial.print(cadena[2],DEC);Serial.print(" ");
Serial.print(cadena[3],DEC);Serial.println(" ");
#endif
z=cadena[0];
switch(z)
{
case 65:
posicion = map(cadena[1], 0, 254, 0, 179);
myservo1.write(posicion);
posicion = map(cadena[2], 0, 254, 0, 179);
myservo2.write(posicion);
posicion = map(cadena[3], 0, 254, 0, 179);
myservo3.write(posicion);
analogWrite(analogOutPin, cadena[3]);
break;
}
radio.stopListening();
delay(10);
radio.startListening();
}
}
}
Librerías
Programas
Hasta pronto.
Juan Galaz
BIBLIOGRAFÍA
https://github.com/maniacbug/RF24
https://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
http://openhardware.pe/transceptores-nrf24l01-2-4ghz-radio-wireless-how-to/
http://cursos.olimex.cl/tutoriales/
http://www.electroensaimada.com/servomotor.html
http://arduino.cl/servo-motor-con-arduino/