viernes, 3 de diciembre de 2010

Mas fotos

Aqui estan mas fotos de nuestra guitarra:







Video de la guitarra

El siguiente es un video de como funciona la guitarra y de como se oye:

En el video se puede ver como se toca la guitarra y se logra escuchar los diferentes sonidos que se crea al momento de tocar en diferente traste.

Programa en arduino

El siguiente es el programa que creamos para nuestro Arduino y que permitira tocas la guitarra:
/*x es para las fotoresistencias*/
int x1=0;
int x2=1;
int x3=2;
int x4=3;
int x5=4;
/*y es para las cuerdas fisicas*/
int y1=5;
int y2=6;
int y3=7;
int y4=8;
int y5=9;
/*z es para encender y apagar lasers*/
int z=10;
/*s es para el sonar*/
int s=0;
int temp=0;
unsigned int retardo=0; 

void setup() {
  Serial.begin(115200);
  pinMode (x1,INPUT);
  pinMode (x2,INPUT);
  pinMode (x3,INPUT);
  pinMode (x4,INPUT);
  pinMode (x5,INPUT);
  pinMode (y1,INPUT);
  pinMode (y2,INPUT);
  pinMode (y3,INPUT);
  pinMode (y4,INPUT);
  pinMode (y5,INPUT);
  pinMode (z,OUTPUT);
}
void loop() {
  /*La variable temp va a llamar a la funcion sonar*/
  temp=sonar();

  /*Si el sonar da los datos que estan en el rango hace todo lo que esta adentro*/
  if (temp<24 && temp>10){ /*revisar cuerda y sonar*/
    /*Es para encender y apagar lasers*/
    digitalWrite(z, HIGH); retardo=0;
    //delay(500);
    //digitalWrite(z, LOW);
    //delay(500);
    /*leyendo fotoresistencia*/
    x1=digitalRead(0);
    x2=digitalRead(1);
    x3=digitalRead(2);
    x4=digitalRead(3);
    x5=digitalRead(4);
    /*leyendo cuerda fisica*/
    y1=digitalRead(5);
    y2=digitalRead(6);
    y3=digitalRead(7);
    y4=digitalRead(8);
    y5=digitalRead(9);

    /*Hacer un and de la fotoresistencia con la cuerda fisica para saber cual es la cuerda que estas tocando*/
    if (x1==1 && y1==1){ /*Notas de la cuerda 6 dependiendo del sonar*/
      if (temp==11){
        noteOn(0x90,41,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,42,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,43,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,44,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,45,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,46,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,47,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,48,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,49,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,50,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,51,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,52,63); /*Nota en el traste 2*/
        delay(250);
      }
    }
    else if (x2==1 && y2==1){ /*Notas de la cuerda 5 dependiendo del sonar*/
      if (temp==11){
        noteOn(0x90,46,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,47,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,48,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,49,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,50,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,51,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,52,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,53,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,54,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,55,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,56,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,57,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
    else if (x3==1 && y3==1){ /*Notas de la cuerda 4 dependiendo del sonar*/
      if (temp==11){
        noteOn(0x90,51,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,52,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,53,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,54,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,55,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,56,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,57,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,58,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,59,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,60,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,61,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,62,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
    else if (x4==1 && y4==1){ /*Notas de la cuerda 3 dependiendo del sonar*/

      if (temp==11){
        noteOn(0x90,56,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,57,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,58,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,59,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,60,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,61,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,62,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,63,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,64,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,65,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,66,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,67,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
    else if (x5==1 && y5==1){ /*Notas de la cuerda 2 dependiendo del sonar*/
   
   
      if (temp==11){
        noteOn(0x90,60,63); /*Nota en el traste 1*/
        delay(250);
      }
      else if (temp==12){
        noteOn(0x90,61,63); /*Nota en el traste 2*/
        delay(250);
      }
      else if (temp==13){
        noteOn(0x90,62,63); /*Nota en el traste 3*/
        delay(250);
      }
      else if (temp==14){
        noteOn(0x90,63,63); /*Nota en el traste 4*/
        delay(250);
      }
      else if (temp==15){
        noteOn(0x90,64,63); /*Nota en el traste 5*/
        delay(250);
      }
      else if (temp==16){
        noteOn(0x90,65,63); /*Nota en el traste 6*/
        delay(250);
      }
      else if (temp==17){
        noteOn(0x90,66,63); /*Nota en el traste 7*/
        delay(250);
      }
      else if (temp==18){
        noteOn(0x90,67,63); /*Nota en el traste 8*/
        delay(250);
      }
      else if (temp==19){
        noteOn(0x90,68,63); /*Nota en el traste 9*/
        delay(250);
      }
      else if (temp==20){
        noteOn(0x90,69,63); /*Nota en el traste 10*/
        delay(250);
      }
      else if (temp==21){
        noteOn(0x90,70,63); /*Nota en el traste 11*/
        delay(250);
      }
      else if (temp==22){
        noteOn(0x90,71,63); /*Nota en el traste 12*/
        delay(250);
      }
    }
  }
  else
    delay (100);
  /*Si el rando es mayor al maximo que demos en el sonar entonces permitira entrar a la funcion de tocas la cuerda al aire*/
  if (temp>=24){ /*Te dara la nota de la cuerda cuando la tocas sin poner la mano en ningun traste*/
    retardo++;
    if(retardo>65000){
      digitalWrite(z, LOW);  /*  Apagar el laser*/
      retardo=0;
    }
 
 
    /*leyendo cuerda fisica*/
    y1=digitalRead(5);
    y2=digitalRead(6);
    y3=digitalRead(7);
    y4=digitalRead(8);
    y5=digitalRead(9);
    if (y1==1){ /*cuerda 6*/
      noteOn(0x90,40,63);
      delay(250);
    }
    else if (y2==1){ /*cuerda 5*/
      noteOn(0x90,45,63);
      delay(250);
    }
    else if (y3==1){
      noteOn(0x90,50,63); /*cuerda 4*/
      delay(250);
    }
    else if (y4==1){
      noteOn(0x90,55,63); /*cuerda 3*/
      delay(250);
    }
    else if (y5==1){
      noteOn(0x90,59,63); /*cuerda 2*/
      delay(250);
    }
    else
      delay (100);
  }

} /*final del void loop*/

/*Es el promediador del sonar*/
int sonar(void){ /*Promedio del sonar*/
  int s0=0;
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0+analogRead(0);
  s0=s0/10;

 // Serial.println(s0, DEC);

  return s0;
}
/*Codigo para hacer sonar las notas que toquemos*/
void noteOn(char cmd, char data1, char data2)
{
  Serial.print(cmd,BYTE);
  Serial.print(data1,BYTE);
  Serial.print(data2,BYTE);
}

Ya que solo estamos usando 5 lasers nuestras variables de entrada son 5, pero para quien quiera poner 6 lasers solo tiene que aumentar una variable mas para la fotoresistencia y para la cuerda fisica. Otra parte importante de este programa es que decidimos no encender los lasers intermitentemente pues el relevador hacia mucho ruido y no era lo suficientemente rapido para que fuera imperceptible, por eso decidimos mejor programar que los laser se encendieran cuando el sonar detectara la mano en el brazo y si no detecta nada en 7 segundos los lasers se apagaran.

Ultimos detalles en la guitarra

Finalmente ya tenemos todo lo necesario para hacer que nuestra guitarra sea funcional. Entonces es momento de poner todo sobre la estructura de la guitarra que conseguimos. En la foto se ve como es que pusimos todo en nuestra guitarra:


Como se puede observar en la guitarra solo tenemos 5 lasers, eso es porque como en todo proyecto los componentes mas caros son los que se descomponen, entonces ya que no teniamos suficiente tiempo (y dinero) para comprar otro laser decidimos que lo hariamos con 5 cuerdas teniendo en cuenta que la cuerda que no se podra tocar es la primera.
Ya teniendo todo ensamblado y acomodado para que toque perfectamente solo queda un paso mas, hacer nuestro programa.

miércoles, 1 de diciembre de 2010

Circuito para encender los lasers

Como mencionamos en la entrada anterior, necesitabamos hacer un circuito con el cual nuestros lasers prendieran y apagaran a una gran velocidad para evitar calentarse demasiado. De esta manera decidimos utilizar el circuito con el uln2803 y un relevador; al revisar el funcionamiento del integrado diseñamos el siguiente circuito que permite hacer lo que deseabamos:

En nuestro circuito se pueden observar unicamente 5 lasers, esto debido a que uno de los lasers que teniamos tuvo un problema y no funciono muy bien por lo cual decidimos seguir con el proyecto pero unicamente con 5. Ya que habiamos calculado que para 6 lasers se necesitaban 1.8A para prender, ahora que son 5 solo seran necesario 1.5A para que funcionen correctamente.
Como se puede observar solo utilzamos 4 pines del integrado que son: tierra, voltaje, la entrada 1 y salida 1. La salida va conectada a un relevador que recibe en su patita central 3V y 1.5A y en normalmente abierto unos 5V; de esta manera al momento de cerrar el switch en el relevador manda los 3V y 1.5A a los lasers.