Quem nunca teve vontade de tocar as músicas favoritas? Mas quando você não sabe tocar nenhum instrumento fica complicado. Porém, isso não é mais um problema, porque você pode tocar suas músicas preferidas usando o Arduino com um buzzer ou um alto falante. É muito fácil e rápido.

Se você não tem um buzzer, dá pra testar na plataforma do Tinkercad, então deixa de preguiça e testa, porque esse projeto é bem rápido e legal. E caso você também queira aprender um pouco sobre o funcionamento do buzzer e como usar ele com o Arduino, confira o post sobre.


Circuito

O circuito é bem simples, basta ligar o positivo do buzzer em um resistor, ligar a outra ponta do resistor em um dos pinos digitais do Arduino. Por fim, ligar o negativo do buzzer no GND. O resistor pode ser de 100Ω (não tem valor exato). A imagem abaixo ilustra a ligação. O circuito do alto falante é o mesmo.

buzzer arduino


Programação

Desenvolvi um código que simplifica e facilita bastante o processo de tocar uma música.

Como usar o código

O que você precisa fazer é colocar as notas, em ordem, da musica que você deseja tocar na variável musica que fica no início do programa. E, no fim da variável, escrever “Fim”. As notas disponíveis são: Do, Re, Mi, Fa, Sol, La, Si, Do#, Re#, Fa#, Sol# e La#. Não use acentos para escrever as notas e escreva a primeira letra maiúscula e a segunda minuscula. E caso exista uma pausa entre as notas, basta escrever “Pausa”. Exemplo: se minha música possui as notas Dó, Ré#, Mi, uma pausa e a nota Fa nessa ordem, eu devo escrever:

char* musica[] = {“Do”,”Re#”,”Mi”, “Pausa”, “Fa”, “Fim”};

Logo depois defina, também em ordem, o tempo – em ms – de cada nota e da pausa na variável duracao. O tempo segue a ordem respectiva da variável música: o primeiro numero é a duração da primeira nota, o segundo nº da segunda nota e por aí vai. E o tempo também define a duração da pausa. Pegando o mesmo exemplo anterior, a variável poderia ficar assim:

int duracao[] = {200, 300, 400, 100, 300};

Observe que a pausa foi de 100ms. Feito isso, resta apenas configurar o pino do buzzer:

char buz = 2;

Agora é só criar sua melodia e fazer o teste. Se você quiser ouvir a marcha imperial que tem na programação, comente a linha “tocar(musica,duracao);”  e descomente a linha “tocar(starwars,dur);”.

Código

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
  Desenvolvido pelo site MundoProjetado
  Código que toca música
  Basta colocar as notas da musica em ordem na variável 'musica' abaixo
  No fim das notas escreva "Fim"
  Não use acentos e escreva a primeira letra maiuscula e a segunda minuscula
  Logo depois defina, tambem, em ordem, o tempo de cada nota
  NOTAS DISPONÍVEIS:
  Do, Re, Mi, Fa, Sol, La, Si, Do#, Re#, Fa#, Sol#, La#
*/


char buz = 2;
char* musica[] = {"La","Re","Fa","Sol","La","Re", "Fa", "Sol", "Mi", "Pausa", "Sol", "Do", "Fa", "Mi", "Sol", "Do", "Fa", "Mi", "Re", "Fim"}; //Game of Thrones
int duracao[] = {700, 500, 300, 250, 250, 300, 200, 200, 700, 200, 500, 500, 200, 200, 200, 500, 200, 200, 500};
char* starwars[] = {"La","Pausa","La","Pausa","La","Pausa","Fa","Do","La","Pausa","Fa","Do","La","Pausa","Mi","Pausa","Mi","Pausa","Mi","Pausa","Fa","Do","Sol","Pausa","Fa","Do","La","Pausa","La","Pausa","La","Pausa","La","Pausa","La","Pausa","Sol#","Pausa","Sol","Fa#","Fa","Fa#","Fim"}; //Marcha Imperial
int dur[] = {400, 100, 400, 100, 400, 100, 300, 200, 300, 100, 300, 200, 300, 200, 400, 100, 400, 100, 400, 100, 300, 300, 200, 100 , 300, 300, 200, 200, 400, 50, 400, 50, 400, 50, 400, 50, 300, 50, 300, 200, 200, 200};

void setup(){
  pinMode(buz, OUTPUT);
  tocar(musica,duracao);
  //tocar(starwars,dur);
}

void loop(){
  // Não utilizado
}

void tocar(char* mus[], int tempo[]){
  int tom = 0;
  for(int i = 0; mus[i]!="Fim";i++){
    if(mus[i] == "Do") tom = 262;
    if(mus[i] == "Re") tom = 294;
    if(mus[i] == "Mi") tom = 330;
    if(mus[i] == "Fa") tom = 349;
    if(mus[i] == "Sol") tom = 392;
    if(mus[i] == "La") tom = 440;
    if(mus[i] == "Si") tom = 494;
    if(mus[i] == "Do#") tom = 528;
    if(mus[i] == "Re#") tom = 622;
    if(mus[i] == "Fa#") tom = 370;
    if(mus[i] == "Sol#") tom = 415;
    if(mus[i] == "La#") tom = 466;
    if(mus[i] == "Pausa") tom = 0;
    tone(buz, tom, tempo[i]);
    delay(tempo[i]);
  }
}

Buzzer – Como usar com o Arduino