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.
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
Bom dia! No código, por qual razão foi criado char* [] e não apenas char [] para as notas de cada musica?
Bom dia! Isso foi feito, pois as notas, no código, são compostas por mais de 1 caractere (normalmente 2, como o “La”). E o char[] cria um vetor de char, ou seja, cada posição do vetor é capaz de armazenar apenas um caractere, o que não atende o que estamos fazendo. Com o vetor char*[] (que é um vetor de ponteiro), é possível criar um vetor de strings (mais de 1 caractere por posição). Daria para utilizar o vetor char[] se substituíssemos a lógica da função tocar() para reconhecer notas de apenas um caractere. Por exemplo: a nota “la” seria na verdade apenas ‘L’ (algo nesse sentido).
boa noite, falo do japão
Boa noite, Henrique. Oh, bacana demais! Grande abraço.
Neste caso, você utilizou um buzzer com oscilador interno, correto?
Aliás, ótimo projeto.
Obrigado! Se não me engano, utilizei um buzzer com oscilador interno mesmo. Seria interessante fazer um com um buzzer passivo para ver se daria muita diferença no som reproduzido.
porque sim e eu quero
meu parça
Isso aí que ela disse.
Você poderia me mandar a programação completa por favor?
Não entendi seu pedido, Thaina. A qual programação completa você se refere?
pagando bem, que mal tem, né?
😀
erro Compilation error: expected initializer before ‘int’
oq eu faço
Difícil saber só por essa mensagem, mas parece ter um erro de formato de escrita em alguma parte do seu código. Se quiser, manda o código pra eu dar uma olhada. Ou então manda o código pro chat-gpt que ele também deve ser capaz de falar onde tá o erro.
adorei!!
Que ótimo, Naju. Obrigado pelo comentário!
Vou usar isso para um trabalho escolar, genial!
Usa mesmo! É um projetinho bem legal e simples de montar.
Felipe, MUITO BOM esse seu sketch!! Iniciei esses dias com o assunto Arduino e linguagem de programação. Estou estudando. Eu achei melhor eu começar com o Arduino Uno. Por favor, estou com uma dúvida: O seu sketch “rodou” muito bem e ficou ótimo, mas eu não estou conseguindo deixar que ele foque tocando sem parar. O seu sketch toca apenas uma vez. Muito obrigado.
Olá, Carlos. Te respondi pelo YouTube. Então dá uma olhada lá.
Boa noite
Esse bancada branca que usou para colcoar o auto-falante, qual sera ele ? ou pode ser um material comum que podemos usar ?
Outra coisa
QUal seria a frequencia maxima que o auto-falante consegue emitir nesse seu projeto ?
Olá, Luan. É uma protoboard. Aqui no site tem até um post ensinando a usar ela. Sobre a frequência máxima eu não sei dizer ao certo, mas deve ser uns 10 kHz.