• 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

Apuntes de construccion de panel para DCS con Arduino

  • 1
  • 2
  • 3
  • 4
  • Next
User avatar
Angel
Cadete

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Hola!! soy Troy McClure tal vez me recuerden de otros tutoriales como Apuntes de construccion de paneles con Leo Bodnar...

Bueno ,pues resulta que ademas de la placa Leo Bodnar que es bastante cara me dio por pedir un clon Arduino en Amazon ya que venia con cables y una protoboard mas que nada por los accesorios y por si mas adelante me atrevia a practicar con ella.Y aqui quiero dejar mis primeras impresiones.

Paneles con Arduino
Ventajas:
Muy economicas! hay clones tirados de precion en Amazon,como un clon de Arduino mega (ELEGOO Mega2560 R3) con mas de 50 pines de conexion por 14€...clon Arduino Mega

Permiten no solo enviar comandos (botones, rotary) a DCS sino tambien recibir datos ( estado luces indicadoras, paneles lcd)

Muchos tutoriales y accesorios (placas de expansion, shields con conectores de tornillo para cables...)

Desventajas:
Solo funciona con DCS
Hay que programar* la placa en C++ para que realice cualquier funcion.
*Lo de programar se puede evitar por completo, yo lo unico que he programado en mi vida ha sido un video VHS para grabar el equipo A cuando me iba a la playa de chaval.Basta con copiar/ pegar codigo de DCS:BIOS

Vamos a ver los pasos necesarios para hacer que funcione, los cuales he seguido de aqui

PASO 1
Descargar DCS:BIOS
DCS:BIOS
Guardarlo en algun lugar y no lo olvideis.Dentro de la carpeta dcs-bios-v0.7.1 teneis varios ficheros y directorios que tendreis que usar a continuacion.

Abrir un explorador en windows y pegar la siguiente ruta...
%USERPROFILE%\Saved Games\DCS
(O ir directamente a vuestra carpeta de juegos guardados\DCS)
Si no existe una carpeta llamada "Scripts" ( ese era mi caso) crearla, de lo contrario seguir las instrucciones de la pagina oficial DCS:Bios howto
Copiar dentro de la carpeta "Scripts" que acabais de crear la carpeta DCS-BIOS (que esta dentro de la carpeta dcs-bios-v0.7.1/Scripts que acabais de descargar)
Si no existe ningun fichero export.lua copiar tambien el de la misma carpeta.Debe de quedar asi...
Image

PASO 2
Conxion fisica de botones, switch.. al Arduino.
Hay muchos esquemas por ahi, es como la Leo Bodnar en mi caso conecte un switch on-off-on que tiene 3 patas, las de los extremos van los pines digitales (evitar el 1,2 (RX/TX) y el 13 el resto los que querais) y la del medio a GND (tierra).En este caso estan en los pines 8 y 9.
Image

PASO 3
Descargar e instalar Arduino IDE.
El entorno de programacion, nada raro solo un programa en el que copiar el codigo de DCS:BIOS
Arduino IDE

Descargar librerias (conjuntos de funciones y codigo que hacen que todo esto funcione ,no necesitamos saber nada mas de ello).Lo bajamos de Aqui la ultima version en .Zip y NO lo extraemos.

Configurar Arduino IDE, el entorno de programacion (nada raro solo seleccionar unas opciones)
Abrimos el programa Arduino IDE que descargamos e instalamos antes.
En la parte superior pulsamos en "Programa" y seleccionamos "incluir libreria" y "añadir biblioteca Zip"
(si parece que el que lo escribio en español se lia con la traduccion de "library" pero bueno)
Selecionamos el archivo .Zip que acabamos de descargar, cuando acabemos cerramos y volvemos a abrir Arduino IDE y ya esta todo listo.

PASO 4
Crear nuestro primer "sketch" o "programar" funciones para nuestro panel de DCS
Entramos en Arduino IDE y vamos a Archivo/ejemplos/DCS-Bios y seleccionamos la plantilla IRQSerial

Veremos esto...
Image
¿Veis el comentario que pones "paste code snippets...here"? Pues ahi vamos a copiar/pegar el codigo para que funcionen nuestros interuptores.

¿Y de donde lo sacamos?
Ahi esta lo bueno, dentro de la carpeta "Scripts" que guardasteis en Juegos guardados/DCS hay una carpeta llamada "Docs" que contiene un documento llamado "control-reference" donde DCS tiene codigo para varios de sus modulos como FW-190, UH-1H, Mig-21...etc
C:\Users\*Vuestro usuario*\Saved Games\DCS\Scripts\DCS-BIOS\doc

Aqui podeis ver com ohe seleccionado el UH-1H o Huey y su "Electric panel"

Image

Ahora solo tengo que copiar el codigo, por ejemplo del Switch del Inverter, que tiene 3 posiciones.Es este...
DcsBios::Switch3Pos inverterSw("INVERTER_SW", PIN_A, PIN_B);
En el IDE de Arduino y cambiar el "PIN_A" y "PIN_B" por el numero de Pin donde tengo conectado los cables del switch.Algo asi...

Image

PASO 5
Con toda la "programacion" hecha lo unico que hace falta es compilar y subir el programa (eso se hace pulsando un boton) pero para ello antes necesitamos saber en que puerto serie se encuentra conectado nuestro Arduino (si esta en un conector USB pero internamente o logicamente es un puerto serie)

En el IDE desplegando la opcion "Herramientas/ puerto" vemos el puerto en el que esta conectado (en mi caso en el COM3 aparece "Arduino/genuino UNO" ,lo seleccionamos.

Ahora solo tenemos que pulsar en el segundo icono (una flecha a la derecha dentro de un circulo, pone "subir" si dejas el raton encima) y compilara y cargara el programa en la placa Arduino.

Con esto cerramos el IDE y finalizamos este punto .

PASO 6
Ultimo paso ,conectar la placa.
Vamos a la carpeta DCS-BIOS que nos descargamos antes de GitHub se llamaba "dcs-bios-v0.7.1" la ultima version y vemos que dentro tiene un fichero llamado "connect-serial-port" ,lo ejecutamos y se abre un terminal que nos pregunta el numero de puerto serie al que tenemos conectado el Arduino
Image

( en mi caso era el 3), lo introducimos y pulsamos enter.Si todo va bien la placa se conectara.Ahora arrancamos DCS.

Llegados a este punto la verdad es que esperaba que fallara algo y sorprendentmente no fue asi.Funciona muy bien, es mas a diferencia de Leo Bodnar reconoce la posicion "Off" con lo que el switch on-off-on es reconocido en cualquie posicion.

Increible, esperaba que fuera todo mucho mas complicado.Os dejo un video del resultado...

  • Quote
User avatar
Shinichi
Piloto

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Angel
hace 7 años
Hola!! soy Troy McClure tal vez me recuerden de otros tutoriales como Apuntes de construccion de paneles con Leo Bodnar...
Bueno, como Troy McClure no, pero como Angel sí que te recuerdo del otro tutorial 😁 . (Y ahora que lo digo, también me has recordado a los famosos cuando presentan en el Teletienda 😂😂).

Aunque seguramente no me anime, este parece un sistema mucho más fácil que el anterior. Muchas gracias 😉.
  • Quote
User avatar
Angel
Cadete

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Bueno , mas facil es Leo Bodnar al fin y al cabo a excepcion de los encoder (que solo tienes que bajar un programita para configurarlos) el resto es conectar los cables y configurar en el simulador lo que quieres que haga el boton/rotary...etc.

Con Arduino te puede complicar lo que quieras, estaba echando un vistazo a la config de la radio ADF del Huey y tiene hasta "outputs" para manejar servos que muevan una aguja fisica en tu cabina cuando buscas frecuencias.

Lo que me sorprendio es que es posible tambien una configuracion sencilla de botonera sin complicarse ni tener que programar nada.

Aqui quedan ambas opciones por si a alguien le interesa el tema.
  • Quote
User avatar
Lipe
Piloto

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
a esto me apunto......
Image
  • Quote
User avatar
Angel
Cadete

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Una diferencia importante entre Leo Bodnar y Arduino es como gestiona los Switch On-Off.

Leo Bodnar no considera la posicion "Off" asi que el simulador solo recibe una señal cuando ponemos el "On" ( creo haber leido que hay programas para configurar cuando un boton esta pulsado o no tipo SVMapper o Joy2Key pero no lo he mirado)

Para verlo mas claro un video, si os fijais el switch en el overhead solo cambia cuando la posicion del switch real pasa a "On"


Ahora en cambio vamos a ver como funciona Arduino.Si nos fijamos en el siguiente video vemos que el simulador reconoce tanto la posicion "On" como la "Off" emulando perfectamente lo que sucede en cabina ( y ademas el led de 12v que incluye funciona con los 5v de la placa, no me pregunteis como que no lo se :wink: )
  • Quote
User avatar
Pegaso
Instructor
Patrocinador

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Una cosa, en DCS al menos, puedes programar los archivos .lua para que "reconozca" la posición OFF. Es relativamente sencillo, pero debes hacerlo para cada interruptor.

Ejemplo:

-{down = iCommandPlaneGearUp, name = _('Landing Gear Lever - LG UP'), category = _('Instrument Panel')},
-{down = iCommandPlaneGearDown, name = _('Landing Gear Lever - LG DOWN'), category = _('Instrument Panel')},
-{down = iCommandPlaneGear, name = _('Landing Gear Lever - LG UP/LG DOWN'), category = _('Instrument Panel')},

Las dos primeras líneas sirven en el simulador para definir cada acción. La primera sube el tren de aterrizaje y la segunda la baja, podrían ponerse dos teclas para diferenciar cada acción. Y la tercera serviría para usar una tecla para hacer las dos cosas, o sea al pulsar si el tren está abajo lo sube, y si está arriba lo baja. Pero no diferencia donde está con lo cual puede ser que si usamos esta acción y se desconfigura, acabe bajando el tren cuando subes la palanca o viceversa.



Y en este segundo ejemplo, es lo que yo he usado para configurar el interruptor, es una mezcla de las dos primeras líneas.

-{down = iCommandPlaneGearUp, up = iCommandPlaneGearDown, name = _('02.- Tren de aterrizaje'), category = _('Personales')},

Para ello veis que al principio pone "down" que es cuando pulsamos, a continuación la acción que hace al pulsarlo "iCommandPlaneGearUp" (subir tren), y "up" cuando lo sueltas, con el "iCommandPlaneGearDown" (bajar el tren).



Aparte de esto, no es genérico, quiero decir que por ejemplo esta línea que he "mezclado" no sirve para todos los módulos, hay módulos que tienen diferencias en las líneas. El ejemplo de arriba es para el F-5, y el que pongo a continuación es para el Ka-50, en este segundo caso no tiene diferencia entre subir y bajar el tren (igual con la nueva cabina actualicen los archivos), por lo que debes usar el mismo dos veces para que suba y baje.

{down = iCommandPlaneGear, up = iCommandPlaneGear, name = '01.- Tren aterrizaje', category = 'Personales'},

Aunque la estructura en el .lua es la misma. Primero "down", luego el "up", luego el nombre que aparece en la pantalla de configuración de controles y al final la categoría en la que aparece si quieres ponerle una.

Espero no haber liado más que ayudado.
  • Quote
User avatar
Angel
Cadete

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Gracias, esta bien conocer diferentes maneras de hacer las cosas.

He leido algo acerca de software como Joytokey (de pago ,hay version de prueba temporal)

Segun tengo entendido (no probado) se pueden programar acciones para cuando mantienes un boton pulsado (ON en el switch) y cuando lo liberas (OFF)

Parece que es una opcion que tienen desde hace versiones...
JoyToKey 5.9
Fixed a crash issue for some online games
Enhanced "Keyboard2" page to support the followings:
Supported the emulation of Input1 ~ Input4 in sequence at the specified interval (hold duration)
Supported different key assignment based on how many times a button is pressed within the specified time threshold
Supported the key assignment when a button is released
Supported the definition of mouse cursor movement via right click menu. For example, this enables one button input to cycle through up, right, down, left mouse cursor movement whenever it's pressed
Supported a mouse horizontal wheel rotation
Improved the keycode emulation for the Numpad '/' and a few other keys
Miscellaneous configuration options were added for OneSwitch.org.uk ex) FontSizeProfileList=20 FontSizeButtonList=20 ProfileImageFullScreenRatio=1.0
Lo bueno es que seria independiente de los diferentes modelos o cambios en DCS.
  • Quote
User avatar
Angel
Cadete

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Bueno pues sigo con el proyecto aunque sin decidir si lo hare con una placa, la otra o quizas con ambas.

Tengo pendiente probar el joytokey a ver que tal va con la Leo Bodnar, de momento he hecho unos recortes para probar como quedarian unos paneles.

Image
(ADF y Electric panel del Huey)

La version final podria ser con este tablero y papel fotografico pero seguramente seria delicado.
Quizas me pille panel de metacrilato para hacer otras pruebas, seria mas resistente y con mejor acabado, a ver que tal se trabaja.
  • Quote
User avatar
Angel
Cadete

Apuntes de construccion de panel para DCS con Arduino

hace 7 años

Apuntes de construccion de panel para DCS con Arduino

hace 7 años
Hola de nuevo, antes he comentado las ventajas e inconvenientes de usar una placa Arduino para construir paneles de simuladores.

El principal problema que tienen es que el codigo para usarlas como tal solo esta disponible para algunos aparatos en el simulador DCS (FW-190, L-39, A-10, UH-1H, Mig-21,Ka-50, Mi-8, F-86, BF-109 y P-51)

No obstante me acabo de enterar de que determinadas placas Arduino vienen preparadas para ser reconocidas como un teclado corriente como la Arduino Leonardo (10-12 clones a 20€ la original)

