Laser Command G1

by Andrea Cuerdo y Santiago Velandia



= Integrantes =


 * Andrea Patricia Cuerdo Polo ([mailto:ap.cuerdo2685@uniandes.edu.co ap.cuerdo2685@uniandes.edu.co ])
 * Andrés Santiago Velandia Talero ([mailto:as.velandia158@uniandes.edu.co as.velandia158@uniandes.edu.co ])

= Descripción del producto =

LASER WAR es una invención tecnológica en electrónica diseñada para ser aprovechada en diferentes aplicaciones diarias. Este es un cubo que permite al usuario pasar tiempo de ocio a la vez que le sirve como herramienta básica al funcionar como reloj despertador.

Pensando en la funcionalidad de este artefacto, su diseño es liviano y de dimensiones cómodas para ser transportado sin inconvenientes.

En Laser War se encuentran reunidos diversos modos de juego que son: Pinceladas, Bombardeo y Guerra de misiles. Pinceladas es una aplicación en la cual se puede dibujar sobre una matriz de LED apuntando con un láser. En Bombardeo, se pueden hacer caer misiles a gran velocidad con sólo apuntar una columna con el indicador. Guerra de misiles mide las habilidades del jugador al hacer caer misiles aleatoriamente y tener que matarlos con el láser antes de que estos caigan al final de la matriz.

Todo esto y más es lo que se encuentra en Laser War.

Adicional a los elementos de ocio que ofrece, por medio de este cubo se puede configurar la hora actual y asignar una alarma si lo desea.

Este juego fue creado pensando en divertir, a la vez de servir al usuario de una forma que la electrónica muestra uno de sus alcances a un costo justificado y asequible. LaserWar es un juego construido a partir de una matriz de 8x8 LED y un microcontrolador ATMEGA16A de ATMEL. Este juego se propuso como un proyecto que hace parte de los laboratorios de Arquitectura de diseño de sistemas digitales y se debe implementar el lenguaje C en la solución del problema y se basa en las características del efecto fotoeléctrico para validar su funcionamiento.

Para el uso de este producto, el cliente cuenta con un cubo conformado por una matriz de LED en una de sus caras y un puntero láser. Es exactamente este punto el más interesante en este juego ya que el láser es empleado como un dispositivo de entrada de dos dimensiones en conjunción con una matriz de LED.

La idea principal del juego es que el usuario apunte a los LED's iluminados aleatoriamente en el cubo hasta apagarlos todos. Por cada LED al que atine, el jugador obtendrá 1 punto. A medida que se ganen puntos, se llega a un umbral donde se cambia el nivel de juego a uno más avanzado. Nuestro producto cambia de nivel cada 10 puntos y la elevación de dificultad se basa en la velocidad de aparición de la partida.

Como se mencionó anteriormente, este proyecto se desarrolló con un lenguaje de programación en C. Para facilitar el uso de éste, se aprovechan las ventajas de programas como AVR5 que permiten llevar a cabo programación de una forma didáctica. La solución al problema tiene que ser implementada a partir de una matriz LED de 8x8 tal como el juego original. Así mismo, para poder aprovechar las herramientas ofrecidas por la universidad en materia de programadores, se restringe el uso de microcontroladores. Con base en la lista de dispositivos soportados, se decidió hacer uso del ATMEGA16, que trabaja con 8bits.

Para dar solución a los requerimientos y especificaciones dadas, se estudio detalladamente el LaserComand, un el trabajo realizado por Eiji Hayashi, estudiante doctoral del instituto de interacción humana-computador (HCII) en la Universidad de Carnegie Mellon. Actualmente, su investigación se centra en la privacidad y seguridad utilizable. Eiji ha realizado diferentes proyectos, uno de ellos fue el Laser Comand, que es un juego construido con una matriz LED de 8x8 y un Mini Arduino.

Este juego fue desarrollado como un proyecto \ejemplo\ de la clase S10-05833 Gadgets, sensores y reconocimiento Actividad en HCI. El nombre de Laser Comand viene de un viejo juego llamado Missile Command. En Missile Command, se pide a disparar a los enemigos con con misiles.

Como innovación al proyecto presentado por Eiji Hayashi, se decidió incrementar la funcionalidad del cubo. Para ello, se creó un juego que llamamos "”Pinceladas”" en el cual el usuario, nuevamente por medio del LED, puede ir pintando sobre la matriz con sólo iluminarlo. Así mismo, creamos el juego de "”Bombardeo”", en el cual el cliente puede hacer caer misiles a gran velocidad con sólo señalar con el láser la columna donde desea que genere el misil. Como una gran mejora a este dispositivo, se agregó un reloj alarma que permite configurar la hora actual y la alarma deseada.

=Manual de instrucciones=



= Cronograma de Actividades =

Semana 1.
En esta semana los integrantes del grupo elegirán el microcontrolador con el que se desea trabajar y se estudiará el material acerca del mismo, de forma que el proceso de programación e implementación de la solución sea más eficaz. Así mismo, se propone que los integrantes manejen el lenguaje de C y consulten información acerca de las dudas que les produce el mismo.

Semana 2.
A partir de esta semana, Andrés Velandia se dedicará a la creación y comprobación del código de programación de acuerdo a la caja negra del sistema, sus restricciones y especificaciones. Al tiempo, Andrea Cuerdo irá desarrollando la PCB de implementación de la solución, adquisición de los componentes para el programador y soldar el mismo.

Semana 3.
Esta semana será utilizada para culminar el proceso de programación en lenguaje C. Así mismo, se harán los ajustes necesarios para el funcionamiento del sistema teniendo en cuenta que ya se tienen los componentes físicos para comprobar la solución. A partir de esta semana ambos integrantes del equipo irán consignando los avances en la Wiki. Se hará el trabajo de soldar la PCB del microcontrolador junto con toda la solución del problema.

Semana 4.
Esta semana se completará la implementación de toda la solución del proyecto. Se terminará de consignar la documentación adecuada en la Wiki y se realizarán los ajustes necesarios. Así mismo, se enfocarán los esfuerzos en la creación de la interfaz con la cual se encontrará el usuario.

Logros y problemas presentados día a día en el desarrollo del proyecto
En la semana 1 se logró trabajar de acuerdo a lo prestablecido en nuestro cronograma. Tuvimos inconvenientes en la adquisición del microcontrolador ya que no encontrábamos en el mercado ninguna de las referencias que soporta el programador. Teniendo en cuenta la situación, decidimos investigar la posibilidad de utilizar otras referencias que fueran igualmente aceptadas por el software.

En la semana 2 se comenzó el proceso de creación de los esquemáticos y posterior PCB para comenzar el proceso de montaje físico de la solución. En este punto, tuvimos dos inconvenientes, uno de ellos relacionados con la dificultad de enrutar el conjunto de elementos necesarios para desarrollar el juego. Ante esto, se tomó la decisión de dividir el montaje en 2 PCB’s teniendo en cuenta que en una de ellas estuviesen los componentes fundamentales y en la otra los drivers que eran opcionales pues de no ser necesarios, no se conectarían al sistema. Teniendo en cuenta estos cambios, se procedió al desarrollo de las boards para enviar a fabricar, donde se presentó el segundo inconveniente.

No pudimos aprovechar los servicios de la Universidad pues en esta semana sólo había servicio hasta el día martes y en el laboratorio de fabricación nos informaron que había mucho trabajo represado. Por todo esto, decidimos mandar a crear en un particular que nos incumplió y sólo entregó al final de la semana 3.

Así mismo, al recibir el trabajo, nos dimos cuenta que habían errores en la fabricación por lo cual a la hora de soldar había que cortar caminos y hacer uso de cables para corregir los problemas. Todo esto provocó que hasta la semana cuatro se pudiera comenzar a soldar y con ello se retrasó todo el proceso de pruebas.

