Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 36 - Controlando a frequência de um sonorizador com potenciômetro
Projeto 36 - Controlando a frequência de um sonorizador com potenciômetro
Angelo Luis Ferreira | 26/03/2018
Acessos: 22.058
Básico - Projeto 36
Controlando um sonorizador piezoelétrico (frequência)
Objetivo
Neste projeto vamos apresentar um circuito onde é possível controlar a frequência de um sonorizador piezoelétrico (buzzer ou disco piezoelétrico) através de um potenciômetro. Neste exemplo, vamos utilizar o conceito tone() para gerar sons, de forma que o sonorizador deverá estar conectado à uma porta digital do Arduino sem precisar do recurso PWM (Pulse Width Modulation).
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 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ções
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 |
 |
|
Buzzer |
Buzzer ativo 5V 12mm
|
1 |
 |
Utilize um buzzer ou um disco piezoelétrico
|
Potenciômetro |
Potenciômetro 10K
|
1 |
 |
O valor do potenciômetro aumenta quando giramos o eixo do componente na direção do polo negativo para o polo positivo.
|
Arduino UNO R3 |
Arduino UNO |
1 |
 |
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuíto
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 ao potenciômetro (neste projeto) ou a uma porta digital do Arduino e o polo negativo ao GND.

2. Observe que nesse projeto o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente:

2.1. Veja a montagem do nosso projeto abaixo:

2.2. Desta forma o potenciômetro funciona como um divisor de tensão que pode ser lido pelo IDE do Arduino. Girando o eixo no sentido horário (da saída do arduino para a entrada do buzzer) aumentaremos o valor, e ao contrário, diminuímos o volume do som. Isto acontece pois girando o eixo do potenciômetro aumentaremos ou diminuímos a tensão na entrada da porta analógica do Arduino, variando de 0 a 5V. Para saber mais sobre a diferença entre potenciômetro e reostato leia o tutorial: Potenciômetro ou reostato: qual a diferença?

3. A montagem do nosso projeto 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 buzzer. Você poderá substituir o buzzer por um disco piezoelétrico para ter um efeito semelhante. O cabo vermelho (positivo) deverá estar conectado ao Arduino e o cabo preto (negativo) conectado ao GND (ground).
Código do Projeto (Sketch)
1) Faça o dowload e abra o arquivo projeto36.ino no IDE do Arduino: DOWNLOAD - projeto36.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* Projeto 36 - Controlando a frequência de um sonorizador com potenciômetro
* http://squids.com.br/arduino
*
*******************************************************************************/
const int pinPot = A5; // Indica a porta analógica ligada ao potenciômetro
const int pinBuzzer = 7; // Indica a porta digital ligada ao buzzer
const int time = 70; // Define o tempo em ms de cada tone
void setup(){
pinMode(pinBuzzer, OUTPUT);
pinMode(pinPot, INPUT); // Por padrão porta analógica é sempre INPUT
Serial.begin(9600);
}
void loop(){
int potValue = analogRead(pinPot); // Lê valores no potenciômetro
int frequency = map(potValue, 0, 1023, 0, 2500); //define valores de frequência
float volt = potValue * (5.00/1023.0); //Valores da tensão no circuito
Serial.print("P = ");
Serial.print(potValue);
Serial.print(" | T = ");
Serial.print(volt);
Serial.print(" | F = ");
Serial.println(frequency);
tone(pinBuzzer, frequency, time);
}
Observação: Os valores mínimo e máximo de frequência podem ser alterados a vontade. Por exemplo, você poderá utilizar valores das notas musicais de diversas escalas. Veja tabela de notas musicais.
Vídeo
Como o projeto deve funcionar
1. Ao iniciar o programa, você poderá controlar a frequência gerada em um buzzer através do potenciômetro.
2. Girando o eixo do potenciômetro para o lado conectado no polo positivo (5V) o valor da frequência aumentará. Já ao contrário, girando o eixo para o lado negativo (GND) o valor da frequência diminuirá.
3. Através do monitor serial do IDE, você poderá visualizar os valores lidos no potenciômetro, a tensão enviada para o buzzer e o valor de frequência para cada posição do eixo do potenciômetro. Lembre-se, o potenciômetro neste circuito está montado como um divisor de tensão. cuja tensão do circuito irá variar de 0 a 5V.

