Projeto 34 - Como gerar melodias através de um sonorizador piezoelétrico

Básico - Projeto 34

Criar melodia utilizando um buzzer ou um disco piezoelétrico

Objetivo

Neste projeto vamos criar um circuito e um programa no IDE do Arduino para gerar melodias através sonorizador piezoelétrico, que pode ser um disco piezoelétrico ou um buzzer. Neste exemplo vamos fazer com que o seu Arduino toque o refrão da música “Puff, o Dragão Mágico” (no original, “Puff, the Magic Dragon”).

Definições

Disco Piezoelétrico: Um disco piezo funciona quando uma corrente elétrica passa pelo material cerâmico do disco, fazendo com que ele mude de forma e produza um som. O disco também funciona de forma inversa: quando se bate nele ou ele sofre algum tipo de pressão, a força no material provoca a geração de uma corrente elétrica. Para saber mais, leia: https://pt.wikipedia.org/wiki/Piezoeletricidade e Transdutor Piezoelétrico.

https://www.vidadesilicio.com.br/media/catalog/product/cache/2/thumbnail/450x450/9df78eab33525d08d6e5fb8d27136e95/v/k/vktech_12pcs_27mm_piezo_discs_with_leads_mic_drum_trigger_acoustic_pickup_cbg_guitar.jpg

Buzzer: Nada mais é do que um transdutor piezoelétrico encapsulado.

 

Obs.: O buzzer e o disco são sonorizadores piezoelétricos. Quando se aplica um sinal elétrico e um determinada frequência, o dispositivo piezoelétrico produz uma nota musical. As notas variam de acordo com a frequência utilizada. (O ouvido humano pode ouvir sons nas frequências entre 20 e 20.000 Hz).

Aplicação

Para fins didáticos e criação de sons com arduino.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 830 pontos

Jumpers Kit cabos ligação macho / macho 1  
Buzzer

Buzzer ativo 5V 12mm

1 Utilize um buzzer ou um disco piezoelétrico
Transdutor Piezoelétrico

Disco Piezoelétrico 27mm com fios

1 https://www.vidadesilicio.com.br/media/catalog/product/cache/2/thumbnail/450x450/9df78eab33525d08d6e5fb8d27136e95/v/k/vktech_12pcs_27mm_piezo_discs_with_leads_mic_drum_trigger_acoustic_pickup_cbg_guitar.jpg Utilize um buzzer ou um disco piezoelétrico 
Arduino UNO R3 Arduino UNO 1 Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito. Neste projeto você poderá utilizar um buzzer ou um disco piezoelétrico na montagem do circuito. Se possível, teste com os dois componentes.


Atenção

1. O buzzer tem polaridade. Portando, cuidado para não ligar o buzzer invertido. Se você retirar o adesivo superior do buzzzer poderá ver um sinal de positivo (+). Este sinal mostra onde está o pino positivo do componente que deverá estar conectado à uma porta digital do Arduino e o polo negativo ao GND.

2. Assim como o buzzer, o disco piezoelétrico também tem polaridade. O fio positivo deve estar conectado na camada de cerâmica piezoelétrica e deverá ser conectado à um porta digital do Arduino.

3) A montagem abaixo foi realizada em um protoboard com linhas de alimentação não contínuas, onde acrescentamos jampers para a ligação. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas.

Observação: No exemplo acima, utilizamos um disco piezoelétrico. Você poderá substituir o disco piezoelétrico por um buzzer para ter um efeito semelhante. O cabo vermelho (positivo) deverá estar conectado ao pino digital 4 do Arduino e o cabo preto (negativo) conectado ao GND (ground).

Código do Projeto (Sketch)

Faça o dowload e abra o arquivo projeto34.ino no IDE do Arduino: DOWNLOAD - projeto34.ino

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    Projeto 34 – Tocar melodia com um disco piezoelétrico
*                   http://squids.com.br/arduino
*
*******************************************************************************/
 
#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_AS3 233
#define NOTE_B3 247
#define 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 WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.125
#define SIXTEENTH 0.0625

int tune[] = { NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_B3, NOTE_G3, NOTE_A3,
NOTE_C4, NOTE_C4, NOTE_G3, NOTE_G3, NOTE_F3, NOTE_F3, NOTE_G3, NOTE_F3, NOTE_E3, NOTE_G3,
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_A3, NOTE_B3, NOTE_C4, NOTE_D4};

float duration[] = { EIGHTH, QUARTER+EIGHTH, SIXTEENTH, QUARTER, QUARTER, HALF, HALF,
HALF, QUARTER, QUARTER, HALF+QUARTER, QUARTER, QUARTER, QUARTER, QUARTER+EIGHTH, EIGHTH,
QUARTER, QUARTER, QUARTER, EIGHTH, EIGHTH, QUARTER, QUARTER, QUARTER, QUARTER,
HALF+QUARTER};

int comprimento;

void setup() {
pinMode(4, OUTPUT);
comprimento = sizeof(tune) / sizeof(tune[0]);
}

void loop() {
for (int x=0; x<comprimento; x++) {
tone(4, tune[x]);
delay(1500 * duration[x]);
noTone(4);
}
delay(3000);
}

Depois, faça a verificação e o upload para o microcontrolador.

Vídeo

Como o projeto deve funcionar

