La biblioteca pragmático, crear mi propio juego de video.

La biblioteca pragmático, crear mi propio juego de video.

Vuelve a descubrir los primeros días de video juego utilizando el ordenador Arduino Single-Board

Maik Schmidt

Volver con nosotros ahora para esos días inocentes de antaño, cuando se podía identificar con el destino de un solo píxel en un campo de asteroides o contra una pared de ladrillos.

La gente usa la tarjeta de microcontrolador Arduino para innumerables proyectos diferentes. Algunos lo utilizan para crear el arte interactivo, algunos lo utilizan a automatizar su casa, y algunos incluso lo utilizan para crear juegos. A menudo, estos juegos son juguetes autónomos tales como nuevas versiones de la famosa Simon juego. Para este tipo de juegos, a menudo necesita sólo unos LED, un zumbador piezoeléctrico, y algunas veces pantallas de cristal líquido.

Pero ¿no sería más interesante para crear un verdadero sistema de videojuego, es decir, un dispositivo que le permite jugar diferentes juegos de video como Breakout o asteroides en el televisor? El Arduino hace sorprendentemente fácil de construir un sistema de este tipo y en este artículo te muestro cómo.

Vas a aprender cómo generar una señal de vídeo en blanco y negro, por lo que puede conectar el Arduino directamente a su televisor. También aprenderá cómo secuestrar un controlador Nunchuk, para que pueda controlar sus juegos con el hardware de juegos del estado de la técnica. (En aras de la brevedad, no añadimos ningún efecto de sonido.)

Por último, aprenderá cómo implementar un pequeño juego. Será una simulación de las carreras de ciclo de luz de la película Tron. (Todos estamos de acuerdo que siempre habrá una sola película Tron y sólo una película Matrix, ¿verdad?)

Para construir productos de este artículo sólo necesita unas pocas piezas baratas. Probablemente usted tiene la mayor parte de ellos en casa ya:

Una placa Arduino como el Uno, Duemilanove o Diecimila

Un cable USB para conectar el Arduino al ordenador

Un controlador de Nintendo Nunchuk

Una resistencia de 1k ohmios

Una resistencia de 470 ohmios

Un par de cortadores de alambre

Antes de empezar a generar señales de vídeo, tenemos que conectar el Arduino a un televisor. Una de las soluciones más simples y baratas para la transmisión de señales de audio o de vídeo es un cable RCA (a veces llamado cable RCA). En la figura 1 se puede ver un cable RCA con tres conectores. Estos cables generalmente transmiten sonido (rojo y conectores blancos) y vídeo (conector amarillo). Para nuestro propósito un cable con un único conector es suficiente.

Figura 1: Tres conectores RCA

Desde aquí, tomar una de las mitades y utilizar el cortador de alambre de nuevo para eliminar carfully aislamiento exterior del cable. Ahora debería ver la malla de cobre trenzado.

Figura 2: Cableado de la señal y cable de tierra de nuestro cable

Ahora echar un vistazo a la figura 3 para ver cómo conectar el cable RCA para el Arduino. En primer lugar, usted tiene que conectar a tierra del cable a uno de los pines de tierra de la Arduino. Entonces usted tiene que conectar el cable de señal (VIDEO) del cable RCA a los pines digitales del Arduino 9 y 7 usando dos resistencias. Necesitamos el pin 9 para sincronizar el remitente (Arduino) y el receptor (televisor) y necesitamos el pin 7 para emitir la señal de vídeo.

Figura 3: Conexión de un cable RCA a la Arduino

Así que tenemos que conectar las dos resistencias al cable de señal del cable RCA y no es suficiente con ellos anudar. Tienes que soldarlos; y mientras estás en el, que conecte el cable de tierra del cable RCA a un trozo de alambre de núcleo sólido, por lo que se puede conectar fácilmente a la Arduino. (Ver la Figura 4 para el resultado).

Figura 4: Nuestro cable final

Eso es todo el hardware que necesitamos para generar una señal de vídeo, así que conecte el cable a la placa Arduino y veamos cómo podemos llevarlo a la vida.

La generación de una señal de vídeo limpia es difícil, debido a que la calidad de salida depende en gran medida de una temporización muy exacta. Por lo general, se necesita una gran cantidad de código ensamblador complicado tratar con temas desagradables, tales como el procesamiento de alarmas. Afortunadamente, Myles Metzler fue a través de todo el dolor y ya se creó la biblioteca Arduino-TVout. Esta biblioteca no sólo ofrece funciones básicas para dibujar líneas, círculos y rectángulos, que también viene con un conjunto de herramientas conveniente para dibujar texto en fuentes de diversos tamaños. Ah, y es incluso compatible con la salida de sonido.

Aunque la biblioteca Arduino-TVout viene con un muy buen demo (que muestra unos gráficos de mapas de bits e incluso girar un cubo) vamos a empezar con el nuestro, para ver cómo funciona la biblioteca:

Este es un programa simple pero muestra casi todos los aspectos de la biblioteca Arduino-TVout. En primer lugar, debemos incluir el archivo de cabecera principal de la biblioteca, y que incluyen fontALL.h. porque queremos salida de algún texto. También incluir el archivo de cabecera stdint, así que tenemos algunas buenas definiciones de tipo para tipos comunes. A continuación, definimos las constantes para la anchura y la altura de nuestra pantalla.

En el ámbito global definimos un objeto TVout llamado televisión. Inicializamos este objeto en la función de llamar a su método de comenzar. Este método espera que el tipo de señal de vídeo, el ancho de la pantalla, y la altura de la pantalla. Elegimos PAL en este caso, pero se puede reemplazar de forma segura con NTSC. Además, seleccionamos el tipo de letra que vamos a utilizar para la producción de nuestros mensajes.

La función de bucle demuestra varias de las características de la biblioteca. Es la impresión de algunos textos que llaman de impresión y se presentan algunas líneas y formas que llaman draw_line. draw_rect. y draw_circle (véase la Figura 5 para el resultado de draw_circle). Como era de esperar, la biblioteca también tiene métodos denominados set_pixel y get_pixel. y este es el momento adecuado para leer la documentación en línea.

Figura 5: La nuestra primera demostración TVout

Todo en todo el Arduino-TVout biblioteca ofrece un acceso muy intuitivo de una pantalla de televisión. Pero para jugar juegos también necesitamos un controlador fresco.

Un componente vital de cada sistema de videojuegos es un controlador, y para nuestro sistema que podría simplemente crear nuestro propio uso de un par de pulsadores. Pero somos perezosos, así que en vez vamos a secuestrar un mando de Nintendo Nunchuk. Es un candidato perfecto para retoques, por diversas razones. Viene con un acelerómetro de tres ejes, un joystick analógico y dos botones, y es muy barato (menos de $ 10 en el momento de escribir estas líneas). Mejor aún: debido a su buen diseño y sus conectores de fácil acceso, puede integrarlo en sus propios proyectos sorprendentemente fácil.

Figura 6: Un mando de Nintendo Nunchuk

Vamos a utilizar un controlador Nunchuk ordinaria y transferir los datos que emite en nuestro ordenador utilizando un Arduino. Vas a aprender cómo conectar al Arduino y cómo escribir software que lee el estado actual del controlador. Ni siquiera necesita una Nintendo Wii para hacer nada de esto, sólo se necesita un control Nunchuk.

Cableado de un Nunchuk para un Arduino realmente es un pedazo de la torta. Usted no tiene que abrir el Nunchuk o modificarlo de ninguna manera. Sólo hay que poner cuatro cables en su conector y luego conectar los cables a la placa Arduino.

Figura 7: El conector Nunchul

En la Figura 7, se puede ver un diagrama de un tapón Nunchuk. Cuenta con seis conectores, pero sólo cuatro de ellos están activos: GND, 3,3 V, Datos, y el reloj. Poner un cable en cada conector, y luego conectar los cables a la placa Arduino. Conecte el cable de datos al pin analógico 4 y el cable de reloj para pin analógico 5. El cable GND tiene que estar conectado al terminal de tierra del Arduino y el alambre de 3,3 V pertenece al pin del Arduino 3.3 V.

Figura 8: Cómo conectar un Nunchuk para un Arduino

Eso es realmente todo lo que tiene que hacer para conectar un controlador Nunchuk para un Arduino. El controlador es alimentado con 3,3 voltios ahora, y en la siguiente sección, se dará cuenta de que los dos cables conectados a los pines analógicos 4 y 5 son todo lo que necesitamos para controlar el controlador.

No hay documentación oficial muestra cómo un Nunchuk funciona internamente o cómo se puede utilizar en un entorno no-Wii. Sin embargo, algunos piratas informáticos inteligentes y los responsables en Internet invertido una gran cantidad de tiempo para realizar ingeniería inversa de lo que está pasando en el interior del controlador.

Con todo, es muy simple, porque el Nunchuk utiliza el interfaz de dos hilos (TWI), también conocido como I 2 C (Circuito Integrado Inter-Protocol). Se permite a los dispositivos comunicarse a través de un bus de datos maestro / esclavo con dos conductores. Transmitir datos en un cable (DATA), mientras que el otro se sincroniza la comunicación (RELOJ).

El IDE de Arduino viene con una biblioteca denominada alambre que implementa el I 2 protocolo C. Se espera que la línea de datos para conectarse al pin analógico 4 y la línea de reloj analógico pin 5. La usaremos en breve para comunicarse con el Nunchuk, pero antes de eso, vamos a echar un vistazo a los comandos del controlador comprende. (En este sitio se puede encontrar una biblioteca que le permite utilizar cualquier par de pasadores porque yo 2 Comunicación C).

Figura 9: El Nunchuk siempre devuelve 6 bytes de datos

Para ser honesto, el Nunchuk sólo entiende un solo comando, que es “. Dame todos los datos” Cada vez que recibe este comando, devuelve seis bytes que tienen el siguiente significado (ver la estructura de datos en la Figura 9):

1 byte contiene el valor del eje X del stick analógico, y en el byte 2 se puede encontrar el valor del eje Y del stick. Ambos son números de 8 bits y van desde aproximadamente 29 a 225.

valores de aceleración de los ejes X, Y, y Z son tres números de 10 bits. Bytes 3, 4, y 5 contienen sus ocho bits más significativos. Puede encontrar las dos partes que faltan para cada uno de ellos en el byte 6.

Byte 6 tiene que ser interpretado bit a bit. Bit 0 (el bit menos significativo) contiene el estado del botón Z. Es 0 si se ha pulsado el botón; de lo contrario, es 1. El bit 1 contiene el estado del C-botón.

Los seis bits restantes contienen los desaparecidos bits menos significativos de los valores de aceleración. Los bits 2 y 3 pertenecen al eje X, los bits 4 y 5 pertenecen a Y, y los bits 6 y 7 pertenecen a Z.

Ahora que sabemos cómo interpretar los datos que obtenemos desde el Nunchuk, podemos empezar a construir una clase Nunchuk para controlarlo.

La interfaz de nuestra clase Nunchuk (y la parte principal de su aplicación) se ve de la siguiente manera:

Después de incluir todas las bibliotecas que necesitamos, definimos la constante NUNCHUK_DEVICE_ID. yo 2 C es un protocolo maestro / esclavo; en nuestro caso, el Arduino será el maestro, y el Nunchuk será el esclavo. El Nunchuk se registra en el bus de datos utilizando un determinado ID (0x52), por lo que puede hacer frente a ella cada vez que necesitamos algo.

Figura 10: Flujo de mensajes entre Arduino y el Nunchuk

actualizar primeros pausas por un milisegundo dejar que las cosas se asientan un poco. Entonces solicitamos seis bytes desde el Nunchuk, llamando Wire.requestFrom. Esto en realidad no devolver los bytes, pero tenemos que leerlas en un bucle y llenar nuestra memoria intermedia. Wire.available devuelve el número de bytes que están disponibles en el bus de datos, y Wire.receive devuelve el byte actual. No podemos usar los bytes que obtenemos del Nunchuk directamente, ya que el controlador les ofusca un poco. “Descifrado” ellos es fácil, como se puede ver en decode_byte.

Figura 11: el sistema de videojuegos se ha completado

¡Eso es! Su sistema de videojuegos completa debe parecerse a la figura 11 ahora. Tenemos salida de vídeo y el acceso a todos los datos del Nunchuk, así que vamos a crear nuestro primer juego.

Debido a la falta de recursos no vamos a ser capaces de crear un juego de acción en primera persona, pero nuestro sistema es lo suficientemente potente como para ejecutar algunos clásicos de entretenimiento. (En nootropicdesign.com puede encontrar el Tetris, Asteroids, Breakout, y los invasores del espacio, por ejemplo).

Figura 12: Pantalla del título de nuestro juego

Después de eso definimos algunas variables de instancia pública. px y py contienen coordenadas actuales del jugador. En dirección encontrará tiendas de dirección y el comportamiento de los jugadores de comportamiento del jugador.

El método de control controla en realidad el jugador en función de su comportamiento y delega su trabajo a dos métodos privados. Control del reproductor manualmente es trivial, por lo que en control_manually sólo tenemos que comprobar la posición actual de la palanca de mando y ajustar la dirección del jugador en consecuencia. Nuestro enfoque de la inteligencia artificial no es muy sofisticado tampoco. Simplemente comprobamos cuál es el siguiente dirección pasable y lo tomamos.

Vamos a poner en práctica el juego en sí ahora:

estáticoconst uint8_t SCREEN_WIDTH = 128;

estáticoconst uint8_t SCREEN_HEIGHT = 96;

INTRO, iniciándose, en ejecución, pausa, HECHO

_tv.begin (PAL, SCREEN_WIDTH, SCREEN_HEIGHT);

_player1.px = SCREEN_WIDTH / 2 – 4;

_player1.py = SCREEN_HEIGHT / 2;

_player2.px = SCREEN_WIDTH / 2 + 4;

_player2.py = SCREEN_HEIGHT / 2;

_tv.print (0, 20, " Arduino Light Cycle Race" );

_tv.print (0, 72, " Presione el botón para empezar" );

SCREEN_WIDTH – 1, SCREEN_HEIGHT – 8,

Si (player1_hit && player2_hit) lt;

_player1 jugador, _player2;

Al igual que en la mayoría de los juegos de video, uno de los mayores problemas que está manejando el estado actual del juego, por lo que en primer lugar definimos una enumeración que contiene todos los estados posibles: En INTRO estado del juego mostrará una pantalla de título y esperar una pulsación de botón (véase la figura 12). Si se pulsan los botones, el juego entra en estado de inicio. En este estado se llama el campo de juego y una cuenta atrás de tres a uno, por lo que el jugador tiene un poco de tiempo para estar listo para la carrera. Entonces, entra en un estado de ejecución y maneja el juego real. Si un jugador golpea una pared, el estado cambia de juego a DONE. Si el jugador presiona un botón durante el juego cambia a una pausa.

Figura 13: Nuestro juego en acción

Lo único que queda por hacer es el pegamento que todos juntos:

¿No es increíble lo limpio de código para sistemas embebidos puede ser? Así compilar y cargar el boceto usando el IDE de Arduino y pasar un buen rato!

Si usted está buscando soluciones de videojuegos más profesionales o si no quiere construir un sistema de videojuegos a sí mismo, se puede elegir entre varios productos comerciales:

El proyecto Hackvision es un sistema completo videojuego basado en la biblioteca Arduino-TVout. Viene con sonido y un controlador de cinco botones, y es compatible con dos palas y un Nunchuk.

Si usted está buscando un escudo que le permite al texto de salida o gráficos a un televisor, se puede usar el escudo de videojuegos o el escudo TellyMate. El primero incluso tiene soporte para salida de sonido.

Y, por último, si realmente estás pensando en crear grandes juegos para el Arduino usted debe echar un vistazo a la pantalla Gameduino. uno de los más grandes escudos que nunca fue creado para el Arduino. Es compatible con salida de vídeo de 400×300 píxeles en 512 colores a través de VGA. Tiene 256 sprites de hardware y una salida de audio de 12 bits. Además, tiene un co-procesador que se puede programar en Forth y que funciona de manera similar a la del cobre en el viejo Commodore Amiga.

Maik Schmidt es el autor de Arduino: una guía de inicio rápido. Ha trabajado como desarrollador de software durante más de quince años, la creación de soluciones para grandes empresas. Él escribe con frecuencia críticas de libros y artículos, y es también el autor de la empresa Recetas con Ruby y Rails y de integración de empresa con Ruby.

Enviar el autor sus comentarios o discutir el artículo en el foro de la revista.

PUESTOS RELACIONADOS

También te podría gustar...