Het doel van dit project is het genereren van muziek via beweging dankzij versnellingsmeters.
-1 3-assige versnellingsmeter
-1 kaart van de arduino
-1 luidspreker
-1 nummer kunnen uitdaging het crap-geluid van de spreker
De code is eenvoudig: het ritme van het nummer wordt uitgevoerd en voor elke stap van de tijd, de handschoen zintuigen van de richting van de zwaartekracht en kiest voor één van de drie noten van het liedje.
De code is hieronder.
U kunt kijken naar de video op Youtube.
Lees nieuws en updates op mijn pagina. Momenteel ben ik het verzamelen van fondsen tegen kanker, Doneer alstublieft!
/*
28 december 2012 - Sebastien RUBRECHT
Probeert af te spelen van een coole muziek met een crap speaker, in de hoop dat de "cool" het "onzin" zal compenseren.
De muziek is "waar is mijn geest" van The Pixies, die is echt makkelijk te spelen.
*/
#define AUTO 0 / / automatische modus: als dit 1 is, de muziek automatisch wordt afgespeeld.
Pinnen
Const int analogInPinX = 0; Analoge invoer pin die de versnellingsmeter de eerste pin aan is gekoppeld
Const int analogInPinY = 1; Analoge invoer pin die tweede pin van de versnellingsmeter is aangesloten op
Const int analogInPinZ = 2; Analoge invoer pin die derde pin van de versnellingsmeter is aangesloten op
Const int tone1Pin = 9; Toon uitgangssignaal
Const int highPin1 = 11; 5 V alimentation
Const int highPin2 = 12; 5 V alimentation
Const int lowPin1 = 5; grond voor een van de 2 versnellingsmeter gnd.
Const int lowPin2 = 6; grond voor een van de 2 versnellingsmeter gnd.
Const int ledOKPinGnd = 8; grond voor OK Pin
Const int ledOKPinH = 10; 5 V alimentation voor OK Pin
Const int ledNOKPinGnd = 2; grond voor NOK Pin
Const int ledNOKPinH = 4; 5 V alimentation voor NOK Pin
constante waarden
Const float freq_rediese0 = 38.9;//frequency van een scherpe Re in Hz, voor oktaaf 0
Const float freq_mi0 = 41.2;//frequency voor een Mi in Hz, voor oktaaf 0
Const float freq_soldiese0 = 51.9;//frequency voor een scherpe Sol in Hz, voor oktaaf 0
constante gebruiker gedefinieerde parameters
Const int octave = 4; //octave nummer. Wees voorzichtig, onder 2(low) en boven 6 (acute), krijgt het erg lelijk
Const int temps = 380; //number van milliseconden voor 1 muzikale noot. 380 is het echte ritme, maar begin met 600 is makkelijker om te leren
variabelen
zweven freq_rediese = freq_rediese0 * pow (oktaaf 2); frequentie van een scherpe Re in Hz, voor het ingehouden octaaf
zweven freq_mi = freq_mi0 * pow (2, oktaaf); //frequency voor een Mi in Hz, voor de ingehouden octaaf
zweven freq_soldiese = freq_soldiese0 * pow (2, oktaaf); //frequency van een scherpe Sol in Hz, voor de ingehouden octaaf
int noire; //time van een notitie kwartnoot
int croche; //temps van een golvende-notitie
float frequentie; //frequency gespeeld
int sensorValue1; waarde gelezen van de versnellingsmeter van eerste pin
int sensorValue2; waarde gelezen van de versnellingsmeter van tweede pin
int sensorValue3; waarde gelezen van de versnellingsmeter van tweede pin
VOID Setup {}
pinMode (tone1Pin, OUTPUT);
pinMode (highPin1, OUTPUT);
pinMode (highPin2, OUTPUT);
pinMode (lowPin1, OUTPUT);
pinMode (lowPin2, OUTPUT);
pinMode (ledOKPinGnd, OUTPUT);
pinMode (ledOKPinH, OUTPUT);
pinMode (ledNOKPinGnd, OUTPUT);
pinMode (ledNOKPinH, OUTPUT);
digitalWrite (lowPin1, laag);
digitalWrite (lowPin2, laag);
digitalWrite (highPin1, hoge);
digitalWrite (highPin2, hoge);
digitalWrite (ledOKPinGnd, laag);
digitalWrite (ledNOKPinGnd, laag);
}
void loop {}
Noire = temps;
Croche = temps/2;
"waar is mijn geest" is 4 * (1 mi + 1sol #); 2 * (1re # + 1sol #); 2 * (1 mi + 1/2 mi + 1 / 2re #).
for (int j = 0; j < 4; j ++) //4 * (1 mi + 1sol #)
{
frequentie = acqNote(freq_mi); de richting van de hogere versnelling krijgt van de sensor en geeft als resultaat de assofrequency. De theoretische goeie is een Mi.
Opmerking (frequentie, noire); / / speelt de frequentie keerde terug op de vorige regel 1 "noire" periode.
frequentie = acqNote(freq_soldiese);
Opmerking (frequentie, noire);
}
for (int j = 0; j < 2; j ++) //2 * (1re # + 1sol #);
{
frequentie = acqNote(freq_rediese);
Opmerking (frequentie, noire);
frequentie = acqNote(freq_soldiese);
Opmerking (frequentie, noire);
}
for (int j = 0; j < 2; j ++) / / 2 * (1 mi + 1/2 mi + 1 / 2re #)
{
frequentie = acqNote(freq_mi);
Opmerking (frequentie, noire);
frequentie = acqNote(freq_mi);
Opmerking (frequentie, croche);
frequentie = acqNote(freq_rediese);
Opmerking (frequentie, croche);
}
}
VOID opmerking (zweven freq, int duur)
{
De functie "note" speelt een notitie bij frequentie "freq" (Hz) tijdens "duur" (ms)
conversie van de frequentie in een semi-periode
dubbele semiperiod_micros =1/(double(freq)) * 1000000 * 0,5;
lange duree=long(duration);
niet-ondertekende lang een = millis();
terwijl (millis() < (a + duree))
{
digitalWrite (tone1Pin, hoge);
delayMicroseconds(int(semiperiod_micros));
digitalWrite (tone1Pin, laag);
delayMicroseconds(int(semiperiod_micros));
}
Om te scheiden van de toelichting (het klinkt beter), kleine vertragingen.
Als (duur > 300)
{delay(15);}
anders
{delay(7);}
}
zweven acqNote(float freq_ref) {}
"acqNote" krijgt de versnelling in de 3 richtingen van de sensor, selecteert u de hoogste en geeft als resultaat de bijbehorende frequentie.
Als de id overeenkomt met de theoretische goede frequentie "freq_ref", er wordt overgeschakeld op de groene led, anders de rode led.
float freq;
de beide analoge input waarden luidt als volgt:
sensorValue1 = analogRead(analogInPinX);
sensorValue2 = analogRead(analogInPinY);
sensorValue3 = analogRead(analogInPinZ);
Deze eigenschap retourneert de index van de max van 3 waarden
Als ((max(max(sensorValue1,sensorValue2),sensorValue3))==sensorValue1) {}
freq = freq_rediese;
}
anders als ((max(max(sensorValue1,sensorValue2),sensorValue3))==sensorValue2) {}
freq = freq_mi;
}
else {}
freq = freq_soldiese;
}
overgeschakeld op de groene led als de frequentie gevonden is de theoretische goeie, anders rode.
Als (freq == freq_ref) {}
digitalWrite(ledOKPinH,HIGH);
digitalWrite(ledNOKPinH,LOW);
}
else {}
digitalWrite(ledOKPinH,LOW);
digitalWrite(ledNOKPinH,HIGH);
}
Als (AUTO) {}
Return freq_ref;
}
else {}
retourneren freq;
}
};