1. Quando você inicia o programa, o sonorizador piezoelétrico irá tocar notas musicais definidas no sketch.

2. Após finalização da melodia, o programa espera 3s para ser reiniciado.

Gerar sons em um dispositivo piezoelétrico

1. Para gerar sons em um dispositivo piezoelétrico, buzzer ou disco, utilizamos a função tone(pin, frequência, duração), onde:

. É gerada uma onda quadrada de cerca de 50% no pino especificado como pin;

. A frequência é dada em hertz (Hz);

. A duração é dada em milisegundos (ms);

. Apenas um tom pode ser gerado por vez.

1.2. Para interromper o som, ou seja, interromper a geração da onda no pino especificado, podemos utilizar a função noTone(pin).

Explicando o Código do Projeto

 1. Primeiro definimos e declaramos as constantes e as variáveis do projeto.

1.1. Observe que utilizamos as constantes e variáveis tipo "int" e "float". Veja na tabela abaixo as diferenças nos tipos de constantes e variáveis:

Tipo Valores Válidos para Variáveis e Constantes
char letras e símbolos: 'a', 'b', 'H', '^', '*','1','0'
int de -32767 até 32767 (apenas números inteiros)
float de -3.4 x 1038 até +3.4 x 10+38com até 6 dígitos de precisão (2 casas depois da vírgula)
double de -1.7 x 10308 até +1.7 x 10+308com até 10 dígitos de precisão

1.2. Através da diretiva #define, definimos todas as notas musicais que serão utilizadas na melodia.  Para conhecer as principais notas musicais que você poderá utilizar nos seus projetos, acesse: Tabela Notas Musicais.

 

1.2.1. Uma diretiva #define define um valor e seu token correspondente. Por exemplo: #define PI 3.141592653589793238. Isso permitirá que você substitua PI em qualquer cálculo, em vez de ter de digitar pi com várias casas decimais toda vez. (Não utilize ponto e vírgula no final de uma diretiva #define).

 

1.2.2. Neste projeto criamos um conjunto de várias diretivas #define, em que os tokens são as notas de C3 a B41 e seus valores referentes às frequências necessárias para gerar o som. A primeira nota definida, C3 tem frequência correspondente 131 Hz. 

1.2.2.1. Nem todas as notas definidas são utilizadas em sua melodia, mas foram incluídas, caso você queira criar uma nova música - para as principais notas musicais acesse a Tabela Notas Musicais.

 

Observação: As letras A, B, C, D, E, F e G são utilizadas para as notas lá, si, dó, ré, mi, fá e sol, respectivamente (fonte: Wikipédia). Por exemplo, C4, frequência de 262 Hz, é o C médio na escala musical.

 

1.3. Definimos também através da derivativa #define os tempos (ou durações das notas). As notas podem ter duração de um compasso inteiro (semínima), meio compasso (colcheia), um quarto de compasso (semicolcheia), um oitavo de compasso (fusa) e um dezesseis avos de compasso (semifusa). Veja a tabela abaixo com todos os tempos:

1.3.1. No projeto usamos WHOLE como semínima, HALF como colcheia, QUARTER como semicolcheia, EIGHTH como fusa e SIXTEENTH como semifusa.

1.4. Definimos o array tipo inteiro tune[] com todas as notas musicais na ordem que deverão ser tocadas.

1.5. Definimos o array tipo float duration[] com todos os tempos (ou duração) das notas musicais definidas anteriormente.

1.4. Declaramos a variável tipo inteira comprimento.

2. Através da estrutura void setup(), definimos:

2.1. Define-se como saída do controlador Arduino (OUTPUT) a porta digital 4, onde deverá estar conectado o terminal positivo do disco piezoelétrioco ou do buzzer.

2.2. Definimos que a variável comprimento = sizeof(tune) / sizeof (tune[0]), ou seja, a variável comprimento será igual ao número de notas musicais do array tune (neste projeto são 26 notas musiciais).

2.2.1. O operador sizeof conta o número total de bytes ocupados no array tune. Dividido pelo número de bytes do primeiro elemento, tune[0], teremos o total de notas musicais dentro do array tune.

Observação: Neste exemplo todas notas musicais tem o mesmo tamanho de bytes (ou de caracteres).

3. Através da estrutura void loop(), obtemos:

3.1. Criamos um loop de incremento 1, variando de x=0 até o xonde no nosso projeto, a variável comprimento é calculada como 26 (número de notas musicais ocupadas no array tune).

3.2. Através da função tone(4, tune[x]) tocamos as notas de acordo com o array tune[].

3.3. Através da função delay(1500 * duração[x]) definimos a duração de cada nota. Observe que utilizamos como compasso o valor de 1500ms. (As notas podem ter duração de um compasso inteiro (semínima), meio compasso (colcheia), um quarto de compasso (semicolcheia), um oitavo de compasso (fusa) e um dezesseis avos de compasso (semifusa)).

Observação 1: Podemos também utilizar a seguinte linha de comando, tone(4, tune[x], 1500 * duration[x]); eliminando a linha delay(1500 * duração[x]).

Observação 2:  Alterando o valor do compasso, a melodia será tocada de forma mais rápida ou mais devagar.

3.4. Interrompe o som do sonorizador piezoelétrico.

3.5. Através da função delay(3000), o programa espera 3 segundos para reiniciar a música.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores