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.

martes, 30 de noviembre de 2010

Encendido de los lasers

Los laser que utilizamos pueden encender con 3V y 300mA cada uno, por lo que para encenderlos juntos se necesitan 3V y cerca de 1.8A. Sin embargo al estar mucho tiempo prendidos comenzaban a calentarse y esto era un problema pues podrian llegar a descomponerse, por lo que decidimos que lo mejor era lograr que los leds encendieran y apagaran a una velocidad imperceptible para el ojo humano y de esta manera evitariamos que se calentaran tanto.
Ademas utilizamos un circuito especial con el que utilizamos un relevador para poder prenderlos, pues el arduino no logra mandar esa cantidad de amperes por lo cual con el relevador es mucho mas sencillo. Tambien utilizamos el integrado ULN2803, esto debido a que con el fuimos capaces de prender el relevador de una manera sencilla.
Dentro del ULN2803 se encuentran 8 transistores NPN Darlington. Es un circuito integrado ideal para ser empleado como interfaz entre las salidas de un PIC o cualquier integrante de las familias TTL o CMOS y dispositivos que necesiten una corriente más elevada para funcionar, como por ejemplo, un rele. Todas sus salidas son a colector abierto y se dispone de un diodo para evitar las corrientes inversas. El modelo ULN2803 esta especialmente diseñado para ser compatible con entradas TTL.

Circuito electrico de las fotoresistencias

El circuito que utilizamos para nuestras fotoresistencias es un divisor de voltaje muy basico. En la siguiente imagen se ve el circuito que decidimos utilzar:
Como se puede ver estamos utilzando unicamente la fotoresistencia que tenemos (2M) y una resistencia comercial (1k), el voltaje al que esta conectada la resistencia es de 5V.
Este divisor manda al pin del Arduino un voltaje de 5V cuando a la fotoresistencia no le llega el laser y menor a 2V cuando si tiene el rayo del laser sobre ella con lo cual el Arduino no alcanza a leer ese pin.