sábado, 31 de marzo de 2012

Parte VII: Entrega final, resultados finales

           Estimados seguidores, con esta entrega final vamos a colocarlos al tanto del protocolo de comunicación definitivo del grupo (ya se había explicado el protocolo, pero sin explicar cómo se utilizarían los 2 bytes de datos), el sintetizador realizado en Labview, así como todas las fotos y videos de distintas pruebas realizadas para lograr el resultado.  

           Han sido unas semanas bastante fuertes, donde el deadline de entrega del proyecto se unió a todos los demás requerimientos académicos, pero aún así, nos sentimos satisfechos como grupo por lo logrado. Sonó uno de los instrumentos con un funcionamiento completo que abarcó todas sus características, lo que nos indica que el trabajo con el sintetizador y la comunicación del DEMOQE128 con el mismo usando el protocolo propuesto fue ejemplar. Quizás faltó una semana más, para una entrega completa con todo lo que se había planeado, por supuesto nos habría ayudado menos colaboración por parte de nuestro querido amigo Murphy, quien nos acompañó hasta el final: no sólo colaboro con dañar una de las computadoras personales donde se trabajaba, tampoco le bastó con borrar programas grabados de las computadoras restantes, ni mucho menos le bastó hacer muy lenta la única computadora donde funcionaba el Labview; se tuvo que lucir el último día haciendo de las suyas. Pero con esto no pretendemos excusarnos, ni hacer de mártires, pretendemos reflexionar, este proyecto ha sido realmente interesante y ha representado un aprendizaje significativo, es por ellos que hay satisfacción, porque se lograron los objetivos que en una primera entrega del blog parecían imposibles.

           Así pues empezaremos hablando de la definición para los bytes del protocolo de comunicación no tomados en cuenta anteriormente.

Protocolo de Comunicación



Se utilizaron 4 bits LSB del byte de estado (explicado anteriormente), para identificar los instrumentos siguientes:

Instrumento
Identificador
Saxofón
0000
Cello
0001
Multitasking
Trompeta
Tambor
Platillo

0010
0011
0100
Xilófono
0101

Tabla . Asignación de los LSB del byte de estado.

PRIMER BYTE DE DATA: fue dividido de la siguiente forma:



Los primeros 5 bits constituyen la nota musical, lo cual permite representar un total de 32 notas. Esta selección fue con la finalidad de disponer de 4 octavas (28 notas) para los diversos instrumentos.



Identificador
Nota musical
Octava 1
Octava 2
Octava 3
Octava 4
DO
00000
00111
01110
10101
RE
00001
01000
01111
10110
MI
00010
01001
10000
10111
FA
00011
01010
10001
11000
SOL
00100
01011
10010
11001
LA
00101
01100
10011
11010
SI
00110
01101
10100
11011


Tabla . Asignación de bits a cada nota.

Los últimos 3 bytes conforman el volumen, habilitando hasta 8 variaciones del mismo.

SEGUNDO BYTE DE DATA: en este sintetizador no se agregaron efectos adicionales a las notas a reproducir.


Sintetizador de Labview


           El sistema sintetizador está constituido por lo siguiente:

           A continuación se presenta una explicación detallada de cada una de las etapas desarrolladas:
Adquisición de datos

           Constituye la primera etapa del sistema en Labview. Recibe la data desde el instrumento como se muestra:

           Es decir, las señales generadas por los sensores que se encuentran en los instrumentos, son recibidas por el microcontrolador. Luego en Codewarrior se constituye el protocolo de comunicación. Luego el mensaje es enviado a LabVIEW por comunicación serial.

           En esta etapa se usan los drivers VISA para recibir los datos a través del serial, utilizando una transmisión de 8bits a 115200 baudios. En la figura 1  se observa la estructura encargada de obtener la data. La misma se encuentra dentro de un while para asegurar que la recepción se realice todo el tiempo.

Figura 1.  Adquisición de datos.

           Los datos constituyen un mensaje del protocolo explicado anteriormente, con el adicional de dos bytes, uno de inicio de trama y otro de fin de trama (figura 2 ). Estos bytes permiten determinar si la información está llegando correctamente. Cuando se verifica que la data llega bien, se procede a analizar los demás bytes.
