Вы находитесь на странице: 1из 5

Joystick Rf Tx

Descripcin
Esto es un Joystick a control remoto por medio de Radio Frecuencia de 2.4 MHz, con el
circuito integrado NRF24L01. Usamos el Arduino Pro Mini para miniaturizar, pero se puede
usar igual el Arduino Uno. Coinciden los nmeros de Pines.
Est vinculado al trabajo 141 - Arduino - Robot tipo Rover Carrito de dos Ruedas (NRF24L01
y MMA7361) en cuanto a que debe poder controlar ese carrito, sin ninguna modificacin.
De ese trabajo, el carrito es el mismo, el programa de recepcin para el carrito
(RoverRx.ino) es el mismo y est en el archivo.ZIP
Para cumplir con ello, las seales que el Joystick entrega, deben ser del tipo:
X343Y342B0; que son los valores de X, Y y el estado del botn de parada.
X e Y deben estar entre 220 y 480, debindose por lo tanto Mapear los valores ledos por
el Joystick (Entre 0 y 980 aproximadamente) para entregarlos entre 220 y 480. La premisa
es que el receptor no necesite un programa especial, y tener un solo programa receptor.
Adems el botn debe entregar 0 (Cero) como estado normal.
Para leer solamente y limpiamente lo que el Joistick entrega, se debe cargar en el Carrito
Rover este programa: NRF24TextRx.ino, que est en el archivo.ZIP.
Se leer la salida como: X343Y342B0

Imagen del Joystick RF 2.4 GHz

1
Esquema

Programa Joystick_Rf_Tx.ino
#include <SPI.h> // Para NRF2401
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
int PinX = 1; // Ponerle nombre a todos los pines usados
2
int PinY = 0;
int PinC = 5; // Boton de la palanca Joy, unico que usaremos
RF24 radio(9,10); // Para NRF2401
const uint64_t pipe = 0xE8E8F0F0E1LL; // Para NRF2401
int X; // Definir todas las variables
int Y;
int C;
String Cadena; // Para NRF2401

void setup()
{
radio.begin(); // Para NRF2401
radio.openWritingPipe(pipe); // Para NRF2401
Serial.begin(9600); // Unicamente para pruebas
pinMode(PinC, INPUT); // Seleccionar entrada/salida
} // FIN del void setup()

void loop()
{
X = analogRead(PinX); // Leer todos los valores
X = map(X, 0, 968,220, 480); // Para usar en el Rover
Y = analogRead(PinY);
Y = map(Y, 0, 968,480, 220); // Para usar en el Rover
C = digitalRead(PinC);
if (C == 1) {C = 0;} // Para usar en el Rover
else {C = 1;} // Para usar en el Rover
Cadena= "X" + String(X) + "Y" + String(Y) + "B" + String(C); // Para enviar por RF.
//Serial.println(Cadena);

// Transmision de la cadena con datos.


int largo = Cadena.length(); // Calcula el largo de la cadena

for (int i = 0; i < largo; i++)


{
int charToSend[1];
charToSend[0] = Cadena.charAt(i);
// Serial.println(Cadena.charAt(i));

3
radio.write(charToSend,1);
}
// Enviar el caracter de FIN
int msg[1]; // Para NRFZ24L1
msg[0] = 2;
radio.write(msg,1); // Envia el caracter para confirmar envio correcto

radio.powerDown();
delay(100);
radio.powerUp();

} // FIN del void loop()

Imagen de envo del Nmero 3


Imagen de Osciloscopio para confirmar que el Joystick funciona bien. Es para cuando no
podemos leer el envo en el Carrito Rover, por fallas.

Imagen envo 3. Cdigo es bin 00001111 dec 51 hex 33


Azul es Pin 7, MISO 12 Amarillo es PIN 5, SCK 13.
No mostrados: PIN 4 (Siempre bajo), CS 10 PIN 3 (Siempre bajo), CE 9
Las ondas se ven distorsionadas porque el osciloscopio es de 60 MHz y la frecuencia es de
GHz. Aparecen entonces retardos. En una comunicacin normal SPI se puede bajar la
velocidad y visualizar bien, pero con el NRF24L01, como usa libreras especiales SPI, no s
como controlarle la velocidad.
El ajuste como se ve es de 2 V por divisin para la tensin y 250 nseg por divisin para el
tiempo. Con esto pueden calcular la frecuencia del reloj.
Para mandarle el 3, se carga en el Joystick el programa NRF24TextTx.ino que est en el
archivo.ZIP.
4
La representacin normal sera entonces:

Вам также может понравиться