sábado, 14 de septiembre de 2013

CONGAS (PROCESSING - ARDUINO)





 CONGAS (Processing -  Arduino)



El objetivo principal de este documento es dar una breve explicacion sobre como desarrollar una interfaz grafica que emule un instrumento musical por medio del sofware Processing y a su ves que este se complemente con Arduino logrando que exista interaccion del ser humano con el proyecto adesarrollar.

Para el desarrollo de esta experiencia no es necesario saber cual es funcionamiento exacto del instrumento, por ello los sonidos necesitados se extraen de la web, cabe aclarar (no todas las librerias de processing admiten todos las de audio), luego de adquirir los archivos necesarios en este caso estos con extension .wav ya que se trabaja con la libreria Maxim Yava cuya caracteristica principal es que solo acepta archivos con dicha extensión, la interfaz grafica a utilizar es basicamente una imagen que se carga por el sofware Processing.

Incialmente se realiza la programacion en el sofware processing para adquirir experiencias con el mismo a continuacion se carga el codigo y explicación del mismo:




Imagen de Sofware Processing

// se cargan librerias y se asignan variables
Maxim maxim; 
AudioPlayer player;
PImage Mai;
// libreria Maxim java, la variable player que guardara el sonido y PImage carga la imagen a la variable Mai


//
void setup()
{  size(512,307);    // se definen los pixeles preferiblemente los de la imagen a utilizar
   Mai= loadImage("conga.jpg"); // se carga la imagen .jpg a la variable Mai
     maxim= new Maxim(this); 
       player= maxim.loadFile("mykbeat.wav"); // se carga el sonido a la variable player
         player.setLooping(true); }
//
void draw()   {
      background(Mai); // se dibuja la imagen por medio de la variable Mai
        println(  pmouseX);
          println( pmouseY);}  //estas dos instrucciones sirven para visualizar en el panel inferior la posicision en (x) e (y)

void mousePressed(){ // en este punto se ejecutan todas las condiciones requeridad o condicionadas por el mouse

 player.cue(0);
 if (mouseX >=130 && mouseX <=190 && mouseY>=90 && mouseY<=125 ) { // en este condicional se pregunta por las posiciones en x e y del mouse dependiendo de estas se dibujas una elipse y se reproduce el sonido
      ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();}  }
 if (mouseX >=100 && mouseX <=120 && mouseY>=60 && mouseY<=148 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();} 
 if (mouseX >=121 && mouseX <=195 && mouseY>=135 && mouseY<=162 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();} }
if (mouseX >=196 && mouseX <=220 && mouseY>=60 && mouseY<=148 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();}}
if (mouseX >=121 && mouseX <=195 && mouseY>=45 && mouseY<=75 ) {
    buttonOn = !buttonOn;
      if (buttonOn){
        ellipse(160, 107, 75, 55);
         player.play(); }
        else{
        player.stop();}}}
nota: los demas condicionales cumplen la misma función solo cambian las posiciones del mouse.

Despues de adquirir un poco de conocimiento solo falta ensayar un poco sobre como entrelazar arduino & processing realamente la unica complicacion que se tuvo fue por la libreria que no se habia cargado pero del resto todo funciona correctamente, pero cabe anotar que la funcion Maxim Java no es la mas eficiente al reproducir un sonido con alta calidad y fidelidad, como primera medida se debe contar con el sofware Arduino para configurar el hardware:


sofware arduino
  inicialmente se debe conectar el arduino configurar su tarjeta y el puerto com luego como se ve en la figura del sofware arduino se ubica en los ejemplos-firmata-standar firmata, luego de abrir el ejemplo lo cargamos al arduino cuando se complete la carga se cierra el sofware y el arduino ya se encuentra programado para entralazarse serialemnte con el processing, acontinuacion el sofware en procesing con la comunicacion necesaria para recibir y enviar datos hacia y desde el arduino:


//comunicacion serial arduino processing
import processing.serial.*; // se importa la libreria de processing para comunicacion serial
import cc.arduino.*;  // se importa la libreria de arduino para processing
Arduino arduino; // se ha
int Pin1= 12;
int Pin= 13;
//final configuracion comunicacion serial
Maxim maxim;
AudioPlayer player1;
AudioPlayer player;
PImage Mai; 
void setup()
{
println(Arduino.list()); //se imprimen las listas de los puertos com instaldos y que reconoce processing
       arduino = new Arduino(this, Arduino.list()[1], 57600); // nuevo arduino conectado el [1] indica que processing reconoce el puerto com con ese numero especialmente
         arduino.pinMode (Pin, Arduino.INPUT);
           arduino.pinMode (Pin1, Arduino.INPUT);// se definen los pines pin, pin1 como entrada deben hacerse en mayuscula
     
  size(512,307);
   Mai= loadImage("conga.jpg");
     maxim= new Maxim(this);
      player= maxim.loadFile("Congas03.wav");
        player1= maxim.loadFile("Congas07.wav");
  
     player.setLooping(true);
         player1.setLooping(true);
         
         }
void draw()   { // los condicionales deben hacerse por el void draw es donde se realizan los ciclos
      background(Mai);
        println(  pmouseX);
          println( pmouseY);
     if (arduino.digitalRead(Pin)==Arduino.HIGH){ // de esta manera especialmente se pregunta por el estado de los pines del arduino y se ejecutan los condicionales
      ellipse(160, 107, 75, 55);
       player.play(); }
        else{
         player.stop();}  
         
      if (arduino.digitalRead(Pin1)==Arduino.HIGH){
        ellipse(350, 107, 75, 55);
         player1.play(); }
          else{
           player1.stop();}
        }

 nota: debe importarse por el skecth la libreria de arduino para procesing ya que sino la tiene por mas que se importe por el (import) genera errores si no la encuentra.

Se puede concluir que se logro con el objetivo planteado ya que fue muy buena experiencia recomiendo a las proximas personas que tengan algun trabajo de esta indole lo realicen con la mayor confiabilidad y les aseguro que aprenderan demasiado. 




Estudiante control 1: MAIRON MARIN

No hay comentarios:

Publicar un comentario