sábado, marzo 12, 2016

Música robótica

¿Podemos hacer que MBot ejecute una pieza musical? Claro, solo que hay que saber un poquito de música para poder programalo para eso. La placa Arudino viene equipada con un buzzer así que podremos programarla para que emita el sonido que querramos en el tiempo correspondiente. En ese sentido el desafío es más que intersante ya que requerirá tomar muchas decisiones en relación a ciclos que se repiten y a la notación musical.


Para hacerlo más complicado vamos a empezar con la partitura de una melodía que presenta dos finales diferentes… como esta, una canción folklorica polaca llamada “Ja Kujawiak”. ¿Cómo nos organizamos?


Lo primero que nos conviene hacer es reconocer los ciclos. Aquí veremos que tenemos una melodía principal y dos finales diferentes que se ejecutan tras finalizar la melodía principal. Entonces, nos convendrá dividir la canción en tres bloques: “Melodía”, “Final A” y “Final B”. Luego programaremos a Mbot para que ejecute estas tres partes siguiendo el orden indicado por la partitura.
Untitled drawing (1).jpg


Para programar los sonidos, tenemos que recurrir a la escala americana, ya que los bloques de MakeBlock para Scratch ofrecen esa notación. Recordemos entonces los equivalentes de cada nota musical entre el sistema latino y el americano:


Do = C
Re = D
Mi = E
Fa = F
Sol = G
La = A
Si = B


Finalmente, como tendremos que programar la duración de cada nota, es necesario establecer una equivalencia para cada duración. En este caso hemos elegido asignar la duración “half” (medio tiempo) a las figuras de un tiempo (negras) y calcular a partir de allí las notas de mayor y menor duración. De esta forma, le damos un poco más de “velocidad” a la canción.


El resultado puede verse en los tres bloques (Blocks) preparados para cada fragmento musical:





¿Algo no suena bien?
Pero tenemos un problema. Los bloques disponibles en Scratch no admiten semitonos, los cuales, si miramos bien la partitura, son necesarios. Para ello, entonces, necesitaremos modificar los valores en la versión del programa (en modo texto) en Arduino IDE y reemplazar, con mucho cuidado, las frecuencias que se correponden a semitonos. Consultar una tabla de frecuencias como la que incluímos a continuación ayudará a saber cual es el tono exacto para los semitonos:

NOTAS.png


En nuestro caso debíamos reemplazar varios Fa y un Re sostenido. Esto requería cambiar las frecuencias 349 y 294 por 370 y 311 respectivamente… veamos el caso del Fa que debe transformarse en Fa sostenido en el fragmento “Final B”:


void FinalB()
{
   buzzer.tone(349, 250);
   
   buzzer.tone(349, 250);
   
   buzzer.tone(440, 500);
   
   buzzer.tone(392, 250);
   
   buzzer.tone(349, 250);

  buzzer.tone(330, 1000);
   
}

Puede parecer un poco confuso, pero es simple: en estas líneas de código, el primer valor expresa la frecuencia de la nota y la segunda, la duración. Lo que modificaremos es el valor de las frecuencias correspondientes a los semitonos que estamos necesitando.


Ahora que ya hemos resuelto los problemas más serios, podemos incluir en el programa las líneas que nos permitirán establecer el orden en que debe ejecutarse la partitura… y el comando para iniciarlo desde el botón del control remoto. Lo cual, utilizando los bloques predefinidos al inicio, se verá así:


iacuiaia2.png


Finalmente, Mbot puede ejecutar la música… ¡y ya está preparado para resolver otros problemas mucho más complicados!





Este es el cuarto post sobre nuestras experiencias con mBot. Si te intersa conocer como llegamos aquí podés vistar nuestros post anteriores: “Primeras experiencias en robótica educativa”,  “Con ojos de robot” y “¡Alto ahi”: Programando con el control remoto” en este mismo blog.

No hay comentarios.: