El objetivo de este proyecto es generar música a través de movimiento gracias a los acelerómetros.
-Acelerómetro de 3 ejes 1
-1 tarjeta de arduino
-1 altavoz
-capaz de desafiar el sonido de la mierda del altavoz a 1 canciones
El código es básico: se aplica al ritmo de la canción y antes de cada paso de tiempo, el guante detecta la dirección de la gravedad y elige una de las tres notas de la canción.
El código está a continuación.
Se puede ver el video en Youtube.
Recibir noticias y actualizaciones en mi página. Actualmente estoy recaudando fondos contra el cáncer, por favor done!
/*
28 de diciembre de 2012 - Sebastien RUBRECHT
Intente reproducir una música con un altavoz de mierda, con la esperanza de que "cool" compensará "la basura".
La música es "Dónde está mi mente" de los duendecillos, que es realmente fácil de jugar.
*/
#define AUTO 0 / automática / modo: Si 1, la música se reproduce automáticamente.
Pernos de
const int analogInPinX = 0; Clavija de entrada analógica pin primera de acelerómetro acoplado al
const int analogInPinY = 1; Clavija de entrada analógica de segundo pasador de acelerómetro acoplado al
const int analogInPinZ = 2; Clavija de entrada analógica tercer pin de acelerómetro acoplado al
const int tone1Pin = 9; señal de salida de tono
const int highPin1 = 11; Alimentación V 5
const int highPin2 = 12; Alimentación V 5
const int lowPin1 = 5; para uno de la tierra 2 acelerómetro.
const int lowPin2 = 6; para uno de la tierra 2 acelerómetro.
const int ledOKPinGnd = 8; para aceptar el perno de tierra
const int ledOKPinH = 10; 5 Alimentación V PIN OK
const int ledNOKPinGnd = 2; para NOK Pin
const int ledNOKPinH = 4; 5 Alimentación V PIN NOK
valores constantes
const float freq_rediese0 = 38.9;//frequency de un Re agudo en Hz, para la octava 0
const float freq_mi0 = 41.2;//frequency de Mi en Hz, para la octava 0
const float freq_soldiese0 = 51.9;//frequency de un Sol sostenido en Hz, para la octava 0
parámetros definidos por el usuario constante
const int octava = 4; número de //octave. Ten cuidado, debajo de 2(low) y por encima de 6 (aguda), se pone muy feo
const int temps = 380; //number de milisegundos para 1 nota musical. 380 es el ritmo real, pero comenzando con 600 es más fácil de aprender
variables
Float freq_rediese = freq_rediese0 * pow (2, octava); frecuencia de un Re agudo en Hz, para la octava retenida
Float freq_mi = freq_mi0 * pow (2, octava); //frequency de Mi en Hz, para la octava retenida
Float freq_soldiese = freq_soldiese0 * pow (2, octava); //frequency de un Sol sostenido en Hz, para la octava retenida
int noire; //time de una nota negra
croche int; //temps de una nota de corchea
frecuencia del flotador; //frequency jugado
int sensorValue1; valor leído de pin primera de acelerómetro
int sensorValue2; valor leído desde el segundo pasador de acelerómetro
int sensorValue3; valor leído desde el segundo pasador de acelerómetro
void setup() {}
pinMode (tone1Pin, salida);
pinMode (highPin1, salida);
pinMode (highPin2, salida);
pinMode (lowPin1, salida);
pinMode (lowPin2, salida);
pinMode (ledOKPinGnd, salida);
pinMode (ledOKPinH, salida);
pinMode (ledNOKPinGnd, salida);
pinMode (ledNOKPinH, salida);
digitalWrite (lowPin1, bajo);
digitalWrite (lowPin2, bajo);
digitalWrite (highPin1, HIGH);
digitalWrite (highPin2, HIGH);
digitalWrite (ledOKPinGnd, bajo);
digitalWrite (ledNOKPinGnd, bajo);
}
void loop() {}
Noire = temps;
Croche = temps/2;
Dónde está mi mente"es 4 * (1 mi + 1sol #); 2 * (1re # + 1sol #); 2 * (mi 1 + 1/2 mi + 1 / 2re #).
para (int j = 0; j < 4; j ++) //4 * (1 mi + 1sol #)
{
frecuencia = acqNote(freq_mi); Obtiene la dirección de la aceleración más alta del sensor y devuelve el assofrequency. La teórica buena es a Mi.
Nota (frecuencia, noire); / / reproduce la frecuencia volvió a la línea anterior durante 1 hora "noire".
frecuencia = acqNote(freq_soldiese);
Nota (frecuencia, noire);
}
para (int j = 0; j < 2; j ++) //2 * (1re # + 1sol #);
{
frecuencia = acqNote(freq_rediese);
Nota (frecuencia, noire);
frecuencia = acqNote(freq_soldiese);
Nota (frecuencia, noire);
}
para (int j = 0; j < 2; j ++) / / 2 * (mi 1 + 1/2 mi + 1 / 2re #)
{
frecuencia = acqNote(freq_mi);
Nota (frecuencia, noire);
frecuencia = acqNote(freq_mi);
Nota (frecuencia, croche);
frecuencia = acqNote(freq_rediese);
Nota (frecuencia, croche);
}
}
Nota nula (freq, del flotador duración int)
{
La función de "Nota" juega una nota con frecuencia "freq" (Hz) "durante" (ms)
conversión de la frecuencia en un período de semi
doble semiperiod_micros =1/(double(freq)) * 1000000 * 0,5;
largo duree=long(duration);
sin firmar largo un = millis();
mientras que (millis() < (a + donde))
{
digitalWrite (tone1Pin, HIGH);
delayMicroseconds(int(semiperiod_micros));
digitalWrite (tone1Pin, bajo);
delayMicroseconds(int(semiperiod_micros));
}
Para separar las notas (suena mejor), pequeños retrasos.
Si (duración > 300)
{delay(15);}
otra cosa
{delay(7);}
}
Float acqNote(float freq_ref) {}
"acqNote" obtiene la aceleración en las 3 direcciones del sensor, selecciona el más alto y devuelve la frecuencia asociada.
Si coincide con la teórica buena frecuencia "freq_ref", enciende el verde, otro rojo led.
freq del flotador;
Lee los ambos valores de entrada analógicos:
sensorValue1 = analogRead(analogInPinX);
sensorValue2 = analogRead(analogInPinY);
sensorValue3 = analogRead(analogInPinZ);
Devuelve el índice del máximo de 3 valores
Si ((max(max(sensorValue1,sensorValue2),sensorValue3))==sensorValue1) {}
Freq = freq_rediese;
}
else if ((max(max(sensorValue1,sensorValue2),sensorValue3))==sensorValue2) {}
Freq = freq_mi;
}
Else {}
Freq = freq_soldiese;
}
el verde se enciende led si la frecuencia es la teórica buena, otra cosa el rojo se.
Si (freq == freq_ref) {}
digitalWrite(ledOKPinH,HIGH);
digitalWrite(ledNOKPinH,LOW);
}
Else {}
digitalWrite(ledOKPinH,LOW);
digitalWrite(ledNOKPinH,HIGH);
}
Si {} (AUTO)
volver freq_ref;
}
Else {}
volver freq;
}
};