• Buscar
  • Entrar

escuadrón

Cruz de San Andrés

  • Público
  • General
  • Presentaciones
  • Academia
  • Reactores
  • Helicópteros
  • Históricos
  • Av Comercial
  • Espacio
  • Videojuegos
  • Hardware
Hardware

Construccion de panel con Arduino y libreria Joystick

User avatar
Angel
Cadete

Construccion de panel con Arduino y libreria Joystick

hace 6 años

Construccion de panel con Arduino y libreria Joystick

hace 6 años
Bueno pues despues de los post sobre construccion de paneles con Leo Bodnar y Arduino + DCS-Bios vamos a cerrar la trilogia con otro metodo, usando una placa Arduino Leonardo con la libreria Joystick.

Primero necesitamos una placa Arduino o clon que son muy baratas, pero no cualquiera sino un modelo con soporte USB (que posea el chip ATmega32U4) esto permitira que windows la reconozca como un joystick usb (en vez de como un dispositivo serial como las otras)

Lista de placas Arduino compatibles

Las placas Arduino a diferencia de las LeoBodnar y otras suelen traer un solo conector de tierra(GND) y +5v comun lo que nos obliga a soldar cables o usar un PCB para sacar mas conectores.

Pero hay una excepcion la Arduino Leonardo Plus (recomendada) por 10€ viene con conexiones pin/GND/5v para cada puerto.

Image

Cmo veis tiene dos filas de conectores indicadas con colores, la superior son las entradas digitales ,en amarillo tenemos 2,3,4,5,... , el rojo es +5v (que normalmente no usaremos) y la fila negra es tierra o GND.
Para conectar un boton basta con poner un pin en numero y otro en GND (2/GND) para poner un switch o palanca On-Off-On usariamos dos pines digitales para las posicones On y el GND(3/4/GND)

La fila inferior son las entradas analogicas (para ejes) en este tipo de conexiones usaremos habitualmente potenciometros ,la conexion usa los tres pines.
La fila amarilla a Input ,la roja a 5v y la negra a GND, en el potenciometro los pines son estos...
Image

Con esto ya estaria la conexion fisica a la placa,sencillo verdad? pero nos falta la programacion.
Esto puede parecer mas complicado pero son unos pocos pasos.

1-Descargar Arduino IDE (el programa que se usa para comunicarse y programar y lo ejecutamos, al conectar la placa deberia reconocerla (en "herramientas"/placa se vera el modelo sino podemos seleccionarlo de un desplegable)

2-Descargar la libreria Arduino Joystick
,bajamos el .zip y lo añadimos a las librerias de Arduino (en Arduino IDE "Programa/Incluir libreria/añadir biblioteca .zip)

Image

3-Copiar codigo y enviarlo a la placa Arduino Leonardo
#include "Joystick.h"

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
JOYSTICK_TYPE_JOYSTICK, 12, 0,
false, false, false,
false, false, false,
false, true, true,
false, false);

void setup() {

pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);

Joystick.begin();
}

void loop() {

// X-Axis
int xAxis = analogRead(A2);
Joystick.setXAxis(xAxis);

// Y-Axis
int yAxis = analogRead(A3);
Joystick.setYAxis(yAxis);

// Button 1
int button1State = !digitalRead(2);
if (button1State == 1)
{
Joystick.pressButton(0);
}
else
{
Joystick.releaseButton(0);
}

// Button 2
int button2State = !digitalRead(3);
if (button2State == 1)
{
Joystick.pressButton(1);
}
else
{
Joystick.releaseButton(1);
}

delay(50);
}
En la parte superior del Arduino IDE vemos varios botones, el icono de "verificar" sirve para analizar el codigo y ver que no tiene errores, el segundo la flecha a la derecha "subir" envia el codigo a la placa.

Una vez enviado podemos abrir el panel "dispositivos de juego" deWindows y veremos que tenemos un nuevo joystick con dos ejes y 12 botones (ojo que solo he puesto codigo para que funcionen dos botones y dos ejes, para mas solo hay que copiar/pegar y cambiar el numero de pin luego lo explico con mas detalle)

Image

Y con esto ya tenemos nuestro joystick Arduino funcionando y por solo 10€!!
  • Quote
User avatar
Angel
Cadete

Construccion de panel con Arduino y libreria Joystick

hace 6 años

Construccion de panel con Arduino y libreria Joystick

hace 6 años
Aqui tratare de explicar algo del codigo,como no tengo idea de programacion todo esto seguro que se puede hacer de otras maneras y mejor pero por lo menos puedo garantizar que esto funciona que es lo importante.
#include "Joystick.h"
Aqui le decimos que incluya la libreria joystick en nuestro proyecto que es la que vamos a usar
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
JOYSTICK_TYPE_JOYSTICK, 12, 0,
Aqui le indicamos a Windows que el dispositivo sera un "joystick" (tambien podria ser un gamepad o un dispositivo multieje a mi me fue bien asi) y que tiene 12 botones y 0 setas ( lo reconocera asi pero hay que añadirlos al codigo para que funcionen)
false, false, false,
false, false, false,
false, true, true,
false, false);
Estos son los ejes que reconoce windows podemos activarlos o desactivarlos (true/false) cada uno sera reconocido con un nombre en las propiedades del "dispositivo de juego" serian estos...