INICIO DE TRAMA
0XFF
BYTE DE ESTADO
PRIMER BYTE DE DATA
SEGUNDO BYTE DE DATA
FIN DE TRAMA   0XFC
Figura 2. Mensaje que recibe el LabVIEW

Para la verificación se usa la estructura siguiente:

Figura 3. Estructura utilizada para la revisión del inicio de trama.

           En la misma se establece como condición del while una comparación del primer byte del mensaje, con el 255 (0xFF). Por lo tanto no se realiza el procesamiento de los datos, hasta que obtenga el inicio de trama.

Esta igualación también se realiza con el fin de trama, cambiando 255 por 252 (0xFC). La diferencia es que ya no representa la condición de un while, sino la condición para acceder a la información de reproducción de sonido. 
Procesamiento de datos
         
           Principalmente realiza comparaciones del protocolo para determinar que operaciones se realizaran. Se observa el byte de estado, así como los bytes de data, determinando que acciones ejecutará el instrumento indicado.

Figura 4. Extracción de la información del protocolo.

Esta fase se encuentra en un ciclo, permitiendo examinar constantemente cambios del mensaje. Le envía modificaciones a la etapa de sonido mediante el uso de variables locales.
           
           Entre estas modificaciones está el NOTE ON y  NOTE OFF  para cada instrumento, el volumen, y la frecuencia (nota a reproducir),

Reproducción de sonido

            Primero se utilizó la siguiente configuración básica para la reproducción de un archivo .wav:

Figura 5. Reproduccion de archivo .wav

Los últimos tres bloques sirven para escribir la información en la tarjeta de sonido, esperar a que se termine de reproducir y limpiar el buffer. Ésta configuración funciona para reproducir el tambor, el platillo y el xilófono, ya que no mantiene el sonido continuo.

 En el caso de los instrumentos que necesitan mantener una nota continua, como la trompeta, el cello, y el saxofón, este diagrama no se debe usar, pues al tratar de repetir la nota, se escuchan cortes antes de la nueva reproducción, por lo que fue necesario dividir el archivo en 3 partes: ataque, sostenido y caída. Con esta división se crea una representación que reproduce el ataque, luego mantiene sonando el sostenido tanto tiempo como sea requerido, y finalmente suena la caída. Esta segmentación fue realizada con el programa Audacity.


Figura 6 Reproducción continua del sostenido

Figura 7. Reproducción ataque-sostenido-caída

Para el cambio de la frecuencia se tiene:

Figura 8. Modificación de frecuencia.

            Basándose en los diagramas anteriores, se crearon secciones para la reproducción de cada uno de los instrumentos con una serie de subVI’s., que reciben como entrada variables locales provenientes del procesamiento de datos. En las mismas se incluyeron variaciones de la frecuencia de muestreo a utilizar, volumen, NOTEON y NOTE OFF. La etapa de reproducción de sonido se muestra a continuación:


Figura 9. Reproducción de sonido.


Combinando la figura 5 y 9 se tiene el sintetizador final.

Xilófono:

     En el video se puede apreciar el resultado final del instrumento. Suena como una trompeta porque el Labview sólo quería correr el programa en que se encontraba sólo la trompeta (recuerdan Murphy?). Se puede evidenciar que las teclas suenan más o menos fuerte dependiendo de la intensidad con que la tecla es golpeada, y cambiando de tecla, cambia la frecuencia del sonido.


            El video que se presenta a continuación muestra la prueba de la baquelita para el canal de adquisición de los piezoeléctricos, un total éxito:



El video que se presenta a continuación, muestra la prueba de las fotoresistencias, en este video, los Datos ya se estaban enviando dentro de sus respectivos paquetes al Labview:



Fotos durante la realización del instrumento:







Resultados finales:





Guante Multitasking:

           El video siguiente muestra el desempeño del acelerómetro con su canal de adquisición en Baquelita:


           En el siguiente se muestra el mismo comportamiento del acelerómetro, pero usando ya el protocolo para el envío de los datos en paquetes. Para este caso, se colocó byte de inicio FF, 3 bytes con los datos de los 3 ejes del acelerómtero y byte dee fin FC.



           Fotos durante la realización de las baquelitas para el guante:



           Resultado final (Nótese la tarjeta para la comunicación con el micro sirviéndose de un conector DB9):





lunes, 5 de marzo de 2012

Parte VI: Finalizada fase de prueba canal de adquisición de los sensores, inicia montaje de los circuitos. Trabajo en Labview

        Durante la última semana se terminaron las pruebas de los canales de adquisición. Respecto a la guerra con el piezo eléctrico a la que se hizo referencia la entrada pasada, finalmente se pudo terminar su canal para single suply, lo que hará el montaje un poco más complicado debido a la imlementación de la tierra virtual, pero asegurará una alimentación de VCC y tierra, sin necesidad de otra fuente negativa. El siguiente video, muestra el resultado final del piezo, en el se puede apreciar que los picos producto del piezo al ser percutido, son mantenidos gracias al filtro capacitivo; con este tiempo, se ha asegurado que el ADC del DEMOQE128 leerá bien la magnitud de la forma de onda generada.


        Por otro lado, el circuito de adquisición del TCRT ya ha sido soldado y montado en baquelita, en los videos siguientes, se puede apreciar la prueba que les debíamos de este, observándolo en el osciloscopio, así como la prueba del mismo, adquiriendo la señal con la computadora y el DEMOQE128.



        Las fotos siguientes muestran parte del proceso de montaje de los sensores en la baquelita:





        En base al Labview, se ha logrado producir el sonido sin los molestos saltos de tono producto de la mala elección del número de muestras. Durante toda esta semana se estará trabajando simultáneamente en el desarrollo de los protocolos en el Labview y Codewarrior, así como continuar con la realización y prueba de los montajes de baquelitas. En las próximas entradas se les estará informando respecto a los avances, saludos.


domingo, 26 de febrero de 2012

Parte V: La guerra con el Piezoeléctrico, Avances respecto a la adquisición y su muestra en Labview

       En esta entrada le hemos de describir un poco más sobre los últimos avances y sin sabores del proyecto. Primero hablaremos de los canales de adquisición de los sensores. Luego de los avances en la programación del micro y con el labview.

       Respecto a la fotoresistencia que será implementada en el Xilófono, hubo que modificar el circuito propuesto para su canal de adquisición. En el circuito anteriormente planteado, se había pensado colocar un comparador, con el propósito de tener una salida digital del sensor (3.3V o 0V), pero,  dada la baja corriente en la entrada del comparador, el LM311 no funcionó como se esperaba. Se decidió colocar un transistor que funcionara en modo corte-saturación, logrando así la respuesta digital esperada al hacer incidir el láser en la fotoresistencia e interrumpirlo. En un video que se colocará luego para mostrar los avances con el Labview, se puede apreciar también lo bien que funciona el nuevo circuito que se implementó para la fotoresistencia.

            Hablemos pues del canal de adquisición para el piezo eléctrico, en el título se hace referencia a este precisamente porque ha dado trabajo en las últimas sesiones. Tanto la semana pasada, como la anterior a esa, hubo problemas para el montaje del canal de adquisición del piezoeléctrico, sin embargo, el viernes tras varias pruebas se pudiron evidenciar algunos errores de cálculos, así como ciertos detalles que en simulación pasan desapercibidos, pero que se presentan a la hora del montaje del circuito real. Sin embargo el montaje exitoso del canal se realizó utilizando el operacional en modo Dual Suply, en la práctica se quiere realizar el mismo montaje, pero Single Suply, estableciendo una tierra virtual. La ventaja de Single Suply es que la alimentación de todos los sensores será única, una sola fuente de voltaje que será positivo, ahorrando asi espacio, facilitando la implementación, simplificando el diseño, y, evitando al mismo tiempo cualquier error que pudiera surgir donde el voltaje negativo afecte el microcontrolador de manera negativa. Vale destacar que tras realizar el montaje exitoso con un circuito dual suply, se realizaron todos los cambios para implementarlo en single suply, pero este da fallas, esta semana se procurará subsanar el asunto.

       En la foto siguiente se muestran algunas reconsideraciones hechas sobre la pizarra acerca de la diferencia y ventajas de single suply respecto a dual suply, no se logra visualizar específicamente todo, pero la imagen es capaz de dar la idea de lo que se necesita implementar y sirvió para la realización del montaje:






       En la imagen siguiente se puede apreciar el buen funcionamiento del superdiodo con filtro capacitivo, donde al colocar un entrada cuadrada, con duty reducido a modo de impulsos, el capacitor es capaz de mantener el voltaje e ir disminuyéndolo poco a poco. Esta imagen se logro con el montaje dual suply, se intentará obtener resutados igual de satisfactorios para una configuración single. Se supone que al lograr esto, el ADC del DEMOQE128 tendrá tiempo suficiente para adquirir la señal del piezo. Hay que mencionar que fue diseñado para una frecuencia de alrededor de 9Hz, mucho mayor a la velocidad con la que se espera se ejecute el Xilófono, pero suficientemente grande para garantizar cierto margen de error.


       Por último, hablaremos de los avances respecto al Labview y el protocolo para el envío de la data desde el microcontrolador al Labview. Hasta ahora se habían realizado envíos de datos al Labview por serial, enviando un dato a la vez. Esta semana se logró enviar un bloque que integra las mediciones de varios canales del ADC al mismo tiempo. Además se realizaron  las primeras pruebas del protocolo a utilizar para la comunicación entre los instrumentos y la computadora, el cual esta basado en el protocolo MIDI. 

       La transmisión del mensaje tiene la siguiente forma:
0xFF + BYTE + BYTE + BYTE + 0xFC

       Estos bytes tendrán funciones específicas que serán descritas en detalle en entradas posteriores. Se agregó FF y FC en los extremos del mensaje para comprobar que la trama esta llegando correctamente.

       Video del acelerómetro: En este video se muestran las tres salidas del acelerómetro (z,y,x), las cuales son adquiridas mediante el ADC y enviadas por serial al Labview, siguiendo el protocolo descrito. Se puede apreciar como cambian las magnitudes de lo ejes al mover el sensor en las diversas direcciones.



       Video de la fotoresistencia: En este video se muestra la salida de la fotoresistencia, la cual es adquirida mediante el ADC y enviada por serial al Labview, siguiendo el protocolo descrito. Se observa cómo la señal varía entre 3.3V y 0V, al hacer incidir la luz de láser sobre el sensor y quitarla.






       Se han presentado retrasos significativos porque una de las computadoras personales con que se programaba el microcontrolador y donde se tiene Labview se dañó, se trabaja para solucionar la situación y mientras tanto se trabaja con la otra Laptop disponible. Esperamos que sigan manteniéndose al corriente de los avances. Nos despedimos de nuevo.



lunes, 13 de febrero de 2012

ParteIV: Adquisición con sensor, envío serial y lectura de datos con Labview

            En esta semana se han montado los canales de adquisición de los sensores y se empezaron las primeras pruebas con el Labview. En el siguiente video se puede apreciar el funcionamiento de uno de los sensores (el acelerómetro). 

            Para esta prueba, colocamos al micro a leer los valores de voltajes indicados por el acelerómetro a través del conversor ADC incluido en el DEMOQE128. Posteriormente los datos obtenidos por esta conversión son transmitidos por el puerto serial del DEMOQE128 hacia la computadora (en este caso el DEMOQE128 cuenta con un toolkit para virtualizar el puerto serial y enviar los datos vía USB, luego en la computadora una aplicación se encarga de hacer el enlace entre el puerto virtual que llega por el cable USB y los puertos seriales propios de la computadora COM1, COM2, etc).  Por último, se realizó un programa sencillo en Labview que permite leer los bytes que son enviados por el micro y muestra estos datos en pantalla a través de  su interfaz gráfica.

            Por tratarse de un acelerómetro de 3 ejes, existirán 3 datos arrojados por el sensor en todo momento. En el video se puede apreciar como cada eje (X, Y, Z: alto, ancho, profundidad) es probado por separado. Para próximas entregas se realizará un video donde se evidencien varios sensores simultáneamente, a través de varios gráficos paralelos.




            PD: si se quedan hasta el final del video conocerán a Yholy, la encargada de la creación del Guante Multitasking.



domingo, 5 de febrero de 2012

Parte III: Continuación de LA PROPUESTA, Primeras puebas de los sensores y Envío Serial

          Debido a que la semana pasada tuvimos que entregar una propuesta tentativa, en ésta semana fueron necesarias diversas pruebas a los sensores, para determinar si los circuitos de acondicionamiento funcionaban como deseábamos. En base a lo anterior se han hecho algunas modificaciones sobre los diseños presentados.
            A continuación les mostraremos las variaciones realizadas, con una breve explicación de por qué se realizaron, esperando que la próxima semana podamos adquirir esas señales a través del ADC del micro y enviarlo por serial al Labview, siempre con la esperanza de que todas las ideas de nuestro equipo puedan integrarse efectivamente.
Xilófono: Acondicionamiento de sensores

Sensores Piezoeléctricos.
                                  
                        Diagrama de bloques


            Se decidió simplificar el canal de adquisición de este sensor. Primero colocando un divisor de voltaje, para atenuar las señales que pueden llegar a ser de hasta 20V, transformándolas así al rango permisible por el canal ADC de adquisición del micro (hasta 3.3V). Luego se le colocara un diodo Zener de voltaje inverso 3.1V, de modo que limite el voltaje a 3.1V máximo (asegurándonos que sea cual sea el caso, nunca pasen más de 3.1V a la entrada del DEMOQE128). Es posible colocar una resistencia en serie con la entrada del input del ADC por seguridad adicional. Ya luego será desde el micro que se interpreten los datos obtenidos y se detecten los picos.

Fotoresistor
                                  
                        Diagrama de bloques

            Se decidió cambiar la Fotocelda por Fotoresistores, los cuales tienen el mismo principio de funcionamiento que los anteriores, pero se presentan más prácticos por su respuesta más rápida ante variaciones, así como un rango mayor en el cambio de resistividad bajo el efecto de la luz de láser. Luego de un sencillo circuito de corte saturación (ya que sólo interesa detectar si el haz de luz láser incide o no), se hace pasar por un circuito comparador, para transformar la señal en una señal digital que tendrá un valor si hay recepción de luz (el haz no es interrumpido), y otro si el sensor no recibe el haz (el haz fue interrumpido por la baqueta o percutor).


Multitasking: Acondicionamiento de sensores

Micrófono Electret.
                                  
                        Diagrama de bloques

            Le agregamos el detector de picos, para que cada vez que obtengamos fluctuaciones fuertes en la señal suene el instrumento con una intensidad especifica.

TCRT1000: Sensor óptico reflectivo.                                                                                                                                
                        Diagrama de bloques

El cambio del Schmitt trigger surge de la necesidad de hacer que el sensor trabaje solo en dos niveles de una forma rápida, por lo tanto este circuito estará siempre saturado en uno de los dos niveles, mientras que en el otro estará en corte.

MMA7260QT:Acelerómetro 

                        Diagrama de bloques
En cuanto al acelerómetro nos percatamos que no era necesario la utilización de un filtro para eliminar el ruido del ambiente.

 Pruebas de Sensores



            En esta prueba del fotoresistor, sólo conectamos el potenciómetro entre ambos terminales del sensor y medimos su resistividad. Se observa que con la luz del laboratorio, el fotoresistor tiene una resistencia de 9.9KΩ. Luego cuando se hace incidir el haz del láser en el fotoresistor, este modifica su resistencia  disminuyéndola más de nueve veces el valor anterior (500Ω), como se puede apreciar en las 2 imágenes siguientes:



       En el caso del piezoeléctrico, bastó colocarle ambos terminales en las terminales de un osciloscopio. Se pudo apreciar que al percutirlo se obtiene una señal con la forma de onda que se aprecia en la imagen inferior, y que puede llegar a tener niveles de voltajes de hasta poco más de 20V en el pico de la señal, dependiendo de la intensidad y la duración con que se golpea el piezo. 



 Envío Serial utilizando el DEMOQE128

         Se probó varios módulos de la tarjeta y se empezó a programar el procesador mediante el Codewarrior. En este caso, se hizo una rutina que permite enviar por el puerto serial la medición de una señal analógica en una de las entradas del microcontrolador. La señal de entrada, primero es transformada a una señal digital, mediante el uso del ADC incluído en el DEMOQE128, y luego de la conversión, la señal es enviada por el puerto serial de la tarjeta. En este ejemplo, se utilizó el potenciómetro incluído en la tarjeta como entrada analógica. Para poder constatar el buen funcionamiento de la rutina, se conectó el microprocesador a la computadora, y, por medio del REALTERM, se muestra en pantalla los valores recibidos por puerto serial en vivo. En el video se puede apreciar que a medida que se varía el potenciómetro, también varían los valores que son recibidos en la computadora por el puerto serial y esas variaciones se ven reflejadas tanto en el REALTERM, como en los leds del microcontrolador (que fueron  configurados para mostrar la posición del potenciómetro).