Codigo para ejercicio en Arduino de "Piano" Electrónico inalámbrico.

Este es el código de un ejercicio en Arduino que intenta simular un piano electrónico inalámbrico.


El proyecto trata que a través de un sensor ultrasónico calcular la distancia a la que se encuentre mi mano del sensor, con base a la distancia entre el sensor ultrasónico y mi mano calcula el tono y semitono correspondiente tomando como base La4 a 432 hertz, a mayor distancia más agudo el tono y a menor distancia más grave el tono. El tono será emitido a través de un speaker sencillo conectado al Arduino.



El ejercicio también intenta simular un estado sinestésico, la sinestesia es la interferencia de varios sentidos al percibir un olor, color, sonido, etc., de tal forma que la mezcla de los sentidos genera diversas percepciones en los individuos que poseen esta cualidad. En este caso el ejercicio tratará que al momento de emitir un sonido, se generará un color diferente por cada tono, este color se genera con base a la frecuencia del tono y la frecuencia del color será codificada con en hexadecimal combinando los colores de un Led RGB.


Código

 
 
 
int redPin = 10;
int greenPin = 11;
int bluePin = 12;
 
int melody[] = {  432, 457, 484 ,513, 544, 576,  610, 647, 685, 726, 769, 815};
int RGB[][12] = {
          {255, 255, 139,  00,  00,  00,  00,  00, 153, 255, 255,  255},
          {00,   00,  00,  00, 128, 255, 255, 255, 255, 255, 127,  00},
          {128, 255, 255, 255, 255, 255, 128,  00,  00,  00,  00,  00}
        };
int nota = 0;
int color = 0;  
 
const int pingPin = 8;
const int pingEcho = 9;
 
void setup() {
    pinMode(pingEcho, INPUT);
    pinMode(pingPin, OUTPUT);
     
    pinMode(redPin, OUTPUT);
    pinMode(greenPin, OUTPUT);
    pinMode(bluePin, OUTPUT);
 
}
 
void loop()
{
 
  long duration, inches, cm;
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);
 
  duration = pulseIn(pingEcho, HIGH);
  cm = microsecondsToCentimeters(duration);
 
  if(cm >=1 && cm<=80){
    nota = map(cm,1,80,0,11);
    color =map(cm,1,80,11,0);
    tone(2, melody[nota],250);
   
    analogWrite(redPin, RGB[0][color]);
    analogWrite(greenPin, RGB[1][color]);
    analogWrite(bluePin, RGB[2][color]);
       
    delay(100);
  }else{
    noTone(2);
    analogWrite(redPin, 0);
    analogWrite(greenPin, 0);
    analogWrite(bluePin, 0);
 
  }
   
}  
 
long microsecondsToCentimeters(long microseconds)
{
  return microseconds / 29 / 2;
}
 


Esquema de conexión de componentes electrónicos en Arduino
  • Speaker: Pin 2 ; GND
  • Sensor Ultrasónico: 5v; Echo-Pin 9; Trigger- Pin 8; GND;
  • Led RGB: Red - Resistencia 220 - Pin 10; Green - Resistencia 220 - Pin 11; Blue - Resistencia 220 -
    Pin 12; Cátodo común - GND.
  • Arduino Nano


    Video demo del proyecto


  • Emblems