eje X, eje Y, eje Z
rotacion X,rotacion Y, rotacion Z
rudder, throtlle, accelerator
brake, direccion
void setup() {

pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);

Joystick.begin();
}
En esta seccion se configuran parametros al inicio del programa.
Aqui se ve que hemos definido o activado dos ejes analogicos (pines A2 y A3) y dos botones (pines digitales 2 y 3) si queremos mas basta con añadir aqui mas lineas con los pines necesarios.
void loop() {

// X-Axis
int xAxis = analogRead(A2);
Joystick.setXAxis(xAxis);

// Y-Axis
int yAxis = analogRead(A3);
Joystick.setYAxis(yAxis);

// Button 1
int button1State = !digitalRead(2);
if (button1State == 1)
{
Joystick.pressButton(0);
}
else
{
Joystick.releaseButton(0);
}

// Button 2
int button2State = !digitalRead(3);
if (button2State == 1)
{
Joystick.pressButton(1);
}
else
{
Joystick.releaseButton(1);
}

delay(50);
}
Esto es lo que ejecuta la placa ,la primera seccion "X-Axis" define un eje que esta conectado en A2 y lee su posicion. el siguiente Y-Axis hace lo mismo.

La seccion "Button 1" define un boton en el pin 2 y lo que realiza si se presiona o libera.Para añadir mas botones basta con copiar y pegar esta seccion cambiando el numero del pin.

Espero que os sea util.
Si alguien esta mas puesto en programacion o tiene alguna duda que mis escasos conocimientos sepan resolver adelante.
  • Quote
User avatar
Dimoni
Cadete

Construccion de panel con Arduino y libreria Joystick

hace 6 años

Construccion de panel con Arduino y libreria Joystick

hace 6 años
Pues post ahi guardadito, de momento no me planteo usar la Leonardo, la Mega por ahora no me la acabo, pero quien sabe.
Estos post tuyos son una bendicion cuando me atasco con algo :wink:

S!
Fem por o fugim ?
  • Quote
User avatar
Angel
Cadete

Construccion de panel con Arduino y libreria Joystick

hace 6 años

Construccion de panel con Arduino y libreria Joystick

hace 6 años
Este sistema te sirve tanto para la Leonardo como para la Due (una Mega con soporte USB) o micro (una placa minuscula)
Esta es una alternativa a la hora de realizar botoneras a la cara Leo Bodnar, aunque sin soporte para encoders (al menos en la libreria, quien sepa C++ seguro que lo puede hacer)

Saludos!
  • Quote
User avatar
Angel
Cadete

Construccion de panel con Arduino y libreria Joystick

hace 6 años

Construccion de panel con Arduino y libreria Joystick

hace 6 años
Bueno esto no pega exactamente aqui pero acabo de lograr hacer funcionar un eje del Arduino joystick con un sensor Hall.

Solo he tenido que conectar cada pata como indica el manual para sustituir el potenciometro conectado en el.Como el funcionamiento es igual (uno regula un voltaje mediante una resistencia al girar y otro segun la fuerza de un campo magnetico) no hay que hacer nada mas.

La conexion seria asi, mirando hacia nosotros el sensor Hall (cara mas estrecha y grabada) la pata izquierda es la de 5v, la central GND (tierra) y la derecha Vout que es la que va al pin analogico de Arduino.

Image

En este cutre video que he grabado sujetando el movil con una mano podeis ver como funciona, la "varita magica" es un boli bic con dos imanes de neodimio pegados.Al introducir el hall y girar el boli detecta la variacion del campo magnetico y envia la señal al Arduino programado como joystick viendose en el panel "dispositivo de juego" de windows como funciona el eje.



Ventajas?
-Mayor precision
-Nulo desgaste
-No le afecta el polvo o la humedad

y sobre todo a la hora de hacer un eje el usar potenciometros obliga muchas veces a montar engranajes para desmultiplicar el movimiento y poder usar la mayor parte del recorrido de este.

Image

Si logro montar este sensor Hall de alta precision en el eje me ahorrare muchos problemas con ese engranaje.

Por cierto si vais a usar sensores Hall para vuestros proyectos deben de ser analogicos,lineales, de alta sensibilidad y voltaje adecuado...en fin para no enrrollarme comprad exactamente este

Allegro A1324LUA-T
Sensibilidad 5,0 mV/g
Voltaje 4,5 a 5,5v
Encapsulado con patillas

Y los imanes que sean de Neodimio.

Saludos.
  • Quote
Hardware
No registered users
  • © 2026 Luis Glez 'Orleans'