Projeto 33 - Criar sons com buzzer ou disco piezoelétrico

Básico - Projeto 33

Criar sons utilizando um buzzer ou um disco piezoelétrico

Objetivo

Neste projeto vamos criar sons utilizando um buzer ou um disco piezoelétrico. Através de um botão (push button), podemos selecionar qual componente desejamos usar para gerar os sons, um buzzer ou um disco piezoelétrico.

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 dispositivos 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  
Resistor

Resistor

1

Resistor de 10KΩ (push button)

Push Button  Push Button 6x6x5m 1  
Buzzer

Buzzer ativo 5V 12mm

1  
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  
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.


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 ao Arduino.

 

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.

3. Monte o botão (push button) com resistor pull-down (resistor conectado no GND). Desta forma, quando o botão estiver pressionado, o Arduino retornará "high" ou "1". Leia mais em Resistores Pull-down e pull-up 

 Obs.: Os resistores pull-up e pull-down garantem um nível lógico estável quando por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10KΩ para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla:

Entradas-e-Saídas-digitais-Arduino-pull-up-pull-down

4.1 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.

Código do Projeto (Sketch)

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

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

/*******************************************************************************
*
*    Projeto 33 – Sons com buzzer ou disco piezoelétrico
*                   http://squids.com.br/arduino
*
*******************************************************************************/
 

const int buzzerPin = 3; // Pino ligado ao buzzer
const int piezoPin = 5; //Pino ligado ao piezo
const int botPin = 2; // Pino ligado ao push button

int estadoA; //Define a variável estadoA=0 (leitura)
int estadoB = LOW; //Define a variável estadoB=0 (valor gravado)
int seletor = 0; //Define o valor 0 ou 1 (HIGH ou LOW)
int pin; //Declara a variável pin

void setup() {
    pinMode(buzzerPin,OUTPUT); // Define o pino do Buzzer como Saida 
    pinMode(botPin,INPUT); //Define a porta do botão como Entrada no Arduino
}

void loop() {
    
    //toca a melodia
    select(); // chama a função select
    delay(1000);
    select(); // chama a função select
    tone(pin,262,200); //DO
    select(); // chama a função select
    delay(200);
    tone(pin,294,300); //RE
    select(); // chama a função select
    delay(200);
    tone(pin,330,300); //MI
    select(); // chama a função select
    delay(200);
    tone(pin,349,300); //FA
    select(); // chama a função select
    delay(300);
    tone(pin,349,300); //FA
    select(); // chama a função select
    delay(300);
    tone(pin,349,300); //FA
    select(); // chama a função select
    delay(300);
    tone(pin,262,100); //DO
    select(); // chama a função select
    delay(200);
    tone(pin,294,300); //RE
    select(); // chama a função select
    delay(200);   
    tone(pin,262,100); //DO
    select(); // chama a função select
    delay(200);
    tone(pin,294,300); //RE
    select(); // chama a função select
    delay(300);
    tone(pin,294,300); //RE
    select(); // chama a função select
    delay(300);
    tone(pin,294,300); //RE
    select(); // chama a função select
    delay(300);
    tone(pin,262,200); //DO
    select(); // chama a função select
    delay(200);
    tone(pin,392,200); //SOL
    select(); // chama a função select
    delay(200);
    tone(pin,349,200); //FA
    select(); // chama a função select
    delay(200);
    tone(pin,330,300); //MI
    select(); // chama a função select
    delay(300);
    tone(pin,330,300); //MI
    select(); // chama a função select
    delay(300);
    tone(pin,330,300); //MI
    select(); // chama a função select
    delay(300);
    tone(pin,262,200); //DO
    select(); // chama a função select
    delay(200);
    tone(pin,294,300); //RE
    select(); // chama a função select
    delay(200);
    tone(pin,330,300); //MI
    select(); // chama a função select
    delay(200);
    tone(pin,349,300); //FA
    select(); // chama a função select
    delay(300);
    tone(pin,349,300); //FA
    select(); // chama a função select
    delay(300);
    tone(pin,349,300); //FA
    select(); // chama a função select
    delay(300);
    select(); // chama a função select
}

void select(){
//Push button função liga / desliga
    estadoA = digitalRead(botPin); //Lê o botão se está HIGH ou LOW
    if ((estadoA==HIGH) && (estadoB==LOW)) {
        seletor = 1 - seletor;
        delay(300); //espera soltar o botão
    }
    estadoB = estadoA;
    if (seletor == 1) {pin = 3;} // aciona o piezo
    else {pin = 5;} //aciona o buzzer
} 

 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 disco piezoelétrico irá emitir sons, notas musicais definidas no sketch.

2. Quando você pressionar e soltar o push button, os sons serão redirecionados para o buzzer e vice e versa.

Gerar sons em um dispositivo piezoelétrico

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.

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 declaramos as constantes e as variáveis do projeto.

1.1. Observe que utilizamos as constantes e variáveis tipo "int". 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.  A constante buzzerPin se refere ao buzzer que deverá estar conectado à porta digital 3 do Arduino.

1.3. A constante piezoPin se refere ao sensor piezoelétrico que deverá estar conectado à porta digital 5 do microcontrolador Arduino (neste projeto o disco pieze se comportará como um alto falante e não como um sensor).

1.4. A constante botPin se refere à chave momentânea (push button) conectado à porta 3 (PWM) do microcontrolador Arduino.

Observação: As constantes buzzerPin, piezoPin, botPin foram definidas como constantes (const), pois não se alteram ao longo do programa. Desta forma podemos economizar recursos de memória do microcontrolador.

1.5. Declaramos a variável estadoA que armazenará os valores lidos no botão (push button): acionado (HIGH) ou desligado (LOW).

1.6. Declaramos a variável estadoB como LOW (valor inicial).

1.7. Declaramos a variável seletor igual a 0 (zero).

1.8. Declaramos a variável pin.

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

 

2.2. Define-se a constante buzzerPin como saída do controlador Arduino (OUTPUT) conectada à porta digital 3.

2.2. Define-se a constante botPin como entrada do controlador Arduino (INPUT) conectada à porta digital 2.

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

 3.1. Chamamos a função select() que irá permitir que o usuário mude o dispositivo piezoelétrico.

3.2. Através da função delay(1000) o programa espera 1000ms (1 segundo) para iniciar a melodia.

3.3. Chamamos novamente a  função select(). Isto deve acontecer sempre entre uma nota e outra para forçar a verificação de qual dispositivo piezoelétrico o usuário quer utilizar.

3.4. Através da função tone(pin, 262, 200) tocamos a nota DO durante 200ms.  Desta forma, o som deverá ser tocado no dispositivo definido pela variável pin.

3.5. Através da função delay(300) esperamos 300ms entre uma nota e outra.

3.6. Esta rotina é repetida sucessivamente até finalizar a melodia, tocando todas as notas musicais.

4. Através da função select(), obtemos:

 4.1. A função select() nada mais é do que uma rotina de código para ligar e desligar uma chave (push button). Neste caso, quando você clica no botão, o seletor é alterado, definindo qual dispositivo piezoelétrico que deverá emitir o som.

4.2. Para conhecer os detalhes desta rotina, veja o Projeto 4.

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

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores