ARCADE FOREVER

[TUTORIAL] Simular controles ópticos (trackball) con interruptores, By:Marcos_75

« Older   Newer »
  Share  
xarcadeforeverx
view post Posted on 11/6/2010, 12:40     +1   -1




Hola a todos.

Siguiendo un poco con nuestro afán de poder jugar en nuestra recreativa con controles estándar al mayor número de juegos posible, independientemente del tipo de controles que utilicen, he preparado otro pequeño tutorial. Después de tratar de simular un control analógico giratorio, en esta ocasión vamos a tratar de simular un spinner o un trackball, de forma que podamos jugar a juegos como el Cabal, Arkanoid, etc. con nuestros controles clásicos (manetas y botones).

De nuevo espero vuestras sugerencias, no sólo en la modificación del circuito, sino también en la forma de redactar el tutorial para que quede claro.

¡Gracias!

Un saludo.

1. Introducción

Este tutorial trata de dar una idea de cómo simular un control basado en un spinner (1 eje) o en un trackball (2 ejes), cuyo funcionamiento tiene una base óptica, con los joystick de nuestra recreativa, cuyo funcionamiento tiene una base eléctrica.

Como ejemplo tomaré la construcción del circuito para el juego Arkanoid de Taito, pero esta misma idea puede aplicarse a otros juegos que se controlen con spinners o trackballs.

2. Materiales

Para realizar este conversor serán necesarios los siguientes materiales:

* Soldador, estaño y cable.
* Una placa perforada de tiras (de esas en la que todos los agujeros de una misma fila están conectados por una misma pista). Vale cualquier otro soporte que se te ocurra para construir el circuito.
* 1 integrado 74HC00 (puertas NAND)
* 1 integrado 555 (temporizador)
* Varias resistencias, potenciómetros y condensadores de los valores que necesites (una vez hechos los cálculos)

3. Fundamentos

En el siguiente enlace podéis ver en detalle cuáles son los fundamentos de un control del tipo spinner o trackball. La explicación es para un ratón de PC, pero la idea es la misma:

www.4qdtec.com/meece.html

A modo de resumen:

Cada eje (X e Y) se gobierna con una pareja de diodos emisores de luz, y una pareja de fototransistores que reciben esa luz. Cuando el transistor recibe luz, su salida está a nivel alto (+Vcc), y cuando no recibe luz su salida está a nivel bajo (GND). Entre ambas parejas se interpone un disco giratorio con perforaciones equiespaciadas. En la figura siguiente se puede ver la ubicación de todos estos elementos.

image image

Cuando se gira el control hacia un lado o hacia otro, el disco perforado gira, con lo cual deja pasar la luz de los emisores a los receptores de manera intermitente. Eso hace que los fototransistores generen a su salida alternativamente +Vcc y GND, es decir, una señal eléctrica consistente en una secuencia de pulsos. Cuanto más rápido movamos el control, más rápido girará el disco, y más pulsos se generarán.

El motivo de que haya dos emisores y dos receptores por cada eje es el poder determinar la dirección (si estamos girando a derecha/arriba o a izquierda/abajo). En la siguiente figura se puede ver un esquema de cuál es la ubicación de cada pareja de emisor/detector.

image

Si os fijáis, cuando un transistor está totalmente iluminado, el otro está o bien empezando a iluminarse (si el giro es en un sentido) o bien entrando en oscuridad (si el giro es en el sentido contrario). O sea que, si un transistor está ofreciendo nivel alto (+Vcc), para determinar el sentido del giro tenemos que ver si el otro transistor está pasando de ofrecer +Vcc a GND, o bien si está pasando de ofrecer GND +Vcc. En la siguiente imagen se ve que el resultado es que ambos transistores ofrecen dos secuencias de pulsos desfasadas +1/4 de periodo o -1/4 de periodo, dependiendo del sentido del giro.

image

4. El circuito

Del apartado anterior se intuye que, si conseguimos generar una secuencia de pulsos por un lado, y luego otras dos secuencias de pulsos idénticas pero desfasadas +1/4 de periodo y -1/4 de periodo, podremos simular este control. Es más, tras varias pruebas (y diseños fallidos) me he dado cuenta de que basta con presentar a la entrada de la placa por un lado la señal de pulsos, y por otro o bien un nivel alto (+Vcc) o bien un nivel bajo (GND), según pulsemos un sentido u otro. Para ello, cuando se pulse el mando en una dirección, se le presenta a la placa del juego en cuestión la señal de pulsos original y por otro lado +Vcc, y si movemos el mando en la otra dirección, se le presenta a la placa la señal original y por otro lado GND.

El siguiente circuito es capaz de realizar estas funciones:

image

* Se monta el 555 en su configuración típica de "astable". Más adelante se comenta cómo se elige el valor de los componentes.

* Los controles de entrada (derecha e izquierda) estarán a nivel alto (1) cuando no estén pulsados, y a nivel bajo (0) cuando lo estén. Por tanto, a la salida de la puerta NAND donde están conectados tendremos un 1 cuando se pulse cualquiera de las dos direcciones, y un "0" cuando no se pulse ningún control.

* Llevamos dicha salida al pin 4 del 555 (el de RESET), de forma que éste únicamente generará la señal de pulsos de salida cuando reciba por ese pin un 1; es decir, cuando se esté pulsando alguno de los controles. Mientras tanto no generará salida alguna, y es como si no estuviésemos moviendo el spinner.

* Falta por determinar el sentido del giro. Para ello basta con llevar a la otra entrada del conector de la placa (X2) o bien un 1 (Vcc) o bien un "0" (GND), dependiendo del sentido de giro. Podríamos pensar en cablear directamente el conector "derecha" del Jamma a este punto, pero da problemas por la impedancia de entrada de los conectores de los controles de la placa. Por eso es mejor pasar esa señal por un buffer. Para ahorrarnos meter un integrado más, yo uso otra puerta NAND de las que vienen con el chip 74LS00. Con la configuración que véis (en las dos entradas se lleva el control "derecha"), se simula una puerta NOT (no exactamente un buffer, pero nos sirve). Y la salida de ese "inversor improvisado", se lleva al otro punto de entrada de la placa (X2).

* De esa forma, si no pulsamos nada, el 555 no genera señal y nada se mueve. Si pulsamos derecha, el 555 genera señal (X1), y a X2 llevamos un nivel alto. Si pulsamos izquierda, el 555 genera señal (se lleva a X1), y a X2 llevamos un nivel bajo (ya que "derecha" está sin pulsar, y por tanto a nivel alto). Habría problemas pues con este circuito si pulsamos izquierda y derecha a la vez, lo cual ¡es imposible!

Esto es válido para un solo eje (spinner). Más adelante se dan ideas para simular un trackball (basta con repetir este razonamiento).

5. Construcción

La construcción del circuito es relativamente simple. Se sitúan los integrados 74LS00 y 555 en la placa perforada, y se alimentan de acuerdo al pinout de sus especificaciones técnicas. Vcc y GND pueden obtenerse fácilmente de los pines 3 y 1 respectivamente del conector Jamma (en este caso del adaptador a Jamma, ya que el juego Arkanoid no sigue ese estándar).

Por otro lado hay que conectar los controles de izquierda y derecha. Para ello conectamos el pin 20 del conector Jamma (izquierda) y el pin 21 del conector Jamma (derecha) a las entradas correspondientes de las puertas NAND (74LS00).

Y las resistencias y demás las conectamos tal y como se muestra en el esquema del circuito. Hay que tener en cuenta que RPull únicamente se utiliza para asergurarnos de que a la entrada de las puertas NAND, que es donde van los controles de izquierda y derecha (en este caso), tenemos un nivel alto (+Vcc) si no pulsamos el control correspondiente. Cuando lo pulsamos, por la propia estructura del cableado Jamma, ese punto se pone a masa (GND). Un valor de 2K2 para estas resistencias es típico.

Ahora hay que calcular R1, R2 y C. Para ello podemos hacer uso de la siguiente calculadora on line:

www.csgnetwork.com/ne555timer2calc.html

Hay que tener en cuenta que hay que conseguir una frecuencia en torno a 100-200 Hz. Yo por ejemplo elegí:

C = 1 uF
R1 = 1K

Probé distintos valores de R1 en la calculadora, y comprobé que con un potenciómetro de

R2 = 10K

obtenía las frecuencias deseadas. Además, al usar un potenciómetro, puedo variar la sensibilidad del movimiento (la rapidez).

Un ejemplo de cómo quedaría el circuito terminado es el siguiente:

image

Como lo he utilizado para el juego Arkanoid, que además no es Jamma, he tenido que construir también un adaptador. En la siguiente foto podéis ver cómo queda el circuito acoplado al adaptador:

image

Podéis ver que el circuito por un lado se conecta al conector del adaptador que va a la placa, y hasta allí lleva las señales X1 y X2 que simulan las que generaría un spinner o un trackball. Por otro lado se conecta a la parte del adaptador que va al conector Jamma, y de allí toma las señales de izquierda y derecha (pines 20 y 21), y Vcc y GND (pines 3 y 1).

¡Y listo!

6. Mejoras

Este circuito se puede mejorar seguramente de mil maneras.

Una medianamente sencilla es controlar la velocidad de movimiento entre dos valores, por ejemplo, de forma que si no se pulsa cierto botón la velocidad es una determinada, y si se pulsa la velocidad es el doble. Esto se puede implementar conectando un flip-flop a la salida del 555, que divida por 2 la frecuencia de la señal de éste, de forma que luego la pulsación del botón controle si la salida que se toma es la del propio 555, o la de la mitad de frecuencia, a la salida del flip-flop. Esta forma de trabajar se explica en parte en esta página:

http://roger.trideja.com/arcade/tb2joy/index.html

El circuito que aquí se propone es más complejo que el que yo planteo, pero más completo.

Quizá se pueda (no me he parado a pensarlo) modificar directamente la frecuencia de oscilación del 555 metiendo alguna resistencia adicional en paralelo a R1 y/o R2, que se "active/desactive" con la pulsación de un botón.

7. Tehkan World Cup

Si lo que queremos es simular un trackball, o incluso dos trackball (para jugar 2 jugadores), como en el caso del Tehkan World Cup, se podría pensar en construir 4 circuitos de este tipo (1 por cada eje), y ya está. Pero el temporizador ocupa mucho espacio (condensador, potenciómetro, etc.), y además los potenciómetros se ajustarían por separado, con lo que cada eje tendría una velocidad distinta.

Lo más cómodo es usar un solo temporizador, y luego 4 registros gobernados por unas puertas NAND como las que aparecen en el esquema que hemos planteado. Ahora el temporizador siempre estaría generando pulsos (pin 4 a Vcc), pero los 4 registros correspondientes a los 4 ejes dejarán pasar dichos pulsos únicamente cuando se active la señal que en el circuito original activaba al 555 (salida de una puerta NAND por eje).

El nuevo diseño únicamente utiliza 4 integrados, y su esquema es el siguiente:

image

Como véis se han invertido los controles para el jugador 2. Esto es porque en el Tehkan World Cup original la máquina es tipo cocktail, y un jugador juega enfrente del otro. En nuestro caso este adaptador se diseñó para una máquina tipo upright, con lo cual los dos jugadores van a estar jugando en el mismo lado.

El aspecto del circuito ya integrado en el adaptador de la World Cup a Jamma es el siguiente:

image
Marcos_75
 
Top
0 replies since 11/6/2010, 12:40   998 views
  Share