Aunque habria que escribir algo de codigo parece que seria sencillo (y repetitivo) y hay tutoriales por ahi.

Aunque no estan pensadas para esto a otras placas como las Arduino Mega (que tienen mas pines) podria cambiarse el firmware para que funcionaran como la Leonardo ,como describen por aqui

Queda esto como recordatorio para futuros proyectos y por si alguien quiere investigar el tema.El mio ya sera una mezcla de Leo Bodnar y Arduino con Bios-DCS y ya no voy a meterme a mas cosas.

Sigo a ratos construyendo paneles y base...

Image

Image

Nuevo descubrimiento... existe una libreria para Arduino Leonardo ( el resto habria que modificar el firmware de la placa) que configura la placa Arduino como un joystick con hasta 32 botones y varios ejes.
The joystick or gamepad can have the following features:

Buttons (default: 32)
Up to 2 Hat Switches
X, Y, and/or Z Axis (up to 16-bit precision)
X, Y, and/or Z Axis Rotation (up to 16-bit precision)
Rudder (up to 16-bit precision)
Throttle (up to 16-bit precision)
Accelerator (up to 16-bit precision)
Brake (up to 16-bit precision)
Steering (up to 16-bit precision)
Se puede obtener aqui...

Arduino Joystick Library 2.0

Mas instrucciones para hacerlo con otros Arduino aqui

Hay que tener en cuenta que...

Arduino Leonardo tiene 20 pines por defecto, para lograr mas es necesario una placa matriz.

Con esta libreria NO se pueden usar Rotary Encoders los cuales vienen muy bien para las radios.

Para usar encoders habria que usar otro codigo, hay gente que lo ha hecho
  • Quote
User avatar
Angel
Cadete

Apuntes de construccion de panel para DCS con Arduino

hace 6 años

Apuntes de construccion de panel para DCS con Arduino

hace 6 años
Correccion/aclaracion...

Las placas Arduino Leonardo y Due son reconocidas como interfaz de usuario o sea como un joystick.Esto es muy interesante como alternativa para construir una botonera sin complicaciones (Como Leo Bodnar pero sin encoders)
(La libreria y el flasheo es para que otras placas como la Arduino Uno se comporten como estas)

Quizas mas adelante me haga con una (la Due me gusta, tiene muchas entradas)

Errores...

Aunque la primera vez que conecte la Leo Bodnar todo fue perfecto, al probar estes dias la conexion con connect-serial-port me daba este error...
1 [main] socat 18648 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer. Please report this problem to
the public mailing list cygwin@cygwin.com
2019/09/26 22:19:59 socat[18648] E stat("/dev/ttyS2"): No such device or address
Presione una tecla para continuar . . .
Despues de mucho busqueda infructuosa (que si actualizar el cygwin que si abrir puertos en el firewall) lei acerca de este archivo...

dcs-bios-v0.7.1\dcs-bios-v0.7.1\Scripts\DCS-BIOS\BIOSConfig.lua

Lo abrimos con notepad++ y vemos...
BIOS.protocol_io.connections = {
BIOS.protocol_io.DefaultMulticastSender:create(),
- BIOS.protocol_io.TCPServer:create(),
- BIOS.protocol_io.UDPSender:create({ port = 7777, host = "192.168.1.177" }),
BIOS.protocol_io.UDPListener:create({ port = 7778 })
Si entrar en detalles tecnicos* nos fijamos en la 3 y 4 lineas que hacen referencia a una conexion TCP y otra UDP para la comunicacion con DCS.

En mi caso el TCP aparecia comentado (con doble guion, o sea desactivado) le quite un guion para activarlo y aunque el programa seguia dando error al conectar ,luego al arrnacar DCS funcionaba perfectamente.

*Si quereis algun detalle tecnico mas parece que el programa tiene dos formas de comunicarse con DCS, mediante una conexion UDP (sin conexion se llama) la cual establece una comunicacion aunque no encuentre respuesta por parte de DCS (que era el sistema por defecto y ahora falla)...

...La otra forma con una conexion TCP que requiere confirmacion por parte de DCS por eso al arrancar da error pero cuando inicias DCS empieza a funcionar sin problema.
  • Quote
Hardware
  • 1
  • 2
  • 3
  • 4
  • Next
No registered users
  • © 2026 Luis Glez 'Orleans'