Como logros de la semana 3 se tiene en cuenta que se terminó el código de programación. En la semana cuatro se soldaron las PCB, se hicieron las pruebas, se terminó el trabajo de documentación en la Wiki y se llevó a cabo la implementación de la interfaz en la que se pretende vender el producto.

= Vídeos y fotos de demostración del funcionamiento del LaserWar=

http://ftpest.uniandes.edu.co/~ap.cuerdo2685/pruebasonido.3GP
 * Video demostrativo del funcionamiento del sonido del LaserWar

http://ftpest.uniandes.edu.co/~ap.cuerdo2685/33.3GP
 * Video demostrativo del funcionamiento de la matriz del LaserWar

ZSkmKH2BLIo
 * Video demostrativo del funcionamiento del LaserWar antes de integrar la aplicación RELOJ

2ZYMSNoR3r0
 * Video demostrativo del funcionamiento de los modos: Pinceladas, Bombardeo y Guerra de misiles.


 * Imagen del diseño de la PCB para el micro con su respectiva configuración


 * Imagen 3D del diseño de la PCB para el micro con su respectiva configuración


 * Video demostrativo de la funcionalidad total de LASER WAR: Pinceladas, Bombardeo, Guerra de misiles y Reloj.

MFsLg2pJUS0

= Diagrama de caja negra =




 * Señales de entrada del sistema (INPUT)
 * ON: Esta señal la recibe el sistema a partir de un switch que controla el usuario con el cuál el sistema toma el estado de encendido o apagado según sea el caso.
 * Reset: Mediante esta señal es posible resetear el juego en caso de ser requerido. Con esta entrada, el sistema toma los valores de inicialización del sistema.
 * Voltaje ánodo: Esta señal indica al sistema qué valor de voltaje está en el ánodo de cada uno de los LED’s de la matriz.
 * Voltaje cátodo: Esta señal indica al sistema qué valor de voltaje está en el cátodo de cada uno de los LED’s de la matriz.


 * Señales de Salida (OUTPUT)
 * Voltaje ánodo: Esta señal asigna un valor de voltaje al ánodo de la matriz de LED’s de acuerdo a las entradas recibidas.
 * Voltaje cátodo: Esta señal asigna a la matriz el valor de voltaje en el cátodo de cada uno de los LED’s de acuerdo a la entrada el sistema.
 * Sonido: Esta señal sonora se activa cuando el sistema es encendido y cada vez que aparece en la matriz una combinación de encendido o que el usuario gana punto. El sonido es una canción que va acorde con el tema del producto (Laser War).

= Diagrama de Bloques =

El siguiente diagrama de bloques representa la parte interna de la caja negra. Como se puede observar, se pensó en un "Control" central que se encargará de direccionar la información que envían el resto de bloques.

En términos generales las señales entre los bloques son voltajes de ánodo y cátodo que informan a los bloques cuando encender o apagar un LED en la matriz, cuándo debe aparecer un mensaje en pantalla y cuál mensaje. Así mismo, se establece la señal "Sonido" que envía o no un voltaje a un parlante dependiendo del juego que se esté utilizando.

Como se mencionó anteriormente, nuestro producto integró 4 soluciones al problema. En esta diagrama de bloques se presenta la lógica utlizada para las 4 funcionalidades: "Guerra de Misilies", "Pinceladas", "Bombardeo" y "Reloj". Las 3 ultimas se concentraron en el bloque "Extras" para hacer de ellas un manejo independiente del juego original y evitar problemas de sincronización..



Bloque ADC
Este bloque se encarga convertir los voltajes provenientes de los Ánodos de la Matriz de Leds (señales análogas) a señales digitales (manejados como números hexadecimales), para una explicación mas detallada, dirigirse a la sección "Conversión ADC"


 * Entradas
 * Voltaje Ánodo:  Esta señal análoga proviene de la Matriz de Leds, según la luz recibida en cada columna se generará un voltaje el cual será recibido por este bloque y hará su conversión correspondiente.


 * Salidas
 * Señal Digital de 8Bits: Esta señal será el resultado de la conversión de Análogo a Digital, la cual tendrá información primordial para poder calibrar el dispositivo e identificar la columna escogida por el usuario.

Bloque Setup
Este bloque se encarga de establecer los estados iniciales de los pines A y B del Microcontrolador, inicializar las variables globales y algunas internas a utilizar y realizar una lectura de las 8 columnas de la matriz de modo tal que los voltajes generados por la luz del ambiente permitan crear una variable de calibración para así poder asegurar que el sistema pueda diferenciar entre la luz del ambiente y el láser pues de no ser así, el juego podía comenzar antes que el usuario lo desee.


 * Entradas
 * Voltaje Ánodo Convertido:  Esta señal proviene del bloque ADC y es la encargada de avisarle al sistema el voltaje generado por la luz del ambiente. Esta señal viene representada en sistema hexadecimal.
 * Reset: Esta señal proviene del usuario al presionar el botón Reset ubicada en la parte superior del cubo. Esta señal le indica al Setup que reinicie el sistema: Variables, Estado de pines y calibración.
 * ON/OFF: Esta señal proviene del usuario al colocar en on la posición del switch. Se encarga de proporcionar energía al sistema para calibrar y poner a funcionar el dispositivo completo.


 * Salidas
 * Voltaje Ánodo y Voltaje Cátodo: Estas señales se encargarán de proporcionar un voltaje inverso a los Leds de la matriz, con el fin de inicializar correctamente los pines del Microcontrolador para futuros cambios (High o Low, Output o Input).

Bloque Lectura Columna
Este bloque se encarga recibir la conversión del ADC, columna por columna (canal por canal), y según la variable de calibración determinar cuál columna fue elegida por el usuario utilizando el laser.


 * Entradas
 * Voltaje Ánodo Convertido:  Esta señal proviene del bloque ADC y es la encargada de avisarle al sistema el voltaje generado por la luz del laser. Esta señal viene representada en sistema hexadecimal.


 * Salidas
 * Columna: Esta señal tipo int informará al bloque Hit Detection cúal columna fué escogida por el usuario (si hubo alguna).

Bloque Lectura Fila
Este bloque se encarga recibir el voltaje proveniente de los cátodos de la Matriz de Leds, fila por fila, y utilizando variables internas determinar el tiempo en que cada pin se demora en pasar de un estado HIGH a un estado LOW. En principio todas los cátodos se encuentran en estado HIGH y con el tiempo pasan al estado LOW, sin embargo si el usuario ilumina alguna fila, el tiempo de cambio de estado será más corto, y con tal principio el bloque podrá identificar cuál fila fue escogida.


 * Entradas
 * Voltaje Cátodo:  Esta señal proveniente de la Matriz de Leds es la encargada de avisarle al sistema el voltaje al cual está cada LED (condición HIGH o LOW de cada pin) en estado inverso (voltaje en cátodo, tierra en ánodo).


 * Salidas
 * Fila: Esta señal tipo int informará al bloque Hit Detection cuál fila fué escogida por el usuario (si hubo alguna).

Bloque Hit Detection
Este bloque se encarga de recibir las señales Columna y Fila descritas anteriormente. Según la columna y/o fila escogida este bloque mandará una señal tipo enum la cual informará al bloque Control o al bloque Extras cuál funcionalidad y acción desea el usuario y mediante una actualización de matriz int informar cuales pines son necesario activar o desactivar para poder visualizar correctamente en la matriz la acción del usuario.


 * Entradas
 * Columna y Fila:  Esta señal proveniente de los bloques Lectura Columna y Lectura Fila informa cual Columna y Fila escogió el usuario.


 * Salidas
 * GameStatus: Esta señal tipo enum informará cual funcionalidad desea el usuario.
 * Screen: Esta señal tipo int tendrá la información de los pines a activar y desactivar según se desee.