Gerar sons em 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". 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 pinPot se refere ao potenciômetro de 10KΩ que deverá estar conectado à porta analógica A5 do microcontrolador Arduino.
1.3. A constante pinBuzzer se refere ao buzzer ativo 5V que deverá estar conectado à porta digital 7 do Arduino.
1.4. A constante time se refere ao tempo em micro segundos de cada tom. Esse valor poderá ser alterado resultando em um som mais contínuo quanto maior for o valor.
2. Através da estrutura void setup(), definimos:

2.1. Define-se como saída do controlador Arduino (OUTPUT) a porta digital 7 (pinBuzzer), onde deverá estar conectado o terminal positivo do sonorizador piezoelétrico (buzzer).
2.2. Define-se como entrada no controlador Arduino (INPUT) a porta analógica A5, onde deverá estar conectado o potenciômetro (terminal central). Esta instrução é opcional pois por padrão uma porta analógica é sempre INPUT.
2.3. A função Serial.begin() serve para dizer ao Arduino que será coletado dados para o computador a partir da porta serial e o cabo USB. O número entre os parênteses significa qual é a taxa de dados que a placa vai se comunicar com o computador. Utilizaremos a taxa padrão de 9600bps (bits-per-second).
3. Através da estrutura void loop(), obtemos:

3.1. Através da expressão int potValue = analogRead(pinPot), definimos a variável local potValue como o valor lido no potenciômetro, entre 0V e 5V, convertido pelo ADC (Analog to Digital Convertes, ou conversor analógico-digital do Arduino) em um valor digital que varia de 0 a 1023.
3.1.1. A função analogRead() converte o valor analógico lido no potenciômetro para um valor digital, que varia de 0 a 1023 para variáveis tipo inteira (int), ou seja, possui 210 = 1024 valores inteiros (referente à resolução de 10 bits do ADC para controladores Arduino UNO, Mega e Leonardo).
3.1.2. Assim, quando o eixo do potenciômetro estiver totalmente posicionado do lado do polo negativo (0 V), o valor lido será zero, e quando o eixo for deslocado totalmente para o lado do polo positivo (5 V), o valor lido será de 1023, variando proporcionalmente conforme a posição do eixo do componente entre estes dois extremos.
3.2. Através da instrução int frequency = map(potValue, 0, 1024, 0, 2500) definimos a variável local frequency (frequência de cada som em Hz).
3.2.1. A função map(potValue, 0, 1023, 0, 2500) irá converter os valores digitais lidos no potenciômetro em valores proporcionais entre 0 e 2500. Adotamos estes valores, onde a frequência irá variar de 0Hz a 2.500Hz. Porém esses valores poderão ser alterados a vontade, lembrando-se que o ouvido humano pode captar frequências entre 20 e 20.000Hz.
3.3. Através da instrução float volt = potValue * (5.00 / 1023.0) definimos a variável volt, tipo float, calculando pela regra de 3 o seu valor analógico lido pelo potenciômetro em Volt. Variáveis tipo float possuem 2 casas decimais.
3.3.1. O valor calculado da variável volt é o valor da tensão enviada para a porta analógica do Arduino que será convertida pelo ADC (Analog to Digital Convertes).
3.4. Através das funções Serial.print e Serial.println (quebra de linha), mostramos no Monitor Serial os valores de potValue (entre 0 e 1023), volt (entre 0 e 255) e frequency (entre 0 e 2500) dependendo da posição do eixo do potenciômetro:

3.5. Através da função tone (pinBuzzer, frequency, time) o buzzer emitirá sons de acordo com os valores definidos para as variáveis frequency e time, que determinam a frequência e duração de cada tom.
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários