software para ingenieria _tf 2015-2

6
SOFTWARE PARA INGENIERIA TRABAJO FINAL 2015 - 2 El presente documento describe las especificaciones técnicas y administrativas del trabajo final a desarrollar en el curso de Software para Ingeniería. Objetivo Los alumnos debe de trabar en grupo validados por el profesor del curso y desarrollar utilizando las herramientas de MATLAB un juego clásico de la consola Atari, Pong, así como el hardware asociado para el control de juego, basado en un módulo Arduino Uno. Pong Pong era un videojuego de la primera generación de videoconsolas lanzado por Atari en 1972. Básicamente es un simulador de un juego de tenis de mesa (Figura 1.1). Figura 1.1 Consola del Pong original Cada uno de los jugadores controla unas paletas que se mueven verticalmente en la pantalla y evitan que la bola (originalmente un cursor cuadrado) llegue a los bordes laterales del monitor. En cuanto eso suceda el jugador que logró el último rebote de la bola obtiene un punto. El juego se mantiene hasta que el número de jugadas posible alcance un máximo. Figura 1.2 Consola del Pong Atari comercializó una versión casera en su sistema Atari 2600 y se podía adquirir un control especial para el control de las paletas (Figura 1.2). Este control permitía

Upload: raul-correa

Post on 10-Apr-2016

215 views

Category:

Documents


0 download

DESCRIPTION

ggwp

TRANSCRIPT

SOFTWARE PARA INGENIERIA

TRABAJO FINAL

2015 - 2

El presente documento describe las especificaciones técnicas y administrativas del

trabajo final a desarrollar en el curso de Software para Ingeniería.

Objetivo

Los alumnos debe de trabar en grupo validados por el profesor del curso y desarrollar

utilizando las herramientas de MATLAB un juego clásico de la consola Atari, Pong, así

como el hardware asociado para el control de juego, basado en un módulo Arduino

Uno.

Pong

Pong era un videojuego de la primera generación de videoconsolas lanzado por Atari en

1972. Básicamente es un simulador de un juego de tenis de mesa (Figura 1.1).

Figura 1.1 – Consola del Pong original

Cada uno de los jugadores controla unas paletas que se mueven verticalmente en la

pantalla y evitan que la bola (originalmente un cursor cuadrado) llegue a los bordes

laterales del monitor. En cuanto eso suceda el jugador que logró el último rebote de la

bola obtiene un punto. El juego se mantiene hasta que el número de jugadas posible

alcance un máximo.

Figura 1.2 – Consola del Pong

Atari comercializó una versión casera en su sistema Atari 2600 y se podía adquirir un

control especial para el control de las paletas (Figura 1.2). Este control permitía

trasladar el juego, disponible sólo en máquinas de Arcade instaladas en lugares

públicos, dentro de casa donde podía jugarse conectando todo el sistema a un televisor.

El Pong y Atari produjeron una revolución en el mundo del entretenimiento que hoy día

es un negocio que genera más de 1,000 millones de dólares.

Hardware del controlador

En para el control del juego para lo que se requiere el módulo Arduino. Este control

consistirá con dos potenciómetros conectados a los pines analógicos A0 y A1. El código

de MATLAB leerá el valor analógico de estos pines y en función de estos establecerá la

posición de ambas paletas (Figura 1.3).

Figura 1.3 – Control del juego implementados en el módulo Arduino Uno

El valor de los potenciómetros no es de importancia; lo único que se debe de considerar

es que hay que leer el valor del punto medio del dispositivo, lo que permitirá obtener

valores entre 0V y 5V en los pines A0 y A1.

Software del juego

El juego debe de ejecutarse en una ventana gráfica de MATLAB y debe de aprovechar

las capacidades de generación de gráficos en secuencia para generar una animación. La

interface básica del juego debe de mostrar las dos paletas laterales en ambos lados y la

bola que rebota entre estas y las paredes superior e inferior dentro del campo. En la

barra superior debe de verse información sobre los puntajes de ambos jugadores. Un

ejemplo de esta interface se muestra en la Figura 1.4.

Figura 1.4 – Interface gráfica del juego

Esta presentación gráfica puede cambiar: los colores pueden ser diferentes o presentar

un formato en general diferenciado a la muestra, pero debe de cumplir con las mismas

funcionalidades: mostrar el movimiento de dos paletas laterales en un espacio en donde

un bola rebotara en las paredes inferior y superior, mientras que el estado de los

puntajes de los jugadores de muestra en la parte superior.

El juego debe de ejecutarse de forma continua mientras los jugadores logran sostener la

pelota en el campo, haciendo que esta rebote entre las paletas. Al finalizar el juego se

debe de saber quién en el jugador que ha ganado (ya sea porque así lo indican los

puntajes o por un mensaje expreso que indica quién de los jugadores ha ganado).

Condiciones del juego como trabajo base

El Pong debe de ser un producto final y por lo tanto su uso y juego debe de ser lo más

natural posible: los movimientos deben de ser suaves y la velocidad de operación debe

de permitir un juego placentero. Los ejes del gráfico tienen que ajustarse para que el

movimiento de las raquetas y de la bola sea natural.

En la interface mostrada en la Figura 1.4 se han eliminado los ejes ya que ese valor tiene

que ser hallado por el equipo de programación y ciertos rangos de valores, combinada

con la transformación de los valores de voltaje de entrada va a generar valores de

movimiento natural. Para ocultar el valor de los ejes y parezca una interface gráfica y

uno una gráfica de MATLAB utilice la instrucción:

axis off;

Esta instrucción no anula los ejes, simplemente no muestra los valores. El equipo de

programación va a tener que fijar los ejes para que la animación se muestre de forma

natural.

Otra condición es que las paletas recorran todo el espacio posible en las paredes

laterales. Cuando el voltaje sea el mínimo en los puertos analógicos del Arduino las

paletas deben estar en la parte más baja y cuando el voltaje sea el máximo deben estar

en la parte más alta.

El programa que hace funcionar el juego debe ser una función llamada pong. Esta

función no tendrá argumentos de salida (la salida de la función va a ser el juego mismo)

pero si debe de tener un argumento de entrada como mínimo. Este argumento de entrada

debe de ser el número de jugadas máxima que el juego se va a sostener hasta que

termine con un ganador. Este valor debe de ser un valor entero positivo mayor que 0 (en

caso de no cumplir con estos criterios la función debe devolver un error de función en

MATLAB). Cada vez que un jugador pierda el juego debe de iniciar nuevamente hasta

que el número de intentos sea igual al número ingresado como argumento de entada.

La función principal debe de llamar a otra funciones creadas expresamente para

solucionar otros problemas del proyecto: por ejemplo, puede haber una función que

retorne un valor en caso que la bola a rebotado con una de las paletas, u otra función

que lea los valores de los potenciómetros y retorne todos los puntos que conforman la

paleta.

Uno de los problemas con los que puede encontrarse en el momento de la creación de

funciones es que debe de leer el valor de una variable externa sobre la que no tiene

control. Considere el siguiente caso:

function func_principal(argumento) a = arduino; data = otra_funcion(val1,val2); funcion out = otra_funcion(arg1,arg2) if readPWMVoltage(a,arg1) == 5 out = 1; else out = 0;

end end

end

La función func_principal llama a la función secundaria otra_funcion que invoca a

la variable a (que es el objeto arduino conectado a un puerto COM serial). Peri,

recuerde, que la variable a solo existe dentro de la función func_principal y la

función secundaria otra_funcion no puede acceder a la variable a, por lo que no podrá

leer ni escribir valore del Arduino.

Para solucionar este problema es necesario declarar que la variable a es de tipo global

antes de utilizarla De esta forma a estará disponible para todas las funciones dentro del

código.

function func_principal(argumento) global a; a = arduino; data = otra_funcion(val1,val2); funcion out = otra_funcion(arg1,arg2) if readPWMVoltage(a,arg1) == 5 out = 1; else out = 0;

end end

end

Tenga esto en consideración al momento de implementar funciones secundarias que

lean o escriban valores sobre el módulo Arduino.

Mejoras en el diseño base

El proyecto base tiene un puntaje base (ver Rúbrica), pero para obtener un puntaje más

alto se debe de mejorar el diseño original para que sea único para cada equipo de

programación, de forma tal que haya implementaciones de Pong que sean mejores que

otras. La mejor implementación tendrá la máxima nota.

Se pueden sugerir algunas mejoras, mejorando el hardware. Considere el hardware dela

Figura 1.5:

Figura 1.5 – Control del juego Pong con un parlante piezoeléctrico

En esta implementación se tiene un parlante piezoeléctrico que permitirá reproducír

tonos desde un puerto digital PWM. Por lo tanto, ahora el juego tendrá la opción de

generar sonidos para diferentes eventos (una música de inicio, un tono cuando la pelota

rebote en las paletas, un cadena de tono que indique que se ha perdido un juego, etc).

Otra mejora sugerida es aumentar el número de argumentos de entrada: se puede

agregar un argumento que controla la dificultad del juego con otro valor entero de

entrada, que varía la velocidad o el tamaño de las paletas (al aumentar la dificultad las

paletas reducen su tamaño).

Cada mejora se evaluará en su capacidad de mejorar el juego sobre el trabajo base y no

en su diferencia respecto al trabajo base. El cambiar los colores de la interface o el tipo

de letra, por ejemplo, no se considera una mejora más que una personalización de la

interface.

Rúbrica

El trabajo tendrá la siguiente rúbrica de evaluación, proporcional sobre un puntaje de 20

puntos:

Presentación de su trabajo (20%)

Se evalúa que el equipo así como cada uno de los miembros conocen el trabajo

desarrollado y es capaz de explicarlo en términos sencillos, con claridad y de forma

coordinada entre los miembros del equipo. Deben de tener un soporte de presentación

adecuado y que ayude en la explicación. Esta nota puede ser grupal o diferenciada para

cada miembro del equipo de programación.

Proyecto base (30%)

El juego debe de cumplir con los criterios especificados en la sección Condiciones del

juego como trabajo base en el presente documento.

Proyecto final (30%)

El juego debe de superar el trabajo base, ya que este es un prototipo de funcionamiento

sobre el que se debe de construir el producto final. Esto requiere que el trabajo tenga

mejoras personalizadas que agregan valor al juego. Se pueden seguir los lineamieto

especificados en la sección Mejoras en el diseño base del presente documento o

presentar algunas adiciones que no están consideradas en el presente documento, pero

que agreguen funcionalidades y no que sea meras adiciones decorativas.

Producto final (20%)

De todos los proyectos, aquel que presente mejoras sobre el diseño y alcance un nivel

superior sobre todos los presentados obtendrá una bonificación adicional que le

permitirá obtener la nota máxima. Esto estará no solo en función de la evaluación

comparada con los demás trabajos sino con la evaluación que su profesor haga de su

trabajo y presentación en términos generales. Puede considerarse que el programa tenga

una publicación asociada, que el código siga los lineamientos de una programación

ordenada y estructurada, etc. Son criterios que su profesor juzgara en el momento de la

presentación.

Presentación del trabajo final

El trabajo final se presentará en su sesión de clase correspondiente a la semana 15 del

presente ciclo. El profesor de su sección le dará las instrucciones a seguir el día de la

exposición de su trabajo (presentación personal, horarios de sustentación, ordenamiento

por grupos y reglamentación general sobre la presentación en el salón de clase). La nota

será registrada en el sistema directamente sin opción a modificaciones posteriores.

Lima, 6 de noviembre de 2015