- Hardware necessário:
- Compreendendo a função Tone () do Arduino:
- O arquivo de cabeçalho pitches.h :
- Tocando notas musicais no Arduino:
- Esquemático e Hardware:
- Explicação do programa Arduino:
- Funcionamento deste circuito do Arduino do Melody Player:
O Arduino é uma excelente maneira de simplificar e acelerar seus projetos de microcontroladores, graças à sua comunidade de desenvolvedores que fizeram quase tudo parecer simples. Existem muitos projetos Arduino aqui para você experimentar e se divertir. Alguns de seus projetos podem precisar de alguma ação sonora para notificar sobre algo ou apenas para impressionar os visualizadores. E se eu dissesse que quase todas as músicas-tema que podem ser tocadas em um piano podem ser reproduzidas em seu Arduino com a ajuda de um programa simples e um alto-falante Piezo barato?
Neste tutorial, aprenderemos como é simples e fácil tocar melodia no Piezo Buzzer ou Alto-falante usando a função tone () do Arduino. No final deste tutorial, você poderá tocar alguns tons famosos de Piratas do Caribe, Crazy Frog, Super Mario e Titanic. Você também aprenderá a tocar qualquer peça musical de piano com o Arduino. Confira o vídeo no final.
Hardware necessário:
- Arduino (qualquer versão - UNO é usado aqui)
- Alto-falante / campainha piezoelétrico ou qualquer outro alto-falante de 8 ohms.
- Tábua de pão
- Fios de conexão
- Apertar botões
- Resistor de 1k (opcional)
Compreendendo a função Tone () do Arduino:
Antes de entendermos como funciona um tone () , devemos saber como funciona uma campainha Piezo. Podemos ter aprendido sobre os cristais Piezo em nossa escola, nada mais é que um cristal que converte vibrações mecânicas em eletricidade ou vice-versa. Aqui aplicamos uma corrente variável (frequência) para a qual o cristal vibra, produzindo som. Portanto, para fazer com que a campainha Piezo produza algum ruído, temos que fazer o cristal elétrico Piezo vibrar. A altura e o tom do ruído dependem de quão rápido o cristal vibra. Conseqüentemente, o tom e o tom podem ser controlados variando a frequência da corrente.
Ok, então como obtemos uma frequência variável do Arduino ? É aqui que entra a função tone (). O tone () pode gerar uma freqüência particular em um pino específico. A duração do tempo também pode ser mencionada, se necessário. A sintaxe para tom () é
Tom de sintaxe (pino, frequência) tom (pino, frequência, duração) Parâmetros pino: o pino no qual gerar a frequência do tom: a frequência do tom em hertz - duração int sem sinal: a duração do tom em milissegundos (opcional) - sem sinal longo
Os valores de pino podem ser qualquer um de seu pino digital. Usei o pino número 8 aqui. A frequência que pode ser gerada depende do tamanho do temporizador na placa Arduino. Para UNO e a maioria das outras placas comuns, a frequência mínima que pode ser produzida é 31 Hz e a frequência máxima que pode ser produzida é 65535 Hz. No entanto, nós, humanos, podemos ouvir apenas frequências entre 2.000 Hz e 5.000 Hz.
O arquivo de cabeçalho pitches.h :
Agora, sabemos como produzir algum ruído usando a função arduino tone () . Mas, como sabemos que tipo de tom será gerado para cada frequência?
O Arduino nos deu uma tabela de notas que equipara cada frequência a um tipo específico de nota musical. Esta tabela de notas foi originalmente escrita por Brett Hagman, em cujo trabalho o comando tone () foi baseado. Usaremos esta tabela de notas para tocar nossos temas. Se você é familiarizado com partituras, deve ser capaz de entender esta tabela, para outras pessoas como eu, elas são apenas mais um bloco de código.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_DS1 55 #define NOTE_A1 NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTA_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110_Bdefine #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_E3 233 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_522 #define5 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 12456define #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_DS6 12456 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_define # 27define # 2794E7 NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
O código acima é fornecido no arquivo de cabeçalho pitches.h neste arquivo zip , você só precisa fazer o download e incluir este arquivo em nosso código Arduino como fornecido no final deste tutorial ou usar o código fornecido no arquivo zip.
Tocando notas musicais no Arduino:
Para tocar uma melodia decente usando o Arduino, devemos saber o que constitui essas melodias. Os três principais fatores necessários para tocar um tema são
- Valor da nota
- Duração da nota
- Tempo
Temos o arquivo de cabeçalho pitches.h para tocar qualquer valor de nota, agora devemos descobrir a duração específica da nota para tocá-lo. O tempo nada mais é do que a rapidez com que a melodia deve ser tocada. Depois de saber o valor da nota e a duração da nota, você pode usá-los com o tom () como
tom (pinName, valor da nota, duração da nota);
Para os tons tocados neste tutorial, forneci a você o valor da nota e a duração da nota dentro do arquivo de cabeçalho “themes.h”, usando o qual você pode tocá-los em seus projetos. Mas se você tiver algum tom específico em sua mina e quiser reproduzi-lo em seu projeto, continue lendo… Caso contrário, pule este tópico e passe para o próximo.
Para tocar qualquer tom específico, você precisa obter a partitura dessa música em particular e converter a partitura em esboço do Arduino, lendo o valor da nota e a duração da nota. Se você é um estudante de música seria moleza para você, senão passaria algum tempo e quebrar sua cabeça como eu fiz. Mas, no final do dia, quando seu tom tocar na campainha Piezo, você verá que seu esforço vale a pena.
Depois de ter o valor da nota e a duração da nota, carregue-os no programa dentro do arquivo de cabeçalho “themes.h” conforme mostrado abaixo
// ################## ** "ELE É UM PIRATA" Tema dos Piratas do Caribe ** ################# // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_F4, NOTE_C4, NOTE_B3, NOTE_F4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,4,8,4,8,8,8,4,4,8,8}; // ############# End of He é uma música pirata ################ //
O bloco de código acima mostra o valor da nota e a duração da nota do tema “Ele é um pirata” do filme Piratas do Caribe. Você pode adicionar seu tema da mesma forma que este.
Esquemático e Hardware:
O esquema deste projeto do Arduino Tone Generator é mostrado na figura abaixo:
A conexão é bem simples, temos um alto-falante Piezo que é conectado ao pino 8 e ao terra do Arduino através de um resistor de 1K. Este resistor de 1k é um resistor limitador de corrente, que é usado para manter a corrente dentro dos limites seguros. Também temos quatro interruptores para selecionar a melodia necessária. Uma extremidade da chave é conectada ao aterramento e a outra extremidade é conectada aos pinos 2, 3, 4 e 5, respectivamente. Os interruptores terão resistores pull up ativados internamente usando o software. Como o circuito é bastante simples, ele pode ser conectado usando uma placa de pão, conforme mostrado abaixo:
Explicação do programa Arduino:
Depois de entender o conceito, o programa Arduino é bastante simples. O código completo é fornecido no final do tutorial. Se você não está familiarizado com a adição de arquivos de cabeçalho, pode fazer o download do código como um arquivo ZIP aqui e carregá-lo diretamente no seu Arduino.
Os dois acima são os arquivos de cabeçalho que devem ser adicionados. “Pitches.h” é usado para igualar cada nota musical a uma frequência particular e “themes.h” contém o valor da nota e a duração da nota de todos os quatro tons.
#include "pitches.h" #include "themes.h"
Uma função é criada para tocar cada tom quando necessário. Aqui, quando a função Play_Pirates () é chamada, o tom “Ele é um pirata” será reproduzido. Esta função consiste na função de tom que produz a frequência no pino número 8. O noTone (8) é chamado para interromper a música depois de tocada. Se você quiser tocar seu próprio tom, altere o Pirates_note e Pirates_duration para os novos valores de nota e duração que você salvou no valor “themes.h”
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // converter duração em tom de atraso de tempo (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1,05; // Aqui 1.05 é o tempo, aumente para reproduzi-lo mais lento delay (pauseBetweenNotes); noTone (8); }}
Os pinos 2, 3, 4 e 5 são usados para selecionar o tom específico a ser tocado. Esses pinos são mantidos altos por padrão usando os resistores pull up internos usando a linha de código acima. Quando o botão é pressionado, ele é puxado para baixo até o solo.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
O bloco de código abaixo é usado para reproduzir a música quando um botão é pressionado. Lê o valor digital de cada botão e quando fica baixo (zero) assume que o botão está pressionado e emite o respectivo tom chamando a função desejada.
if (digitalRead (2) == 0) {Serial.println ("Selecionado -> 'Ele é um pirata'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Selecionado -> 'Crazy Frog'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Selecionado -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Selecionado -> 'Ele é um pirata'"); Play_Pirates (); }
Funcionamento deste circuito do Arduino do Melody Player:
Assim que seu código e hardware estiverem prontos, basta gravar o programa em seu Arduino e você poderá reproduzir o tom simplesmente pressionando os botões. Se você tiver qualquer problema, dê uma olhada em seu monitor serial para depuração ou use a seção de comentários para relatar o problema e eu ficarei feliz em ajudá-lo.
O funcionamento completo do projeto é mostrado no vídeo abaixo. Espero que você tenha gostado do projeto e possa usá-lo em alguns de seus projetos ou criar um novo tom para seu projeto. Se sim, sinta-se à vontade para compartilhar seu trabalho na seção de comentários.