Stap 8:.: muziek:. -(Pieze-Element) - CIRC06
Wat We doen:
Op dit punt hebben we gecontroleerde licht, beweging en elektronen, laat pakken geluid vervolgens. Maar gezond is een analoge verschijnselen, hoe zal onze digitale Arduino omgaan? We zullen eens te meer vertrouwen op de ongelooflijke snelheid waarmee het analoge-gedrag wordt nagebootst. Om dit te doen, zullen wij een piëzo-element hechten aan één van de digitale pinnen van de Arduino. Een piëzo-element maakt een klikken geluid elke keer dat het is gepulseerde met huidige. Als we het op de juiste frequentie pulse (bijvoorbeeld 440 keer een tweede om de opmerking midden A) deze klikken zal stormloop tezamen om te produceren van notities. Laat krijgen om te experimenteren met het en je Arduino spelen 'Twinkle Twinkle Little Star'.
(u kunt ook de fiche breadboard lay-out van de onderkant van deze stap)
De delen:
- CIRC-06 Breadboard blad
- 2 pin Header (x4)
- Piëzo-Element (x1)
- Draad
Het Circuit en alles inpluggen In:
Een kleine Video van alles wordt aangesloten
De Code: - bestand > Sketchbook > voorbeelden > digitale > melodie
/* Melody * (cleft) 2005 D. Cuartielles for K3 * * This example uses a piezo speaker to play melodies. It sends * a square wave of the appropriate frequency to the piezo, * generating the corresponding tone. * * The calculation of the tones is made following the * mathematical operation: * * timeHigh = period / 2 = 1 / (2 * toneFrequency) * * where the different tones are described as in the table: * * note frequency period timeHigh * c 261 Hz 3830 1915 * d 294 Hz 3400 1700 * e 329 Hz 3038 1519 * f 349 Hz 2864 1432 * g 392 Hz 2550 1275 * a 440 Hz 2272 1136 * b 493 Hz 2028 1014 * C 523 Hz 1912 956 * * http://www.arduino.cc/en/Tutorial/Melody */ int speakerPin = 9;int length = 15; // the number of noteschar notes[] = "ccggaagffeeddc "; // a space represents a restint beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };int tempo = 300;void playTone(int tone, int duration) { for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(speakerPin, HIGH); delayMicroseconds(tone); digitalWrite(speakerPin, LOW); delayMicroseconds(tone); }}void playNote(char note, int duration) { char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; // play the tone corresponding to the note name for (int i = 0; i < 8; i++) { if (names[i] == note) { playTone(tones[i], duration); } }}void setup() { pinMode(speakerPin, OUTPUT);}void loop() { for (int i = 0; i < length; i++) { if (notes[i] == ' ') { delay(beats[i] * tempo); // rest } else { playNote(notes[i], beats[i] * tempo); } // pause between notes delay(tempo / 2); }}
Niet werkt?
- Er klinkt geen geluid - gegeven de grootte en vorm van het piezo element is het gemakkelijk om de juiste gaten op het breadboard te missen. Probeer dubbele controle van de plaatsing.
- Can't denken terwijl de melodie is Playing. -Gewoon trek omhoog het piëzo-element terwijl u denken, uw programma uploaden dan steek de stekker terug in.
- Moe van Twinkle Twinkle Little Star? -Als de code is geschreven, zodat u gemakkelijk uw eigen liedjes, Controleer de code hieronder kunt om te beginnen.
Waardoor het beter:
Spelen met de snelheid:
De timing voor elke noot is berekend op basis van variabelen, zoals we het geluid van elke noot of de timing kunt aanpassen. De snelheid van de melodie die u wilt wijzigen voor slechts één regel wijzigen.
int tempo = 300; ---> int tempo = (new #)
Verandering het in een groter getal te vertragen van de melodie of een kleiner aantal te versnellen.
Het afstemmen van de toelichting:
Als u zich zorgen maakt over de notities wordt een beetje uit van tune kan dit ook worden vastgesteld. De toelichting hebben zijn berekend op basis van een formule in de opmerkingenblok aan de bovenkant van het programma. Maar om af te stemmen individuele nota's net pas hun waarden in de matrix van de [] tonen omhoog of omlaag totdat ze goed recht. (elke noot wordt geëvenaard door de naam in de [namen] (dwz array. c = 1915)
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
Het samenstellen van uw eigen melodieën:
Het programma is vooraf ingesteld om te spelen 'Twinkle Twinkle Little Star' echter de manier waarop het geprogrammeerde maakt het liedje gemakkelijk wijzigen. Elk nummer is gedefinieerd in een int en twee arrays, de int lengte definieert het aantal notities, de eerste matrix notities [] definieert elke noot en de tweede beats [] definieert hoe lang elke noot wordt gespeeld. Enkele voorbeelden:
Twinkle Twinkle Little Star
int length = 15; char notes[] = "ccggaagffeeddc "; int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
Happy Birthday (eerste lijn)
int length = 13; char notes[] = "ccdcfeccdcgf "; int beats[] = {1,1,1,1,1,2,1,1,1,1,1,2,4};