Bloque Control
Este bloque es primordial para el funcionamiento sincronizado del sistema, según la informacion obtenida del bloque Hit Detection se determina lo que se debe mostrar en la Matriz de Leds. Con este bloque se controla la visualización de los títulos, la cuenta regresiva, el juego original, el gameover y el puntaje. Además se comunicaría con el bloque Extras cuando se requiera para poder visualizar las otras aplicaciones. Este bloque maneja la variable global screen para poder determinar cuales leds se deben prender y cuales apagar.


 * Entradas
 * GameStatus: Esta señal tipo enum informará cual funcionalidad desea el usuario.
 * Screen: Esta señal tipo int tendrá la información de los pines a activar y desactivar según se desee.


 * Salidas
 * Voltaje Ánodo y Voltaje Cátodo: Estas señales se encargarán de proporcionar voltaje y tierra a los Leds de la matriz, con el fin de visualizar correctamente las funcionalidades del sistema.
 * GameStatus: Esta señal tipo enum informará cual funcionalidad aparte del juego original desea el usuario.

Bloque Extras
Este bloque se encarga de manejar las funcionalidades adicionales aparte del juego original. Según la informacion obtenida del bloque Control se determina si el jugador desea activar "Pinceladas", "Bombardeo" o "Reloj". Sea cual se la decisión, el bloque actualiza la variable global "screen" e informa a el bloque Control lo que se debe visualizar en la matriz. Si la función escogida es "Pinceladas" o "Bombardeo" según la información de los bloques Lectura Columna y Fila se actualizará "screen" y se conseguirá observar el LED o LEDS escogidos gracias al bloque "Control". Si la función "Reloj" es escogida, se prosigue a configurar la hora, los minutos, la hora de alarma y los minutos de alarma según las señales obtenidas de los bloques Lectura Columna y Lectura Fila. Una vez se haya configurado, este bloque trabaja por si solo actualizando "screen" cada minuto y activando la bocina al momento de llegar a la Hora y minuto de alarma.


 * Entradas
 * Columna y Fila:  Esta señal proveniente de los bloques Lectura Columna y Lectura Fila informa cual Columna y Fila escogió el usuario.
 * GameStatus: Esta señal tipo enum informará cual funcionalidad aparte del juego original desea el usuario.


 * Salidas
 * Voltaje Ánodo y Voltaje Cátodo: Estas señales se encargarán de proporcionar voltaje y tierra a los Leds de la matriz, con el fin de visualizar correctamente la hora del reloj.
 * Screen: Esta señal tipo int tendrá la información de los pines a activar y desactivar según se desee.

= Conversión ADC = A continuación se explicará linea por el linea el código utilizado para realizar las conversiones de los voltajes recibidos por el bloque ADC:

int analogRead(int col){ '
 * Este será el método utilizado para leer cada canal o pin del microcontrolador (PA0 a PA7), será de tipo int ya que devolverá un número hexadecimal con el que se identificará el voltaje recibido. Como parámetro tendrá un entero entre 0 y 7 el cual especificará el canal a leer.

ADCSRA=(1<<ADEN)|(1<<ADPS2);
 * Se habilita el módulo ADC y el "Prescalar div factor" será igual a 16

ADMUX=col;
 * Se seleciona el canal a leer según el parámetro recibido

ADCSRA|=(1<<ADSC);
 * Empieza la conversión

while(!(ADCSRA & (1<<ADIF)));
 * Esperar a que la conversión finalize (se utiliza una bandera de interrupción "ADIF" que no permite continuar hasta obtener una conversión completa)

ADCSRA|=(1<<ADIF);
 * Se deshabilita la bandera de interrupción para un uso posterior.

Fin=ADCL; Fin2=ADCH; return Fin;}
 * Se guarda la primera parte del resultado en la variable Fin.
 * Se guarda la segunda parte del resultado en la variable Fin2
 * El método devuelve la primera parte de la conversión.

CONSIDERACIONES
El módulo ADC está preconfigurado con ADLAR=0, esto quiere decir que el resultado de la conversión final se guarda asi:

