Arduino Tutorial 3: Marcha Imperial


No tutorial de hoje, iremos aprender um pouco sobre o buzzer (Buzina) do Arduino.


Antes de mais nada, se você já viu algum dos nossos tutoriais antigos sobre Arduino, já sabe que todos os projetos que fazemos neste site pode ser feito mesmo sem uma placa Arduino, para isso, basta acessar o site:
http://123d.circuits.io/
 Depois de se cadastrar neste site vá em New e acesse New Eletronic Lab. Quando carregar a pagina, vá em componentes e adicione um Arduino Uno, uma Breadboard (Você pode utilizar a que ja abre como padrão no programa, mas preferi adicionar a Breadboard Mini já que o projeto é pequeno), e um Buzzer. As conexões dos componentes devem ficar assim:

(O buzzer foi ligado no pino 9 e no GND)

Agora é só embarcar algum código. Primeiramente vamos testar um simples. Existem varias funções do Arduino para o buzzer, a mais simples é o tone e o noTone que ligam e desligam o buzzer respectivamente, dependendo da frequência que for passada. Abaixo há simples projeto para ver estas funções:
/*----------------------------------------
       TurimLab.blogspot.com
----------------------------------------*/
int buzzer = 9; //Numero do pino que o buzzer foi ligado

void setup() {
  pinMode(buzzer,OUTPUT); //O buzzer será definido como saida
}
void loop() {
  //Ligando o buzzer na frequência de 1500 hz.
  tone(buzzer,1500);
  delay(500);
  //Desligando o buzzer.
  noTone(buzzer);
  delay(500);
}
/*----------------------------------------
       TurimLab.blogspot.com
----------------------------------------*/

Simples não é? Você pode fazer o buzzer tocar qualquer tipo de musica, basta criar o código ou implementar um que já está na internet.

Para fazer o buzzer tocar a Marcha Imperial, utilizamos este código: 
int ledPin = 13;
//led for visualization (use 13 for built-in led)

int speakerPin = 9;
//speaker connected to one of the PWM ports
#define c 261
#define d 294
#define e 329
#define f 349
#define g 391
#define gS 415
#define a 440
#define aS 455
#define b 466
#define cH 523
#define cSH 554
#define dH 587
#define dSH 622
#define eH 659
#define fH 698
#define fSH 740
#define gH 784
#define gSH 830
#define aH 880
//frequencies for the tones we're going to use
//used http://home.mit.bme.hu/~bako/tonecalc/tonecalc.htm to get these

void setup()
{
  pinMode(ledPin, OUTPUT);
  // sets the ledPin to be an output
  pinMode(speakerPin, OUTPUT);
  //sets the speakerPin to be an output
}

void loop()    // run over and over again
{
  march();
}

void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)
{
    digitalWrite(ledPin, HIGH);
    //use led to visualize the notes being played

    int x;
    long delayAmount = (long)(1000000/frequencyInHertz);
    long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
    for (x=0;x<loopTime;x++)
    {
        digitalWrite(speakerPin,HIGH);
        delayMicroseconds(delayAmount);
        digitalWrite(speakerPin,LOW);
        delayMicroseconds(delayAmount);
    }

    digitalWrite(ledPin, LOW);
    //set led back to low

    delay(20);
    //a little delay to make all notes sound separate
}

void march()
{
    //for the sheet music see:
    //http://www.musicnotes.com/sheetmusic/mtd.asp?ppn=MN0016254
    //this is just a translation of said sheet music to frequencies / time in ms
    //used 500 ms for a quart note

    beep(speakerPin, a, 500);
    beep(speakerPin, a, 500);
    beep(speakerPin, a, 500);
    beep(speakerPin, f, 350);
    beep(speakerPin, cH, 150);

    beep(speakerPin, a, 500);
    beep(speakerPin, f, 350);
    beep(speakerPin, cH, 150);
    beep(speakerPin, a, 1000);
    //first bit

    beep(speakerPin, eH, 500);
    beep(speakerPin, eH, 500);
    beep(speakerPin, eH, 500);
    beep(speakerPin, fH, 350);
    beep(speakerPin, cH, 150);

    beep(speakerPin, gS, 500);
    beep(speakerPin, f, 350);
    beep(speakerPin, cH, 150);
    beep(speakerPin, a, 1000);
    //second bit...

    beep(speakerPin, aH, 500);
    beep(speakerPin, a, 350);
    beep(speakerPin, a, 150);
    beep(speakerPin, aH, 500);
    beep(speakerPin, gSH, 250);
    beep(speakerPin, gH, 250);

    beep(speakerPin, fSH, 125);
    beep(speakerPin, fH, 125);
    beep(speakerPin, fSH, 250);
    delay(250);
    beep(speakerPin, aS, 250);
    beep(speakerPin, dSH, 500);
    beep(speakerPin, dH, 250);
    beep(speakerPin, cSH, 250);
    //start of the interesting bit

    beep(speakerPin, cH, 125);
    beep(speakerPin, b, 125);
    beep(speakerPin, cH, 250);
    delay(250);
    beep(speakerPin, f, 125);
    beep(speakerPin, gS, 500);
    beep(speakerPin, f, 375);
    beep(speakerPin, a, 125);

    beep(speakerPin, cH, 500);
    beep(speakerPin, a, 375);
    beep(speakerPin, cH, 125);
    beep(speakerPin, eH, 1000);
    //more interesting stuff (this doesn't quite get it right somehow)

    beep(speakerPin, aH, 500);
    beep(speakerPin, a, 350);
    beep(speakerPin, a, 150);
    beep(speakerPin, aH, 500);
    beep(speakerPin, gSH, 250);
    beep(speakerPin, gH, 250);

    beep(speakerPin, fSH, 125);
    beep(speakerPin, fH, 125);
    beep(speakerPin, fSH, 250);
    delay(250);
    beep(speakerPin, aS, 250);
    beep(speakerPin, dSH, 500);
    beep(speakerPin, dH, 250);
    beep(speakerPin, cSH, 250);
    //repeat... repeat

    beep(speakerPin, cH, 125);
    beep(speakerPin, b, 125);
    beep(speakerPin, cH, 250);
    delay(250);
    beep(speakerPin, f, 250);
    beep(speakerPin, gS, 500);
    beep(speakerPin, f, 375);
    beep(speakerPin, cH, 125);

    beep(speakerPin, a, 500);
    beep(speakerPin, f, 375);
    beep(speakerPin, c, 125);
    beep(speakerPin, a, 1000);
    //and we're done \ó/
}
 *Este código não foi escrito por mim, e nem por nenhum membro do Turim Lab*

E este foi o resultado:


0 comentários:

Postar um comentário