Zona Arcade. Construye, Restaura y Decora tu Máquina Arcade y Pinball.

Uso de placas Arduino para interface USB

« Older   Newer »
  Share  
view post Posted on 11/3/2015, 00:46     +1   -1


Group:
Member
Posts:
230
Location:
Sils

Status:


Bien, con la llegada de un stick de Neo Geo a casa me entraron las ganas de poder usar el stick con el ordenador, pero no parece que haya muchos adaptadores de db15/mvs/neogeo a USB con lo cual decidí probar suerte y hacer uno con una placa Arduino.

Para quien no sepa que son las Arduino, son unas placas para desarrollo de proyectos, estas incluyen un microprocesador Atmel328 que nos brinda la posibilidad de trabajar con varios puertos de entrada y salida ademas de que Arduino nos da las herramientas para poder programar de forma muy sencilla.

Existen 4 placas principales aunque hay mas:

UNO
fetch.php?media=:templates:hardware:arduino:uno:arduino_uno_small

La primera que salió, con distintas revisiones, nos da la opción de trabajar con 23 pins digitales. Tengo que decir que estoy dudando ya que la información de la web Arduino dice que son 14 pero el Atmega328 permite controlar 23 y "diría" que se pueden llegar a usar esos 23)

MEGA (o MEGA2650)
$_12_(14)
53 pins digitales

Mini y Nano
small-arduino-boards
Estas se diferencias principalmente porque la primera carece de puerto USB, muy pequeñas ideal para meter en cualquier sitio.
22 pins digitales

Bien, en mi caso tengo la Nano y la Mega pero por comodidad decidí trabajar con la Mega, así que pille una placa de prototipado, soldé unos pins, cable y adaptador DB15.

IMG_0055

Los pins laterales son para mejorar lo sujeción en la placa, los pins de los extremos pertenecen a GND y 5V, en este caso nos interesa el GND por eso partiremos por ese lado.

Soldamos el GND al pin correspondiente del DB15 (1) y vamos soldando los los cables por orden, nos da igual cual vaya a ser el botón de cada uno, eso lo modificaremos por código.

El resultado final del invento es este:

IMG_0054

En este punto se pueden hacer 2 cosas, una la que he hecho yo, a partir de un código que he sacado de un blog (www.rjanick.com/2012/09/11/arduino-arcade-controller/) he mapeado los 10 botones del gamepad mirando uno por uno a que puertos pertenecen y les he asignado letras:

U D R L (Arriba, abajo, derecha izquierda)
A B C X (los 4 botones de acción)
Y Z (Select y Start)

Para comprobarlos, el IDE (el software de programación distribuido por Arduino) tiene un terminal de comunicación por el puerto USB, puedo mostrar valores por esa conexión serie, así he podido comprobar y mapear los puertos.

Aquí es donde tenemos que decidir que es lo que hacemos:

1. Cambiar el Bootloader del Atmega328 para que al conectarlo al ordenador este crea que es un Joystick, esto lo conseguimos con los bootloader (HootLoader2) de NicoHood (https://nicohood.wordpress.com/2014/06/12/...nd-hid-project/) pero sólo funciona con Uno/Mega/Leonarod/Micro. Al convertirse en un HID de joystick la compatibilidad es prácticamente 100% con todo software que pueda usar Joystick (también se puede crear un HID de teclado)

2. Mediante un software interprete, lee la comunicación serie con la arduino y la convierte el pulsaciones de teclado.

Mi opción ha sido esta última, no quiero manipular el boot de mi arduino, estoy a la espera de una placa para este cometido...

He programado un pequeño scrip en python que simplemente recibe las teclas pulsadas cada 10ms y las que no están pulsadas las deja libres, eso quiere decir que no hace una pulsación y suelta sino que dejar un botón apretado, este lo estará hasta que lo soltemos. Suena estúpido pero es un problema que me he encontrado con otros métodos de programación.

He usado un par de librerías que no vienen en python, pySerial para comunicarme con la arduino (documentado en la web de arduino http://playground.arduino.cc/Interfacing/Python) y el pyUserInput que puede simular es el que permite simular las teclas y/o ratón (https://github.com/SavinaRoja/PyUserInput)

Cómo es una prueba de concepto no pondré código, ya que no aseguro que funcione en otras maquinas que no sean mac y requiere configuración manual del puerto de comunicación, si alguien esta interesado ya lo colgaré.

Que problemas me he encontrado?

Pues bien, depende del emulador no recibe las pulsaciones de teclado, en este caso MAME OS X no me ha funcionado pero si ZSNES.

Creo que el puerto de serie en algún momento deja de enviar datos, me falta averiguar si el codigo tiene algún problema con el uso innecesario de memoria y que por eso deje de enviar datos, pero eso lo tengo que comprobar, ya haremos la prueba con alguna sesión de juego :)

Sólo sirve para esto?

Evidentemente NO, si miráis el link en el que me he basado para el código de testeo, el autor lo usa para su CPO, eso quiere decir que en vez de usar un interface USB o cualquiera de los hacks que ya conocemos, ha usado este sistema. A día de hoy he podido comprar una Arduino uno (clon chino) por 2,6€ gastos incluidos, si esta puede usar los 23 pins digitales tenemos 2 jugadores con: 4 direcciones, 4 botones, 1 coin, 1 start y nos quedarían 3 mas para pausa, escape, etc...

Arduino, cómo placa de prototipado nos permite controlar un montón de dispositivos, mediante sensores podríamos regular el brillo de la pantalla, podría encender y apagar la luz del marquee o controlas unos motores paso a paso para girar la pantalla, también sensores de movimiento para TILT de pinball, control de monedero por software... sus usos son muy variados.
 
Top
view post Posted on 7/12/2017, 16:43     +1   -1


Group:
Member
Posts:
230
Location:
Sils

Status:


Comentar que desde que hice este tuto que nunca terminé de subir el codigo fuente ni nada, las nuevas placas que usan Atmel32u4 llevan implementado en el firmware arduino ya el HID, pueden funcionar como teclado, raton o joystick, haciendo mucho mas sencilla su implementación!

En breve pongo mas datos del tema!
 
Top
view post Posted on 8/12/2017, 09:35     +1   -1
Avatar


Group:
Member
Posts:
281
Location:
Bilbao

Status:


Muy interesante la verdad. Por mi parte quedo a la espera de más info. Saludos!
 
Top
view post Posted on 8/3/2018, 14:39     +1   -1


Group:
Member
Posts:
230
Location:
Sils

Status:


Hoy he terminado con el nuevo proyecto, mas fácil y el PC lo decta como gamepad de 8 botones de acción mas las 4 de la cruceta, luego me intento currar un poco la explicación, aunque casi todo el proceso fué hecho en directo por twitch, si no es un inconveniente y los mods me dejan pondre los links de los 2 directos en los que se desarrolla el diseño, a parte documentaré un poco para actualizar el tutorial... :)
 
Top
view post Posted on 9/3/2018, 13:14     +1   -1
Avatar


Group:
Member
Posts:
1,056
Location:
Madrid

Status:


Me parece un articulo super interesante como amante de arduino.

A ver que nos dicen los moderadores.

Un saludo!
 
Web  Top
4 replies since 11/3/2015, 00:46   2523 views
  Share