software para ingenieria _tf 2015-2
DESCRIPTION
ggwpTRANSCRIPT
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