Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 33 - Criar sons com buzzer ou disco piezoelétrico
Projeto 33 - Criar sons com buzzer ou disco piezoelétrico
Angelo Luis Ferreira | 15/01/2018
Acessos: 17.508
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.
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 |
|
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 |
|
|
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:
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