Debido a que los voltajes y su correspondiente numero hexadecimal serán comparados en otros bloques, se requiere manejar la mayor cantidad de bits para una comparación más precisa. Por otro lado los voltajes no serán tan grandes por lo cual es difícil obtener una conversión cuyos dos bits mas significativos sean diferentes de 0. El MicroControlador posee dos pines: AVCC y AREF, estos fueron conectados directamente al pin VCC del micro para asegurar una alimentación correcta del modulo ADC y un voltaje de referencia igual al de la alimentación, esto con el fin de obtener conversiones de mayor precisión frente a pequeños cambios en los voltajes de Ánodo.

= SONIDO = Para reproducir el sonido se tomó como base el código de la siguiente página: http://webstersprodigy.net/2009/05/04/playing-a-scale-with-the-atmega16/ el cual nos daba una noción sobre cómo implementar las notas musicales deseadas con un reloj de 1MHz, además del uso del vector de interrupciones TIMER0_OVF_vect y TIMER1_COMPA_vect.

Esta interrupción es generada cuando el Timer0 sufre un overflow, despues del tiempo de reproducción de la nota, ocurre esta interrupción y se cambia de nota.
 * TIMER0_OVF_vect

Esta interrupción es generada cuando el dato guardado en el registro OCR1A - Output Compare Register 1A es igual a la informacion en Timer/Counter1 el cual en este caso se utiliza como un generador de ondas. El dato en OCR1A es un numero hexadecimal que representa una nota musical.
 * TIMER1_COMPA_vect

CONSIDERACIONES
Es necesario habilitar las interrupciones globales por medio del comando sei;

Si se desea apagar el sonido, se debe utilizar el coman cli; el cual desactiva las interrupciones utilizadas.

Es posible cambiar el orden de las notas siempre y cuando se manejen los numeros hexadecimales respectivos, a continuación los valores a utilizar según la nota: C_l = 3817/2;

D  = 3401/2;

E  = 3030/2;

F  = 2865/2;

G  = 2551/2;

A  = 2272/2;

B  = 2024/2;

C_h = 1912/2;

= Materiales =

Dispositivos Hardware
Descargar... Descargar... Descargar...
 * MATRIZ LED 8x8
 * Hoja de datos
 * ATMEGA16A-PU
 * Hoja de datos
 * ATTINY2313-P
 * Hoja de datos
 * Programador
 * Cable tipo B y puerto estándar para puerto USB de impresora de 1.8m
 * Hoja de datos
 * Bocina de 16 Ohms
 * Laser Luz Roja de Maximo 5mW
 * Cable Jumper de 2x3 con conectores hembra
 * Hoja de datos Descargar...

Herramientas Software

 * AVR STUDIO 5
 * www.atmel.com/Products/Microcontrollers/Atmel AVR 8- and 32-bit Ir...

= Código fuente =

Programación del ATMEGA16A-PU

 * Instrucción de Programación: avrdude -c usbtiny -p m16 -U flash:w:main.hex -U lfuse:w:xe1:m -U hfuse:w:0x19:m.

Los fusibles utilizados permiten el uso del oscilador interno del micro a 1 MHz.

Programador
Toda la información presentada en esta sección "Programador" es tomada de la ttde.uniandes.edu.co, sección programadores. Es un trabajo realizado por Josnelihurt Rodriguez (2011)


 * Para Windows

Se deben instalar los siguientes controladores: controladores


 * Configuración Previa

Para poder programar el MicroControlador utilizado (en este caso el ATMega16A) es necesario programar con la ayuda de un profesor el micro usbtiny (en este caso el ATTINY2313-P) para que funcione como programador.


 * Acerca de los FUSIBLES

Los FUSES son secciones en la memoria del microcontrolador que configuran comportamientos específicos del mismo, como por ejemplo la configuración de la fuente del oscilador. A continuación se puede ver que el parámetro -U l/hfuses el valor a programar.

sudo avrdude -c usbtiny -p t2313 -U flash:w:main.hex -U lfuse:w:0xff:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

En el siguiente link se podrá encontrar una Calculadora FUSES AVR8

