Reciclando un antiguo Transmisor para usarlo con el PC (BYCMO Ranger 2Z/ATmega32u4/Joystick)
Buscando entre los armarios he encontrado una pequeña gloria que ya tiene sus añitos. Un transmisor de 2 canales, de un coche RC nitro BYCMO.
Como podréis ver en la imagen anterior, me ha faltado tiempo para desmontarla y ver que se puede hacer con ella.
Por lo pronto podemos ver que en su interior tiene 2 decoders, uno para cada eje y una placa con un par de leds.
Tanto los decoders como la placa de leds llevan el mismo connector de 3 pines, quizás sería interesante reaprobechar los conectores desoldándolos de la placa original.
Veamos ahora que necesitamos para poder usar lo que queda de este transmisor como mando USB para poder ser usado por ejemplo en un simulador.
Lo primero de todo y mas importante es decidir que dispositivo usar para recoger los datos de los sensores y enviarlos al ordenador. Una placa *uino parece ser la mejor opción de todas, pero buscando alguna librería para ayudarnos con el desarrollo pude encontrar esta maravillosa librería:
/ ArduinoJoystickLibrary
Esta librería permite usar cualquier placa basada en ATmega32u4. Para nuestro caso haremos 2 montajes, uno con un Arduino Leonardo conectando cables con pines incluídos y otro usando una placa en donde soldar todos los componentes usando un adruino Pro Micro. Estas dos placas permiten el uso de esta librería ya que las dos estan basadas en el chip ATmega32u4.
- Aquí es donde empieza la parte en la cual... pruebas de conectar aquí, allí... quemas los leds, los remplazas, pruebas la librería, intentas entender como hacer para leer los datos, cunado te das cuenta que estas usando una entrada digital y deberías usar la analógica... en fín, esa parte en donde uno se nutre e incluso se desespera, a veces... -
Al final el tema queda algo tal que así:
Como estamos haciendo pruebas para empezar a codificar nuestro programa, de momento no hemos incluido los leds, ya que como mucho parpadearán y no nos van a añadir ninguna funcionalidad adicional.
El conexionado queda así:
Board Decoder1 Decoder1
GND - (negro) - (negro)
5V + (rojo) + (rojo)
A2 S (blanco)
A3 S (blanco)
Una vez hecho esto toca empezar con el programa. Así quedaría el código necesario para subir a nuestra placa:
#include <Joystick.h>
#define RXLED 8
#define TXLED 9
#define _INT1 1
#define _INT2 0
#define MAX_RANGE 1023
#define MIN_RANGE 0
int encoder0PinA = 19;
int encoder0PinB = 20;
int maxRange = 700;
int minRange = 300;
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
0, 0, // Button Count, Hat Switch Count
false, false, false, // X, Y, Z
false, false, false, // Rx, Ry, Rz
false, false, // Rudder, Throttle
true, false, true); // Accelerator, Brake, Steering
void setup() {
pinMode (encoder0PinA, INPUT);
pinMode (encoder0PinB, INPUT);
pinMode(RXLED, OUTPUT);
pinMode(TXLED, OUTPUT);
Joystick.begin();
Joystick.setSteeringRange(MIN_RANGE, MAX_RANGE);
Joystick.setAcceleratorRange(MIN_RANGE, MAX_RANGE);
}
volatile unsigned long Time1;
volatile unsigned long Time2;
volatile unsigned int Value1;
volatile unsigned int Value2;
volatile bool Val1Changed;
volatile bool Val2Changed;
unsigned int NewValue1;
unsigned int NewValue2;
void loop() {
checkAnalog1();
checkAnalog2();
if (Val1Changed)
{
NewValue1 = (NewValue1+Value1)/2;
Joystick.setAccelerator(NewValue1);
//Serial.println(analogRead(NewValue1));
Val1Changed = false;
digitalWrite(TXLED, HIGH);
}else{
digitalWrite(TXLED, LOW);
}
if (Val2Changed)
{
NewValue2 = (NewValue2+Value2)/2;
Joystick.setSteering(NewValue2);
//Serial.println(analogRead(NewValue2));
Val2Changed = false;
digitalWrite(RXLED, HIGH);
}else{
digitalWrite(RXLED, LOW);
}
delay(8);
}
void checkAnalog1()
{
int valPinA = map(analogRead(encoder0PinA), minRange, maxRange, MIN_RANGE, MAX_RANGE);
if (Value1 != valPinA)
{
Value1 = (Value1 + valPinA)/2;
Val1Changed = true;
}
}
void checkAnalog2()
{
int valPinB = map(analogRead(encoder0PinB), minRange, maxRange, MIN_RANGE, MAX_RANGE);
if (Value2 == valPinB){
Value2 = (Value2 + valPinB)/2;
Val2Changed = true;
}
}
Pronto seguiremos con ello...
Comentarios