= PROTOTIPOS =

= Publicidad =


 * lHUwL5001iQ


 * [[File:logo_Poster.jpg]]


 * Folleto informativo

= Resultados =

LASER WAR es un proyecto exitoso. Inicialmente hacía parte de un proyecto de una materia de la universidad y terminó convirtiéndose en la oportunidad de mejorar ideas ya existentes y compactarlas en un solo producto. Así mismo, permitió un acercamiento entre el área de diseño y el campo de la ingeniería pues este fue un proyecto ambicioso que se buscó fuese llamativo y completo.

Inicialmente, el desarrollo del producto tuvo algunos inconvenientes, principalmente en la parte física del proyecto, pero luego de un mes de trabajo se logró desarrollar un producto interesante en el mercado y con ventajas frente a su antecesor: El laser comand.

A partir del código desarrollado se determinó que se optimizó el uso del espacio de memoria del micro ya que se implementó un código que en vez de guardar muchos elementos de memoria, trabajara con vectores que se fueran actualizando de acuerdo al requerimiento. Cabe destacar que, adicionalmente, el código presenta un buen aprovechamiento de la tecnología ya que incorporamos códigos de música con las frecuencias de interés y el sistema continuaba siendo viable y de acción rápida, ocupando sólo 9Kb de la memoria.

Se logró desarrollar un prototipo del juego original mejorado ya que se agregaron funciones y se agregó publicidad. Para incorporar la música deseada en el juego, se eligieron las frecuencias dentro de un periodo de tiempo y se agregaron al código. Así mismo, se logró crear un método de "Pinceladas", "Bombardeo", "Guerra de Misiles" y "Reloj alarma".

Para asegurar el correcto funcionamiento del producto, se desarrolló el código en AVR5, un software que permite visualizar el comportamiento del sistema. Fue así como se comprobó el buen funcionamiento del código de caída de LED's. Adicionalmente, se realizaron pruebas de apartes del código en el físico de la solución y luego cada una de ellas se fue integrando para producir el resultado final.

Análisis de resultados
Teniendo en cuenta los resultados obtenidos, podemos concluir que causas de éxito fueron, principalmente, el uso adecuado del tiempo y división del trabajo. Así mismo, hemos podido aprovechar las experiencias de los proyectos pasados para mejorar los mecanismos de reacción ante dificultades.

El cronograma de actividades se comenzó a llevar a cabo desde la publicación del proyecto y se trabajó desde ese momento hasta el último minuto antes de la presentación. Al tiempo que se iba desarrollando la programación, se hacía el resto del trabajo relacionado con creación de PCB, códigos de frecuencias, pruebas con el programador y Wiki.

Trabajos futuros
Como mejoras para proyectos futuros, proponemos tener en cuenta los tiempos muertos dentro del funcionamiento de la Universidad. A pesar de que fue una gran ventaja que el profesor y sus asistentes nos atendieron durante la semana de receso, el cese de actividades hizo que la PCB que deseábamos crear para la primera entrega del proyecto no se hiciera en el laboratorio de la universidad. En este tema, en las siguientes entregas no tuvimos inconvenientes.

Este fue un proyecto bastante interesante para nosotros, por lo tanto nos comprometimos a mejorarlo y poder tenerlo como referencia en nuestro récord universitario. Se vió la posibilidad de adicionar funciones y mejorar las existentes, creando mayores niveles de juego que el límite actual y mejorando la precisión.

Con la incorporación de los modos de juego se aprovechó de manera más eficiente la capacidad del microcontrolador y con ello se consiguió un producto más interesante.

= Bibliografía =

(año) (Descargar)
 * AVR:USBtinyISP - Josnelihurt Rodriguez (2011) ([ttde.uniandes.edu.co Descargar])
 * Using a laser pointer and a matrix LED as a two-dimensional input device - Eiji Hayashi
 * webstersprodigy ([http:/http://webstersprodigy.net/2009/05/playing-a-scale-with-the-atmega16/ Musica ])